浏览代码

Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (60 commits)
  uio: make uio_info's name and version const
  UIO: Documentation for UIO ioport info handling
  UIO: Pass information about ioports to userspace (V2)
  UIO: uio_pdrv_genirq: allow custom irq_flags
  UIO: use pci_ioremap_bar() in drivers/uio
  arm: struct device - replace bus_id with dev_name(), dev_set_name()
  libata: struct device - replace bus_id with dev_name(), dev_set_name()
  avr: struct device - replace bus_id with dev_name(), dev_set_name()
  block: struct device - replace bus_id with dev_name(), dev_set_name()
  chris: struct device - replace bus_id with dev_name(), dev_set_name()
  dmi: struct device - replace bus_id with dev_name(), dev_set_name()
  gadget: struct device - replace bus_id with dev_name(), dev_set_name()
  gpio: struct device - replace bus_id with dev_name(), dev_set_name()
  gpu: struct device - replace bus_id with dev_name(), dev_set_name()
  hwmon: struct device - replace bus_id with dev_name(), dev_set_name()
  i2o: struct device - replace bus_id with dev_name(), dev_set_name()
  IA64: struct device - replace bus_id with dev_name(), dev_set_name()
  i7300_idle: struct device - replace bus_id with dev_name(), dev_set_name()
  infiniband: struct device - replace bus_id with dev_name(), dev_set_name()
  ISDN: struct device - replace bus_id with dev_name(), dev_set_name()
  ...
Linus Torvalds 16 年之前
父节点
当前提交
40d7ee5d16
共有 100 个文件被更改,包括 822 次插入504 次删除
  1. 99 2
      Documentation/DocBook/uio-howto.tmpl
  2. 2 2
      Documentation/kobject.txt
  3. 1 1
      arch/arm/kernel/ecard.c
  4. 1 1
      arch/arm/mach-aaec2000/core.c
  5. 3 3
      arch/arm/mach-ep93xx/core.c
  6. 5 5
      arch/arm/mach-integrator/core.c
  7. 3 3
      arch/arm/mach-integrator/integrator_cp.c
  8. 1 1
      arch/arm/mach-lh7a40x/clcd.c
  9. 1 1
      arch/arm/mach-netx/fb.c
  10. 1 1
      arch/arm/mach-realview/core.h
  11. 1 1
      arch/arm/mach-versatile/core.h
  12. 1 1
      arch/arm/plat-omap/include/mach/memory.h
  13. 2 2
      arch/avr32/mach-at32ap/clock.c
  14. 3 3
      arch/cris/arch-v32/drivers/iop_fw_load.c
  15. 1 1
      arch/ia64/kernel/pci-dma.c
  16. 1 2
      arch/ia64/sn/kernel/tiocx.c
  17. 1 1
      arch/mips/kernel/vpe.c
  18. 0 15
      arch/s390/include/asm/s390_rdev.h
  19. 3 3
      block/bsg.c
  20. 1 1
      block/genhd.c
  21. 1 1
      drivers/ata/libata-scsi.c
  22. 1 1
      drivers/base/attribute_container.c
  23. 26 0
      drivers/base/base.h
  24. 33 19
      drivers/base/bus.c
  25. 155 42
      drivers/base/core.c
  26. 14 12
      drivers/base/dd.c
  27. 10 3
      drivers/base/driver.c
  28. 1 7
      drivers/base/firmware_class.c
  29. 3 4
      drivers/base/isa.c
  30. 67 63
      drivers/base/platform.c
  31. 11 10
      drivers/base/power/main.c
  32. 2 2
      drivers/base/power/trace.c
  33. 1 1
      drivers/char/mwave/mwavedd.c
  34. 1 1
      drivers/firmware/dmi-id.c
  35. 1 1
      drivers/gpio/gpiolib.c
  36. 1 1
      drivers/gpu/drm/drm_sysfs.c
  37. 1 1
      drivers/hwmon/hwmon.c
  38. 1 1
      drivers/hwmon/lm75.c
  39. 1 1
      drivers/idle/i7300_idle.c
  40. 1 1
      drivers/infiniband/core/sysfs.c
  41. 1 2
      drivers/infiniband/core/ucm.c
  42. 1 2
      drivers/infiniband/ulp/srp/ib_srp.c
  43. 1 1
      drivers/isdn/mISDN/dsp_pipeline.c
  44. 4 6
      drivers/lguest/lguest_device.c
  45. 12 12
      drivers/macintosh/macio_asic.c
  46. 2 3
      drivers/memstick/core/memstick.c
  47. 7 7
      drivers/memstick/core/mspro_block.c
  48. 2 2
      drivers/memstick/host/tifm_ms.c
  49. 4 4
      drivers/message/i2o/device.c
  50. 1 1
      drivers/message/i2o/i2o_proc.c
  51. 1 1
      drivers/message/i2o/iop.c
  52. 1 1
      drivers/misc/sgi-gru/grumain.c
  53. 1 1
      drivers/misc/sgi-xp/xp_main.c
  54. 4 4
      drivers/misc/sgi-xp/xpc_main.c
  55. 1 1
      drivers/misc/sgi-xp/xpnet.c
  56. 1 1
      drivers/misc/tifm_7xx1.c
  57. 3 4
      drivers/misc/tifm_core.c
  58. 8 8
      drivers/mtd/devices/m25p80.c
  59. 15 15
      drivers/mtd/devices/mtd_dataflash.c
  60. 1 1
      drivers/mtd/maps/integrator-flash.c
  61. 2 2
      drivers/mtd/maps/ixp2000.c
  62. 1 1
      drivers/mtd/maps/ixp4xx.c
  63. 1 1
      drivers/mtd/maps/omap_nor.c
  64. 3 3
      drivers/mtd/maps/physmap.c
  65. 2 2
      drivers/mtd/maps/physmap_of.c
  66. 1 1
      drivers/mtd/mtdconcat.c
  67. 1 1
      drivers/mtd/nand/fsl_upm.c
  68. 1 1
      drivers/mtd/nand/plat_nand.c
  69. 1 1
      drivers/mtd/nand/tmio_nand.c
  70. 1 1
      drivers/mtd/onenand/generic.c
  71. 1 1
      drivers/mtd/onenand/omap2.c
  72. 1 1
      drivers/mtd/ubi/build.c
  73. 2 2
      drivers/mtd/ubi/vmt.c
  74. 77 55
      drivers/pci/pci-driver.c
  75. 3 4
      drivers/pnp/card.c
  76. 2 3
      drivers/pnp/core.c
  77. 1 1
      drivers/pnp/system.c
  78. 2 2
      drivers/power/ds2760_battery.c
  79. 1 1
      drivers/s390/Makefile
  80. 5 6
      drivers/s390/block/dcssblk.c
  81. 3 4
      drivers/s390/crypto/ap_bus.c
  82. 2 3
      drivers/s390/kvm/kvm_virtio.c
  83. 3 4
      drivers/s390/net/cu3088.c
  84. 3 4
      drivers/s390/net/qeth_core_main.c
  85. 0 2
      drivers/s390/net/qeth_l2_main.c
  86. 0 2
      drivers/s390/net/qeth_l3_main.c
  87. 0 51
      drivers/s390/s390_rdev.c
  88. 2 2
      drivers/serial/serial_core.c
  89. 9 11
      drivers/spi/spi.c
  90. 1 1
      drivers/spi/spi_bitbang.c
  91. 1 1
      drivers/spi/spi_butterfly.c
  92. 1 1
      drivers/spi/spi_lm70llp.c
  93. 3 3
      drivers/thermal/thermal_sys.c
  94. 142 17
      drivers/uio/uio.c
  95. 1 2
      drivers/uio/uio_cif.c
  96. 3 2
      drivers/uio/uio_pdrv_genirq.c
  97. 2 2
      drivers/usb/core/usb.c
  98. 1 1
      drivers/usb/gadget/at91_udc.c
  99. 1 1
      drivers/usb/gadget/atmel_usba_udc.c
  100. 1 1
      drivers/usb/gadget/fsl_qe_udc.c

+ 99 - 2
Documentation/DocBook/uio-howto.tmpl

@@ -41,6 +41,12 @@ GPL version 2.
 </abstract>
 </abstract>
 
 
 <revhistory>
 <revhistory>
+	<revision>
+	<revnumber>0.6</revnumber>
+	<date>2008-12-05</date>
+	<authorinitials>hjk</authorinitials>
+	<revremark>Added description of portio sysfs attributes.</revremark>
+	</revision>
 	<revision>
 	<revision>
 	<revnumber>0.5</revnumber>
 	<revnumber>0.5</revnumber>
 	<date>2008-05-22</date>
 	<date>2008-05-22</date>
@@ -318,6 +324,54 @@ interested in translating it, please email me
 offset = N * getpagesize();
 offset = N * getpagesize();
 </programlisting>
 </programlisting>
 
 
+<para>
+	Sometimes there is hardware with memory-like regions that can not be
+	mapped with the technique described here, but there are still ways to
+	access them from userspace. The most common example are x86 ioports.
+	On x86 systems, userspace can access these ioports using
+	<function>ioperm()</function>, <function>iopl()</function>,
+	<function>inb()</function>, <function>outb()</function>, and similar
+	functions.
+</para>
+<para>
+	Since these ioport regions can not be mapped, they will not appear under
+	<filename>/sys/class/uio/uioX/maps/</filename> like the normal memory
+	described above. Without information about the port regions a hardware
+	has to offer, it becomes difficult for the userspace part of the
+	driver to find out which ports belong to which UIO device.
+</para>
+<para>
+	To address this situation, the new directory
+	<filename>/sys/class/uio/uioX/portio/</filename> was added. It only
+	exists if the driver wants to pass information about one or more port
+	regions to userspace. If that is the case, subdirectories named
+	<filename>port0</filename>, <filename>port1</filename>, and so on,
+	will appear underneath
+	<filename>/sys/class/uio/uioX/portio/</filename>.
+</para>
+<para>
+	Each <filename>portX/</filename> directory contains three read-only
+	files that show start, size, and type of the port region:
+</para>
+<itemizedlist>
+<listitem>
+	<para>
+	<filename>start</filename>: The first port of this region.
+	</para>
+</listitem>
+<listitem>
+	<para>
+	<filename>size</filename>: The number of ports in this region.
+	</para>
+</listitem>
+<listitem>
+	<para>
+	<filename>porttype</filename>: A string describing the type of port.
+	</para>
+</listitem>
+</itemizedlist>
+
+
 </sect1>
 </sect1>
 </chapter>
 </chapter>
 
 
@@ -339,12 +393,12 @@ offset = N * getpagesize();
 
 
 <itemizedlist>
 <itemizedlist>
 <listitem><para>
 <listitem><para>
-<varname>char *name</varname>: Required. The name of your driver as
+<varname>const char *name</varname>: Required. The name of your driver as
 it will appear in sysfs. I recommend using the name of your module for this.
 it will appear in sysfs. I recommend using the name of your module for this.
 </para></listitem>
 </para></listitem>
 
 
 <listitem><para>
 <listitem><para>
-<varname>char *version</varname>: Required. This string appears in
+<varname>const char *version</varname>: Required. This string appears in
 <filename>/sys/class/uio/uioX/version</filename>.
 <filename>/sys/class/uio/uioX/version</filename>.
 </para></listitem>
 </para></listitem>
 
 
@@ -355,6 +409,13 @@ mapping you need to fill one of the <varname>uio_mem</varname> structures.
 See the description below for details.
 See the description below for details.
 </para></listitem>
 </para></listitem>
 
 
+<listitem><para>
+<varname>struct uio_port port[ MAX_UIO_PORTS_REGIONS ]</varname>: Required
+if you want to pass information about ioports to userspace. For each port
+region you need to fill one of the <varname>uio_port</varname> structures.
+See the description below for details.
+</para></listitem>
+
 <listitem><para>
 <listitem><para>
 <varname>long irq</varname>: Required. If your hardware generates an
 <varname>long irq</varname>: Required. If your hardware generates an
 interrupt, it's your modules task to determine the irq number during
 interrupt, it's your modules task to determine the irq number during
@@ -448,6 +509,42 @@ Please do not touch the <varname>kobj</varname> element of
 <varname>struct uio_mem</varname>! It is used by the UIO framework
 <varname>struct uio_mem</varname>! It is used by the UIO framework
 to set up sysfs files for this mapping. Simply leave it alone.
 to set up sysfs files for this mapping. Simply leave it alone.
 </para>
 </para>
+
+<para>
+Sometimes, your device can have one or more port regions which can not be
+mapped to userspace. But if there are other possibilities for userspace to
+access these ports, it makes sense to make information about the ports
+available in sysfs. For each region, you have to set up a
+<varname>struct uio_port</varname> in the <varname>port[]</varname> array.
+Here's a description of the fields of <varname>struct uio_port</varname>:
+</para>
+
+<itemizedlist>
+<listitem><para>
+<varname>char *porttype</varname>: Required. Set this to one of the predefined
+constants. Use <varname>UIO_PORT_X86</varname> for the ioports found in x86
+architectures.
+</para></listitem>
+
+<listitem><para>
+<varname>unsigned long start</varname>: Required if the port region is used.
+Fill in the number of the first port of this region.
+</para></listitem>
+
+<listitem><para>
+<varname>unsigned long size</varname>: Fill in the number of ports in this
+region. If <varname>size</varname> is zero, the region is considered unused.
+Note that you <emphasis>must</emphasis> initialize <varname>size</varname>
+with zero for all unused regions.
+</para></listitem>
+</itemizedlist>
+
+<para>
+Please do not touch the <varname>portio</varname> element of
+<varname>struct uio_port</varname>! It is used internally by the UIO
+framework to set up sysfs files for this region. Simply leave it alone.
+</para>
+
 </sect1>
 </sect1>
 
 
 <sect1 id="adding_irq_handler">
 <sect1 id="adding_irq_handler">

+ 2 - 2
Documentation/kobject.txt

@@ -118,8 +118,8 @@ the name of the kobject, call kobject_rename():
 
 
     int kobject_rename(struct kobject *kobj, const char *new_name);
     int kobject_rename(struct kobject *kobj, const char *new_name);
 
 
-Note kobject_rename does perform any locking or have a solid notion of
-what names are valid so the provide must provide their own sanity checking
+kobject_rename does not perform any locking or have a solid notion of
+what names are valid so the caller must provide their own sanity checking
 and serialization.
 and serialization.
 
 
 There is a function called kobject_set_name() but that is legacy cruft and
 There is a function called kobject_set_name() but that is legacy cruft and

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

@@ -817,7 +817,7 @@ static struct expansion_card *__init ecard_alloc_card(int type, int slot)
 	ec->dma = NO_DMA;
 	ec->dma = NO_DMA;
 	ec->ops = &ecard_default_ops;
 	ec->ops = &ecard_default_ops;
 
 
-	snprintf(ec->dev.bus_id, sizeof(ec->dev.bus_id), "ecard%d", slot);
+	dev_set_name(&ec->dev, "ecard%d", slot);
 	ec->dev.parent = NULL;
 	ec->dev.parent = NULL;
 	ec->dev.bus = &ecard_bus_type;
 	ec->dev.bus = &ecard_bus_type;
 	ec->dev.dma_mask = &ec->dma_mask;
 	ec->dev.dma_mask = &ec->dma_mask;

+ 1 - 1
arch/arm/mach-aaec2000/core.c

@@ -212,7 +212,7 @@ static struct clcd_board clcd_plat_data = {
 
 
 static struct amba_device clcd_device = {
 static struct amba_device clcd_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id			= "mb:16",
+		.init_name		= "mb:16",
 		.coherent_dma_mask	= ~0,
 		.coherent_dma_mask	= ~0,
 		.platform_data		= &clcd_plat_data,
 		.platform_data		= &clcd_plat_data,
 	},
 	},

+ 3 - 3
arch/arm/mach-ep93xx/core.c

@@ -409,7 +409,7 @@ static struct amba_pl010_data ep93xx_uart_data = {
 
 
 static struct amba_device uart1_device = {
 static struct amba_device uart1_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id		= "apb:uart1",
+		.init_name	= "apb:uart1",
 		.platform_data	= &ep93xx_uart_data,
 		.platform_data	= &ep93xx_uart_data,
 	},
 	},
 	.res		= {
 	.res		= {
@@ -423,7 +423,7 @@ static struct amba_device uart1_device = {
 
 
 static struct amba_device uart2_device = {
 static struct amba_device uart2_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id		= "apb:uart2",
+		.init_name	= "apb:uart2",
 		.platform_data	= &ep93xx_uart_data,
 		.platform_data	= &ep93xx_uart_data,
 	},
 	},
 	.res		= {
 	.res		= {
@@ -437,7 +437,7 @@ static struct amba_device uart2_device = {
 
 
 static struct amba_device uart3_device = {
 static struct amba_device uart3_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id		= "apb:uart3",
+		.init_name	= "apb:uart3",
 		.platform_data	= &ep93xx_uart_data,
 		.platform_data	= &ep93xx_uart_data,
 	},
 	},
 	.res		= {
 	.res		= {

+ 5 - 5
arch/arm/mach-integrator/core.c

@@ -37,7 +37,7 @@ static struct amba_pl010_data integrator_uart_data;
 
 
 static struct amba_device rtc_device = {
 static struct amba_device rtc_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id	= "mb:15",
+		.init_name = "mb:15",
 	},
 	},
 	.res		= {
 	.res		= {
 		.start	= INTEGRATOR_RTC_BASE,
 		.start	= INTEGRATOR_RTC_BASE,
@@ -50,7 +50,7 @@ static struct amba_device rtc_device = {
 
 
 static struct amba_device uart0_device = {
 static struct amba_device uart0_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id	= "mb:16",
+		.init_name = "mb:16",
 		.platform_data = &integrator_uart_data,
 		.platform_data = &integrator_uart_data,
 	},
 	},
 	.res		= {
 	.res		= {
@@ -64,7 +64,7 @@ static struct amba_device uart0_device = {
 
 
 static struct amba_device uart1_device = {
 static struct amba_device uart1_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id	= "mb:17",
+		.init_name = "mb:17",
 		.platform_data = &integrator_uart_data,
 		.platform_data = &integrator_uart_data,
 	},
 	},
 	.res		= {
 	.res		= {
@@ -78,7 +78,7 @@ static struct amba_device uart1_device = {
 
 
 static struct amba_device kmi0_device = {
 static struct amba_device kmi0_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id	= "mb:18",
+		.init_name = "mb:18",
 	},
 	},
 	.res		= {
 	.res		= {
 		.start	= KMI0_BASE,
 		.start	= KMI0_BASE,
@@ -91,7 +91,7 @@ static struct amba_device kmi0_device = {
 
 
 static struct amba_device kmi1_device = {
 static struct amba_device kmi1_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id	= "mb:19",
+		.init_name = "mb:19",
 	},
 	},
 	.res		= {
 	.res		= {
 		.start	= KMI1_BASE,
 		.start	= KMI1_BASE,

+ 3 - 3
arch/arm/mach-integrator/integrator_cp.c

@@ -407,7 +407,7 @@ static struct mmc_platform_data mmc_data = {
 
 
 static struct amba_device mmc_device = {
 static struct amba_device mmc_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id	= "mb:1c",
+		.init_name = "mb:1c",
 		.platform_data = &mmc_data,
 		.platform_data = &mmc_data,
 	},
 	},
 	.res		= {
 	.res		= {
@@ -421,7 +421,7 @@ static struct amba_device mmc_device = {
 
 
 static struct amba_device aaci_device = {
 static struct amba_device aaci_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id	= "mb:1d",
+		.init_name = "mb:1d",
 	},
 	},
 	.res		= {
 	.res		= {
 		.start	= INTCP_PA_AACI_BASE,
 		.start	= INTCP_PA_AACI_BASE,
@@ -532,7 +532,7 @@ static struct clcd_board clcd_data = {
 
 
 static struct amba_device clcd_device = {
 static struct amba_device clcd_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id	= "mb:c0",
+		.init_name = "mb:c0",
 		.coherent_dma_mask = ~0,
 		.coherent_dma_mask = ~0,
 		.platform_data = &clcd_data,
 		.platform_data = &clcd_data,
 	},
 	},

+ 1 - 1
arch/arm/mach-lh7a40x/clcd.c

@@ -207,7 +207,7 @@ static struct clcd_board clcd_platform_data = {
 static struct amba_device name##_device = {			\
 static struct amba_device name##_device = {			\
 	.dev = {						\
 	.dev = {						\
 		.coherent_dma_mask = ~0,			\
 		.coherent_dma_mask = ~0,			\
-		.bus_id	= busid,				\
+		.init_name = busid,				\
 		.platform_data = plat,				\
 		.platform_data = plat,				\
 		},						\
 		},						\
 	.res = {						\
 	.res = {						\

+ 1 - 1
arch/arm/mach-netx/fb.c

@@ -91,7 +91,7 @@ void clk_put(struct clk *clk)
 
 
 static struct amba_device fb_device = {
 static struct amba_device fb_device = {
 	.dev		= {
 	.dev		= {
-		.bus_id	= "fb",
+		.init_name = "fb",
 		.coherent_dma_mask = ~0,
 		.coherent_dma_mask = ~0,
 	},
 	},
 	.res		= {
 	.res		= {

+ 1 - 1
arch/arm/mach-realview/core.h

@@ -31,7 +31,7 @@
 static struct amba_device name##_device = {			\
 static struct amba_device name##_device = {			\
 	.dev		= {					\
 	.dev		= {					\
 		.coherent_dma_mask = ~0,			\
 		.coherent_dma_mask = ~0,			\
-		.bus_id	= busid,				\
+		.init_name = busid,				\
 		.platform_data = plat,				\
 		.platform_data = plat,				\
 	},							\
 	},							\
 	.res		= {					\
 	.res		= {					\

+ 1 - 1
arch/arm/mach-versatile/core.h

@@ -34,7 +34,7 @@ extern unsigned int mmc_status(struct device *dev);
 static struct amba_device name##_device = {			\
 static struct amba_device name##_device = {			\
 	.dev		= {					\
 	.dev		= {					\
 		.coherent_dma_mask = ~0,			\
 		.coherent_dma_mask = ~0,			\
-		.bus_id	= busid,				\
+		.init_name = busid,				\
 		.platform_data = plat,				\
 		.platform_data = plat,				\
 	},							\
 	},							\
 	.res		= {					\
 	.res		= {					\

+ 1 - 1
arch/arm/plat-omap/include/mach/memory.h

@@ -59,7 +59,7 @@
 
 
 #define virt_to_lbus(x)		((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET)
 #define virt_to_lbus(x)		((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET)
 #define lbus_to_virt(x)		((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET)
 #define lbus_to_virt(x)		((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET)
-#define is_lbus_device(dev)	(cpu_is_omap15xx() && dev && (strncmp(dev->bus_id, "ohci", 4) == 0))
+#define is_lbus_device(dev)	(cpu_is_omap15xx() && dev && (strncmp(dev_name(dev), "ohci", 4) == 0))
 
 
 #define __arch_page_to_dma(dev, page)	({is_lbus_device(dev) ? \
 #define __arch_page_to_dma(dev, page)	({is_lbus_device(dev) ? \
 					(dma_addr_t)virt_to_lbus(page_address(page)) : \
 					(dma_addr_t)virt_to_lbus(page_address(page)) : \

+ 2 - 2
arch/avr32/mach-at32ap/clock.c

@@ -198,7 +198,7 @@ dump_clock(struct clk *parent, struct clkinf *r)
 	unsigned	i;
 	unsigned	i;
 
 
 	/* skip clocks coupled to devices that aren't registered */
 	/* skip clocks coupled to devices that aren't registered */
-	if (parent->dev && !parent->dev->bus_id[0] && !parent->users)
+	if (parent->dev && !dev_name(parent->dev) && !parent->users)
 		return;
 		return;
 
 
 	/* <nest spaces> name <pad to end> */
 	/* <nest spaces> name <pad to end> */
@@ -214,7 +214,7 @@ dump_clock(struct clk *parent, struct clkinf *r)
 		parent->users ? "on" : "off",	/* NOTE: not-paranoid!! */
 		parent->users ? "on" : "off",	/* NOTE: not-paranoid!! */
 		clk_get_rate(parent));
 		clk_get_rate(parent));
 	if (parent->dev)
 	if (parent->dev)
-		seq_printf(r->s, ", for %s", parent->dev->bus_id);
+		seq_printf(r->s, ", for %s", dev_name(parent->dev));
 	seq_printf(r->s, "\n");
 	seq_printf(r->s, "\n");
 
 
 	/* cost of this scan is small, but not linear... */
 	/* cost of this scan is small, but not linear... */

+ 3 - 3
arch/cris/arch-v32/drivers/iop_fw_load.c

@@ -24,12 +24,12 @@
 #error "Please contact <greg@kroah.com> for details on how to fix it properly."
 #error "Please contact <greg@kroah.com> for details on how to fix it properly."
 
 
 static struct device iop_spu_device[2] = {
 static struct device iop_spu_device[2] = {
-	{ .bus_id =     "iop-spu0", },
-	{ .bus_id =     "iop-spu1", },
+	{ .init_name =     "iop-spu0", },
+	{ .init_name =     "iop-spu1", },
 };
 };
 
 
 static struct device iop_mpu_device = {
 static struct device iop_mpu_device = {
-	.bus_id =       "iop-mpu",
+	.init_name =       "iop-mpu",
 };
 };
 
 
 static int wait_mpu_idle(void)
 static int wait_mpu_idle(void)

+ 1 - 1
arch/ia64/kernel/pci-dma.c

@@ -39,7 +39,7 @@ int iommu_detected __read_mostly;
    be probably a smaller DMA mask, but this is bug-to-bug compatible
    be probably a smaller DMA mask, but this is bug-to-bug compatible
    to i386. */
    to i386. */
 struct device fallback_dev = {
 struct device fallback_dev = {
-	.bus_id = "fallback device",
+	.init_name = "fallback device",
 	.coherent_dma_mask = DMA_32BIT_MASK,
 	.coherent_dma_mask = DMA_32BIT_MASK,
 	.dma_mask = &fallback_dev.coherent_dma_mask,
 	.dma_mask = &fallback_dev.coherent_dma_mask,
 };
 };

+ 1 - 2
arch/ia64/sn/kernel/tiocx.c

@@ -206,8 +206,7 @@ cx_device_register(nasid_t nasid, int part_num, int mfg_num,
 	cx_dev->dev.parent = NULL;
 	cx_dev->dev.parent = NULL;
 	cx_dev->dev.bus = &tiocx_bus_type;
 	cx_dev->dev.bus = &tiocx_bus_type;
 	cx_dev->dev.release = tiocx_bus_release;
 	cx_dev->dev.release = tiocx_bus_release;
-	snprintf(cx_dev->dev.bus_id, BUS_ID_SIZE, "%d",
-		 cx_dev->cx_id.nasid);
+	dev_set_name(&cx_dev->dev, "%d", cx_dev->cx_id.nasid);
 	device_register(&cx_dev->dev);
 	device_register(&cx_dev->dev);
 	get_device(&cx_dev->dev);
 	get_device(&cx_dev->dev);
 
 

+ 1 - 1
arch/mips/kernel/vpe.c

@@ -1454,7 +1454,7 @@ static int __init vpe_module_init(void)
 	device_initialize(&vpe_device);
 	device_initialize(&vpe_device);
 	vpe_device.class	= &vpe_class,
 	vpe_device.class	= &vpe_class,
 	vpe_device.parent	= NULL,
 	vpe_device.parent	= NULL,
-	strlcpy(vpe_device.bus_id, "vpe1", BUS_ID_SIZE);
+	dev_set_name(&vpe_device, "vpe1");
 	vpe_device.devt = MKDEV(major, minor);
 	vpe_device.devt = MKDEV(major, minor);
 	err = device_add(&vpe_device);
 	err = device_add(&vpe_device);
 	if (err) {
 	if (err) {

+ 0 - 15
arch/s390/include/asm/s390_rdev.h

@@ -1,15 +0,0 @@
-/*
- *  include/asm-s390/ccwdev.h
- *
- *    Copyright (C) 2002,2005 IBM Deutschland Entwicklung GmbH, IBM Corporation
- *    Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
- *               Carsten Otte  <cotte@de.ibm.com>
- *
- *  Interface for s390 root device
- */
-
-#ifndef _S390_RDEV_H_
-#define _S390_RDEV_H_
-extern struct device *s390_root_dev_register(const char *);
-extern void s390_root_dev_unregister(struct device *);
-#endif /* _S390_RDEV_H_ */

+ 3 - 3
block/bsg.c

@@ -42,7 +42,7 @@ struct bsg_device {
 	int done_cmds;
 	int done_cmds;
 	wait_queue_head_t wq_done;
 	wait_queue_head_t wq_done;
 	wait_queue_head_t wq_free;
 	wait_queue_head_t wq_free;
-	char name[BUS_ID_SIZE];
+	char name[20];
 	int max_queue;
 	int max_queue;
 	unsigned long flags;
 	unsigned long flags;
 };
 };
@@ -781,7 +781,7 @@ static struct bsg_device *bsg_add_device(struct inode *inode,
 	mutex_lock(&bsg_mutex);
 	mutex_lock(&bsg_mutex);
 	hlist_add_head(&bd->dev_list, bsg_dev_idx_hash(iminor(inode)));
 	hlist_add_head(&bd->dev_list, bsg_dev_idx_hash(iminor(inode)));
 
 
-	strncpy(bd->name, rq->bsg_dev.class_dev->bus_id, sizeof(bd->name) - 1);
+	strncpy(bd->name, dev_name(rq->bsg_dev.class_dev), sizeof(bd->name) - 1);
 	dprintk("bound to <%s>, max queue %d\n",
 	dprintk("bound to <%s>, max queue %d\n",
 		format_dev_t(buf, inode->i_rdev), bd->max_queue);
 		format_dev_t(buf, inode->i_rdev), bd->max_queue);
 
 
@@ -992,7 +992,7 @@ int bsg_register_queue(struct request_queue *q, struct device *parent,
 	if (name)
 	if (name)
 		devname = name;
 		devname = name;
 	else
 	else
-		devname = parent->bus_id;
+		devname = dev_name(parent);
 
 
 	/*
 	/*
 	 * we need a proper transport to send commands, not a stacked device
 	 * we need a proper transport to send commands, not a stacked device

+ 1 - 1
block/genhd.c

@@ -1084,7 +1084,7 @@ dev_t blk_lookup_devt(const char *name, int partno)
 		struct gendisk *disk = dev_to_disk(dev);
 		struct gendisk *disk = dev_to_disk(dev);
 		struct hd_struct *part;
 		struct hd_struct *part;
 
 
-		if (strcmp(dev->bus_id, name))
+		if (strcmp(dev_name(dev), name))
 			continue;
 			continue;
 
 
 		part = disk_get_part(disk, partno);
 		part = disk_get_part(disk, partno);

+ 1 - 1
drivers/ata/libata-scsi.c

@@ -3369,7 +3369,7 @@ static void ata_scsi_remove_dev(struct ata_device *dev)
 
 
 	if (sdev) {
 	if (sdev) {
 		ata_dev_printk(dev, KERN_INFO, "detaching (SCSI %s)\n",
 		ata_dev_printk(dev, KERN_INFO, "detaching (SCSI %s)\n",
-			       sdev->sdev_gendev.bus_id);
+			       dev_name(&sdev->sdev_gendev));
 
 
 		scsi_remove_device(sdev);
 		scsi_remove_device(sdev);
 		scsi_device_put(sdev);
 		scsi_device_put(sdev);

+ 1 - 1
drivers/base/attribute_container.c

@@ -167,7 +167,7 @@ attribute_container_add_device(struct device *dev,
 		ic->classdev.parent = get_device(dev);
 		ic->classdev.parent = get_device(dev);
 		ic->classdev.class = cont->class;
 		ic->classdev.class = cont->class;
 		cont->class->dev_release = attribute_container_release;
 		cont->class->dev_release = attribute_container_release;
-		strcpy(ic->classdev.bus_id, dev->bus_id);
+		dev_set_name(&ic->classdev, dev_name(dev));
 		if (fn)
 		if (fn)
 			fn(cont, dev, &ic->classdev);
 			fn(cont, dev, &ic->classdev);
 		else
 		else

+ 26 - 0
drivers/base/base.h

@@ -63,6 +63,32 @@ struct class_private {
 #define to_class(obj)	\
 #define to_class(obj)	\
 	container_of(obj, struct class_private, class_subsys.kobj)
 	container_of(obj, struct class_private, class_subsys.kobj)
 
 
+/**
+ * struct device_private - structure to hold the private to the driver core portions of the device structure.
+ *
+ * @klist_children - klist containing all children of this device
+ * @knode_parent - node in sibling list
+ * @knode_driver - node in driver list
+ * @knode_bus - node in bus list
+ * @device - pointer back to the struct class that this structure is
+ * associated with.
+ *
+ * Nothing outside of the driver core should ever touch these fields.
+ */
+struct device_private {
+	struct klist klist_children;
+	struct klist_node knode_parent;
+	struct klist_node knode_driver;
+	struct klist_node knode_bus;
+	struct device *device;
+};
+#define to_device_private_parent(obj)	\
+	container_of(obj, struct device_private, knode_parent)
+#define to_device_private_driver(obj)	\
+	container_of(obj, struct device_private, knode_driver)
+#define to_device_private_bus(obj)	\
+	container_of(obj, struct device_private, knode_bus)
+
 /* initialisation functions */
 /* initialisation functions */
 extern int devices_init(void);
 extern int devices_init(void);
 extern int buses_init(void);
 extern int buses_init(void);

+ 33 - 19
drivers/base/bus.c

@@ -253,7 +253,14 @@ static ssize_t store_drivers_probe(struct bus_type *bus,
 static struct device *next_device(struct klist_iter *i)
 static struct device *next_device(struct klist_iter *i)
 {
 {
 	struct klist_node *n = klist_next(i);
 	struct klist_node *n = klist_next(i);
-	return n ? container_of(n, struct device, knode_bus) : NULL;
+	struct device *dev = NULL;
+	struct device_private *dev_prv;
+
+	if (n) {
+		dev_prv = to_device_private_bus(n);
+		dev = dev_prv->device;
+	}
+	return dev;
 }
 }
 
 
 /**
 /**
@@ -286,7 +293,7 @@ int bus_for_each_dev(struct bus_type *bus, struct device *start,
 		return -EINVAL;
 		return -EINVAL;
 
 
 	klist_iter_init_node(&bus->p->klist_devices, &i,
 	klist_iter_init_node(&bus->p->klist_devices, &i,
-			     (start ? &start->knode_bus : NULL));
+			     (start ? &start->p->knode_bus : NULL));
 	while ((dev = next_device(&i)) && !error)
 	while ((dev = next_device(&i)) && !error)
 		error = fn(dev, data);
 		error = fn(dev, data);
 	klist_iter_exit(&i);
 	klist_iter_exit(&i);
@@ -320,7 +327,7 @@ struct device *bus_find_device(struct bus_type *bus,
 		return NULL;
 		return NULL;
 
 
 	klist_iter_init_node(&bus->p->klist_devices, &i,
 	klist_iter_init_node(&bus->p->klist_devices, &i,
-			     (start ? &start->knode_bus : NULL));
+			     (start ? &start->p->knode_bus : NULL));
 	while ((dev = next_device(&i)))
 	while ((dev = next_device(&i)))
 		if (match(dev, data) && get_device(dev))
 		if (match(dev, data) && get_device(dev))
 			break;
 			break;
@@ -333,7 +340,7 @@ static int match_name(struct device *dev, void *data)
 {
 {
 	const char *name = data;
 	const char *name = data;
 
 
-	return sysfs_streq(name, dev->bus_id);
+	return sysfs_streq(name, dev_name(dev));
 }
 }
 
 
 /**
 /**
@@ -461,12 +468,12 @@ int bus_add_device(struct device *dev)
 	int error = 0;
 	int error = 0;
 
 
 	if (bus) {
 	if (bus) {
-		pr_debug("bus: '%s': add device %s\n", bus->name, dev->bus_id);
+		pr_debug("bus: '%s': add device %s\n", bus->name, dev_name(dev));
 		error = device_add_attrs(bus, dev);
 		error = device_add_attrs(bus, dev);
 		if (error)
 		if (error)
 			goto out_put;
 			goto out_put;
 		error = sysfs_create_link(&bus->p->devices_kset->kobj,
 		error = sysfs_create_link(&bus->p->devices_kset->kobj,
-						&dev->kobj, dev->bus_id);
+						&dev->kobj, dev_name(dev));
 		if (error)
 		if (error)
 			goto out_id;
 			goto out_id;
 		error = sysfs_create_link(&dev->kobj,
 		error = sysfs_create_link(&dev->kobj,
@@ -482,7 +489,7 @@ int bus_add_device(struct device *dev)
 out_deprecated:
 out_deprecated:
 	sysfs_remove_link(&dev->kobj, "subsystem");
 	sysfs_remove_link(&dev->kobj, "subsystem");
 out_subsys:
 out_subsys:
-	sysfs_remove_link(&bus->p->devices_kset->kobj, dev->bus_id);
+	sysfs_remove_link(&bus->p->devices_kset->kobj, dev_name(dev));
 out_id:
 out_id:
 	device_remove_attrs(bus, dev);
 	device_remove_attrs(bus, dev);
 out_put:
 out_put:
@@ -507,7 +514,8 @@ void bus_attach_device(struct device *dev)
 			ret = device_attach(dev);
 			ret = device_attach(dev);
 		WARN_ON(ret < 0);
 		WARN_ON(ret < 0);
 		if (ret >= 0)
 		if (ret >= 0)
-			klist_add_tail(&dev->knode_bus, &bus->p->klist_devices);
+			klist_add_tail(&dev->p->knode_bus,
+				       &bus->p->klist_devices);
 	}
 	}
 }
 }
 
 
@@ -526,13 +534,13 @@ void bus_remove_device(struct device *dev)
 		sysfs_remove_link(&dev->kobj, "subsystem");
 		sysfs_remove_link(&dev->kobj, "subsystem");
 		remove_deprecated_bus_links(dev);
 		remove_deprecated_bus_links(dev);
 		sysfs_remove_link(&dev->bus->p->devices_kset->kobj,
 		sysfs_remove_link(&dev->bus->p->devices_kset->kobj,
-				  dev->bus_id);
+				  dev_name(dev));
 		device_remove_attrs(dev->bus, dev);
 		device_remove_attrs(dev->bus, dev);
-		if (klist_node_attached(&dev->knode_bus))
-			klist_del(&dev->knode_bus);
+		if (klist_node_attached(&dev->p->knode_bus))
+			klist_del(&dev->p->knode_bus);
 
 
 		pr_debug("bus: '%s': remove device %s\n",
 		pr_debug("bus: '%s': remove device %s\n",
-			 dev->bus->name, dev->bus_id);
+			 dev->bus->name, dev_name(dev));
 		device_release_driver(dev);
 		device_release_driver(dev);
 		bus_put(dev->bus);
 		bus_put(dev->bus);
 	}
 	}
@@ -831,14 +839,16 @@ static void bus_remove_attrs(struct bus_type *bus)
 
 
 static void klist_devices_get(struct klist_node *n)
 static void klist_devices_get(struct klist_node *n)
 {
 {
-	struct device *dev = container_of(n, struct device, knode_bus);
+	struct device_private *dev_prv = to_device_private_bus(n);
+	struct device *dev = dev_prv->device;
 
 
 	get_device(dev);
 	get_device(dev);
 }
 }
 
 
 static void klist_devices_put(struct klist_node *n)
 static void klist_devices_put(struct klist_node *n)
 {
 {
-	struct device *dev = container_of(n, struct device, knode_bus);
+	struct device_private *dev_prv = to_device_private_bus(n);
+	struct device *dev = dev_prv->device;
 
 
 	put_device(dev);
 	put_device(dev);
 }
 }
@@ -993,18 +1003,20 @@ static void device_insertion_sort_klist(struct device *a, struct list_head *list
 {
 {
 	struct list_head *pos;
 	struct list_head *pos;
 	struct klist_node *n;
 	struct klist_node *n;
+	struct device_private *dev_prv;
 	struct device *b;
 	struct device *b;
 
 
 	list_for_each(pos, list) {
 	list_for_each(pos, list) {
 		n = container_of(pos, struct klist_node, n_node);
 		n = container_of(pos, struct klist_node, n_node);
-		b = container_of(n, struct device, knode_bus);
+		dev_prv = to_device_private_bus(n);
+		b = dev_prv->device;
 		if (compare(a, b) <= 0) {
 		if (compare(a, b) <= 0) {
-			list_move_tail(&a->knode_bus.n_node,
-				       &b->knode_bus.n_node);
+			list_move_tail(&a->p->knode_bus.n_node,
+				       &b->p->knode_bus.n_node);
 			return;
 			return;
 		}
 		}
 	}
 	}
-	list_move_tail(&a->knode_bus.n_node, list);
+	list_move_tail(&a->p->knode_bus.n_node, list);
 }
 }
 
 
 void bus_sort_breadthfirst(struct bus_type *bus,
 void bus_sort_breadthfirst(struct bus_type *bus,
@@ -1014,6 +1026,7 @@ void bus_sort_breadthfirst(struct bus_type *bus,
 	LIST_HEAD(sorted_devices);
 	LIST_HEAD(sorted_devices);
 	struct list_head *pos, *tmp;
 	struct list_head *pos, *tmp;
 	struct klist_node *n;
 	struct klist_node *n;
+	struct device_private *dev_prv;
 	struct device *dev;
 	struct device *dev;
 	struct klist *device_klist;
 	struct klist *device_klist;
 
 
@@ -1022,7 +1035,8 @@ void bus_sort_breadthfirst(struct bus_type *bus,
 	spin_lock(&device_klist->k_lock);
 	spin_lock(&device_klist->k_lock);
 	list_for_each_safe(pos, tmp, &device_klist->k_list) {
 	list_for_each_safe(pos, tmp, &device_klist->k_list) {
 		n = container_of(pos, struct klist_node, n_node);
 		n = container_of(pos, struct klist_node, n_node);
-		dev = container_of(n, struct device, knode_bus);
+		dev_prv = to_device_private_bus(n);
+		dev = dev_prv->device;
 		device_insertion_sort_klist(dev, &sorted_devices, compare);
 		device_insertion_sort_klist(dev, &sorted_devices, compare);
 	}
 	}
 	list_splice(&sorted_devices, &device_klist->k_list);
 	list_splice(&sorted_devices, &device_klist->k_list);

+ 155 - 42
drivers/base/core.c

@@ -109,6 +109,7 @@ static struct sysfs_ops dev_sysfs_ops = {
 static void device_release(struct kobject *kobj)
 static void device_release(struct kobject *kobj)
 {
 {
 	struct device *dev = to_dev(kobj);
 	struct device *dev = to_dev(kobj);
+	struct device_private *p = dev->p;
 
 
 	if (dev->release)
 	if (dev->release)
 		dev->release(dev);
 		dev->release(dev);
@@ -119,7 +120,8 @@ static void device_release(struct kobject *kobj)
 	else
 	else
 		WARN(1, KERN_ERR "Device '%s' does not have a release() "
 		WARN(1, KERN_ERR "Device '%s' does not have a release() "
 			"function, it is broken and must be fixed.\n",
 			"function, it is broken and must be fixed.\n",
-			dev->bus_id);
+			dev_name(dev));
+	kfree(p);
 }
 }
 
 
 static struct kobj_type device_ktype = {
 static struct kobj_type device_ktype = {
@@ -209,7 +211,7 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj,
 		retval = dev->bus->uevent(dev, env);
 		retval = dev->bus->uevent(dev, env);
 		if (retval)
 		if (retval)
 			pr_debug("device: '%s': %s: bus uevent() returned %d\n",
 			pr_debug("device: '%s': %s: bus uevent() returned %d\n",
-				 dev->bus_id, __func__, retval);
+				 dev_name(dev), __func__, retval);
 	}
 	}
 
 
 	/* have the class specific function add its stuff */
 	/* have the class specific function add its stuff */
@@ -217,7 +219,7 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj,
 		retval = dev->class->dev_uevent(dev, env);
 		retval = dev->class->dev_uevent(dev, env);
 		if (retval)
 		if (retval)
 			pr_debug("device: '%s': %s: class uevent() "
 			pr_debug("device: '%s': %s: class uevent() "
-				 "returned %d\n", dev->bus_id,
+				 "returned %d\n", dev_name(dev),
 				 __func__, retval);
 				 __func__, retval);
 	}
 	}
 
 
@@ -226,7 +228,7 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj,
 		retval = dev->type->uevent(dev, env);
 		retval = dev->type->uevent(dev, env);
 		if (retval)
 		if (retval)
 			pr_debug("device: '%s': %s: dev_type uevent() "
 			pr_debug("device: '%s': %s: dev_type uevent() "
-				 "returned %d\n", dev->bus_id,
+				 "returned %d\n", dev_name(dev),
 				 __func__, retval);
 				 __func__, retval);
 	}
 	}
 
 
@@ -507,14 +509,16 @@ EXPORT_SYMBOL_GPL(device_schedule_callback_owner);
 
 
 static void klist_children_get(struct klist_node *n)
 static void klist_children_get(struct klist_node *n)
 {
 {
-	struct device *dev = container_of(n, struct device, knode_parent);
+	struct device_private *p = to_device_private_parent(n);
+	struct device *dev = p->device;
 
 
 	get_device(dev);
 	get_device(dev);
 }
 }
 
 
 static void klist_children_put(struct klist_node *n)
 static void klist_children_put(struct klist_node *n)
 {
 {
-	struct device *dev = container_of(n, struct device, knode_parent);
+	struct device_private *p = to_device_private_parent(n);
+	struct device *dev = p->device;
 
 
 	put_device(dev);
 	put_device(dev);
 }
 }
@@ -536,9 +540,15 @@ static void klist_children_put(struct klist_node *n)
  */
  */
 void device_initialize(struct device *dev)
 void device_initialize(struct device *dev)
 {
 {
+	dev->p = kzalloc(sizeof(*dev->p), GFP_KERNEL);
+	if (!dev->p) {
+		WARN_ON(1);
+		return;
+	}
+	dev->p->device = dev;
 	dev->kobj.kset = devices_kset;
 	dev->kobj.kset = devices_kset;
 	kobject_init(&dev->kobj, &device_ktype);
 	kobject_init(&dev->kobj, &device_ktype);
-	klist_init(&dev->klist_children, klist_children_get,
+	klist_init(&dev->p->klist_children, klist_children_get,
 		   klist_children_put);
 		   klist_children_put);
 	INIT_LIST_HEAD(&dev->dma_pools);
 	INIT_LIST_HEAD(&dev->dma_pools);
 	init_MUTEX(&dev->sem);
 	init_MUTEX(&dev->sem);
@@ -672,7 +682,7 @@ static int device_add_class_symlinks(struct device *dev)
 	if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
 	if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
 	    device_is_not_partition(dev)) {
 	    device_is_not_partition(dev)) {
 		error = sysfs_create_link(&dev->class->p->class_subsys.kobj,
 		error = sysfs_create_link(&dev->class->p->class_subsys.kobj,
-					  &dev->kobj, dev->bus_id);
+					  &dev->kobj, dev_name(dev));
 		if (error)
 		if (error)
 			goto out_subsys;
 			goto out_subsys;
 	}
 	}
@@ -712,11 +722,11 @@ out_busid:
 	if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
 	if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
 	    device_is_not_partition(dev))
 	    device_is_not_partition(dev))
 		sysfs_remove_link(&dev->class->p->class_subsys.kobj,
 		sysfs_remove_link(&dev->class->p->class_subsys.kobj,
-				  dev->bus_id);
+				  dev_name(dev));
 #else
 #else
 	/* link in the class directory pointing to the device */
 	/* link in the class directory pointing to the device */
 	error = sysfs_create_link(&dev->class->p->class_subsys.kobj,
 	error = sysfs_create_link(&dev->class->p->class_subsys.kobj,
-				  &dev->kobj, dev->bus_id);
+				  &dev->kobj, dev_name(dev));
 	if (error)
 	if (error)
 		goto out_subsys;
 		goto out_subsys;
 
 
@@ -729,7 +739,7 @@ out_busid:
 	return 0;
 	return 0;
 
 
 out_busid:
 out_busid:
-	sysfs_remove_link(&dev->class->p->class_subsys.kobj, dev->bus_id);
+	sysfs_remove_link(&dev->class->p->class_subsys.kobj, dev_name(dev));
 #endif
 #endif
 
 
 out_subsys:
 out_subsys:
@@ -758,12 +768,12 @@ static void device_remove_class_symlinks(struct device *dev)
 	if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
 	if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
 	    device_is_not_partition(dev))
 	    device_is_not_partition(dev))
 		sysfs_remove_link(&dev->class->p->class_subsys.kobj,
 		sysfs_remove_link(&dev->class->p->class_subsys.kobj,
-				  dev->bus_id);
+				  dev_name(dev));
 #else
 #else
 	if (dev->parent && device_is_not_partition(dev))
 	if (dev->parent && device_is_not_partition(dev))
 		sysfs_remove_link(&dev->kobj, "device");
 		sysfs_remove_link(&dev->kobj, "device");
 
 
-	sysfs_remove_link(&dev->class->p->class_subsys.kobj, dev->bus_id);
+	sysfs_remove_link(&dev->class->p->class_subsys.kobj, dev_name(dev));
 #endif
 #endif
 
 
 	sysfs_remove_link(&dev->kobj, "subsystem");
 	sysfs_remove_link(&dev->kobj, "subsystem");
@@ -866,7 +876,7 @@ int device_add(struct device *dev)
 	if (!strlen(dev->bus_id))
 	if (!strlen(dev->bus_id))
 		goto done;
 		goto done;
 
 
-	pr_debug("device: '%s': %s\n", dev->bus_id, __func__);
+	pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
 
 
 	parent = get_device(dev->parent);
 	parent = get_device(dev->parent);
 	setup_parent(dev, parent);
 	setup_parent(dev, parent);
@@ -876,7 +886,7 @@ int device_add(struct device *dev)
 		set_dev_node(dev, dev_to_node(parent));
 		set_dev_node(dev, dev_to_node(parent));
 
 
 	/* first, register with generic layer. */
 	/* first, register with generic layer. */
-	error = kobject_add(&dev->kobj, dev->kobj.parent, "%s", dev->bus_id);
+	error = kobject_add(&dev->kobj, dev->kobj.parent, "%s", dev_name(dev));
 	if (error)
 	if (error)
 		goto Error;
 		goto Error;
 
 
@@ -884,11 +894,6 @@ int device_add(struct device *dev)
 	if (platform_notify)
 	if (platform_notify)
 		platform_notify(dev);
 		platform_notify(dev);
 
 
-	/* notify clients of device entry (new way) */
-	if (dev->bus)
-		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
-					     BUS_NOTIFY_ADD_DEVICE, dev);
-
 	error = device_create_file(dev, &uevent_attr);
 	error = device_create_file(dev, &uevent_attr);
 	if (error)
 	if (error)
 		goto attrError;
 		goto attrError;
@@ -916,10 +921,19 @@ int device_add(struct device *dev)
 	if (error)
 	if (error)
 		goto DPMError;
 		goto DPMError;
 	device_pm_add(dev);
 	device_pm_add(dev);
+
+	/* Notify clients of device addition.  This call must come
+	 * after dpm_sysf_add() and before kobject_uevent().
+	 */
+	if (dev->bus)
+		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
+					     BUS_NOTIFY_ADD_DEVICE, dev);
+
 	kobject_uevent(&dev->kobj, KOBJ_ADD);
 	kobject_uevent(&dev->kobj, KOBJ_ADD);
 	bus_attach_device(dev);
 	bus_attach_device(dev);
 	if (parent)
 	if (parent)
-		klist_add_tail(&dev->knode_parent, &parent->klist_children);
+		klist_add_tail(&dev->p->knode_parent,
+			       &parent->p->klist_children);
 
 
 	if (dev->class) {
 	if (dev->class) {
 		mutex_lock(&dev->class->p->class_mutex);
 		mutex_lock(&dev->class->p->class_mutex);
@@ -940,9 +954,6 @@ done:
  DPMError:
  DPMError:
 	bus_remove_device(dev);
 	bus_remove_device(dev);
  BusError:
  BusError:
-	if (dev->bus)
-		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
-					     BUS_NOTIFY_DEL_DEVICE, dev);
 	device_remove_attrs(dev);
 	device_remove_attrs(dev);
  AttrsError:
  AttrsError:
 	device_remove_class_symlinks(dev);
 	device_remove_class_symlinks(dev);
@@ -1027,10 +1038,16 @@ void device_del(struct device *dev)
 	struct device *parent = dev->parent;
 	struct device *parent = dev->parent;
 	struct class_interface *class_intf;
 	struct class_interface *class_intf;
 
 
+	/* Notify clients of device removal.  This call must come
+	 * before dpm_sysfs_remove().
+	 */
+	if (dev->bus)
+		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
+					     BUS_NOTIFY_DEL_DEVICE, dev);
 	device_pm_remove(dev);
 	device_pm_remove(dev);
 	dpm_sysfs_remove(dev);
 	dpm_sysfs_remove(dev);
 	if (parent)
 	if (parent)
-		klist_del(&dev->knode_parent);
+		klist_del(&dev->p->knode_parent);
 	if (MAJOR(dev->devt)) {
 	if (MAJOR(dev->devt)) {
 		device_remove_sys_dev_entry(dev);
 		device_remove_sys_dev_entry(dev);
 		device_remove_file(dev, &devt_attr);
 		device_remove_file(dev, &devt_attr);
@@ -1064,9 +1081,6 @@ void device_del(struct device *dev)
 	 */
 	 */
 	if (platform_notify_remove)
 	if (platform_notify_remove)
 		platform_notify_remove(dev);
 		platform_notify_remove(dev);
-	if (dev->bus)
-		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
-					     BUS_NOTIFY_DEL_DEVICE, dev);
 	kobject_uevent(&dev->kobj, KOBJ_REMOVE);
 	kobject_uevent(&dev->kobj, KOBJ_REMOVE);
 	cleanup_device_parent(dev);
 	cleanup_device_parent(dev);
 	kobject_del(&dev->kobj);
 	kobject_del(&dev->kobj);
@@ -1086,7 +1100,7 @@ void device_del(struct device *dev)
  */
  */
 void device_unregister(struct device *dev)
 void device_unregister(struct device *dev)
 {
 {
-	pr_debug("device: '%s': %s\n", dev->bus_id, __func__);
+	pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
 	device_del(dev);
 	device_del(dev);
 	put_device(dev);
 	put_device(dev);
 }
 }
@@ -1094,7 +1108,14 @@ void device_unregister(struct device *dev)
 static struct device *next_device(struct klist_iter *i)
 static struct device *next_device(struct klist_iter *i)
 {
 {
 	struct klist_node *n = klist_next(i);
 	struct klist_node *n = klist_next(i);
-	return n ? container_of(n, struct device, knode_parent) : NULL;
+	struct device *dev = NULL;
+	struct device_private *p;
+
+	if (n) {
+		p = to_device_private_parent(n);
+		dev = p->device;
+	}
+	return dev;
 }
 }
 
 
 /**
 /**
@@ -1116,7 +1137,7 @@ int device_for_each_child(struct device *parent, void *data,
 	struct device *child;
 	struct device *child;
 	int error = 0;
 	int error = 0;
 
 
-	klist_iter_init(&parent->klist_children, &i);
+	klist_iter_init(&parent->p->klist_children, &i);
 	while ((child = next_device(&i)) && !error)
 	while ((child = next_device(&i)) && !error)
 		error = fn(child, data);
 		error = fn(child, data);
 	klist_iter_exit(&i);
 	klist_iter_exit(&i);
@@ -1147,7 +1168,7 @@ struct device *device_find_child(struct device *parent, void *data,
 	if (!parent)
 	if (!parent)
 		return NULL;
 		return NULL;
 
 
-	klist_iter_init(&parent->klist_children, &i);
+	klist_iter_init(&parent->p->klist_children, &i);
 	while ((child = next_device(&i)))
 	while ((child = next_device(&i)))
 		if (match(child, data) && get_device(child))
 		if (match(child, data) && get_device(child))
 			break;
 			break;
@@ -1196,10 +1217,101 @@ EXPORT_SYMBOL_GPL(put_device);
 EXPORT_SYMBOL_GPL(device_create_file);
 EXPORT_SYMBOL_GPL(device_create_file);
 EXPORT_SYMBOL_GPL(device_remove_file);
 EXPORT_SYMBOL_GPL(device_remove_file);
 
 
+struct root_device
+{
+	struct device dev;
+	struct module *owner;
+};
+
+#define to_root_device(dev) container_of(dev, struct root_device, dev)
+
+static void root_device_release(struct device *dev)
+{
+	kfree(to_root_device(dev));
+}
+
+/**
+ * __root_device_register - allocate and register a root device
+ * @name: root device name
+ * @owner: owner module of the root device, usually THIS_MODULE
+ *
+ * This function allocates a root device and registers it
+ * using device_register(). In order to free the returned
+ * device, use root_device_unregister().
+ *
+ * Root devices are dummy devices which allow other devices
+ * to be grouped under /sys/devices. Use this function to
+ * allocate a root device and then use it as the parent of
+ * any device which should appear under /sys/devices/{name}
+ *
+ * The /sys/devices/{name} directory will also contain a
+ * 'module' symlink which points to the @owner directory
+ * in sysfs.
+ *
+ * Note: You probably want to use root_device_register().
+ */
+struct device *__root_device_register(const char *name, struct module *owner)
+{
+	struct root_device *root;
+	int err = -ENOMEM;
+
+	root = kzalloc(sizeof(struct root_device), GFP_KERNEL);
+	if (!root)
+		return ERR_PTR(err);
+
+	err = dev_set_name(&root->dev, name);
+	if (err) {
+		kfree(root);
+		return ERR_PTR(err);
+	}
+
+	root->dev.release = root_device_release;
+
+	err = device_register(&root->dev);
+	if (err) {
+		put_device(&root->dev);
+		return ERR_PTR(err);
+	}
+
+#ifdef CONFIG_MODULE	/* gotta find a "cleaner" way to do this */
+	if (owner) {
+		struct module_kobject *mk = &owner->mkobj;
+
+		err = sysfs_create_link(&root->dev.kobj, &mk->kobj, "module");
+		if (err) {
+			device_unregister(&root->dev);
+			return ERR_PTR(err);
+		}
+		root->owner = owner;
+	}
+#endif
+
+	return &root->dev;
+}
+EXPORT_SYMBOL_GPL(__root_device_register);
+
+/**
+ * root_device_unregister - unregister and free a root device
+ * @root: device going away.
+ *
+ * This function unregisters and cleans up a device that was created by
+ * root_device_register().
+ */
+void root_device_unregister(struct device *dev)
+{
+	struct root_device *root = to_root_device(dev);
+
+	if (root->owner)
+		sysfs_remove_link(&root->dev.kobj, "module");
+
+	device_unregister(dev);
+}
+EXPORT_SYMBOL_GPL(root_device_unregister);
+
 
 
 static void device_create_release(struct device *dev)
 static void device_create_release(struct device *dev)
 {
 {
-	pr_debug("device: '%s': %s\n", dev->bus_id, __func__);
+	pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
 	kfree(dev);
 	kfree(dev);
 }
 }
 
 
@@ -1344,7 +1456,7 @@ int device_rename(struct device *dev, char *new_name)
 	if (!dev)
 	if (!dev)
 		return -EINVAL;
 		return -EINVAL;
 
 
-	pr_debug("device: '%s': %s: renaming to '%s'\n", dev->bus_id,
+	pr_debug("device: '%s': %s: renaming to '%s'\n", dev_name(dev),
 		 __func__, new_name);
 		 __func__, new_name);
 
 
 #ifdef CONFIG_SYSFS_DEPRECATED
 #ifdef CONFIG_SYSFS_DEPRECATED
@@ -1381,7 +1493,7 @@ int device_rename(struct device *dev, char *new_name)
 #else
 #else
 	if (dev->class) {
 	if (dev->class) {
 		error = sysfs_create_link_nowarn(&dev->class->p->class_subsys.kobj,
 		error = sysfs_create_link_nowarn(&dev->class->p->class_subsys.kobj,
-						 &dev->kobj, dev->bus_id);
+						 &dev->kobj, dev_name(dev));
 		if (error)
 		if (error)
 			goto out;
 			goto out;
 		sysfs_remove_link(&dev->class->p->class_subsys.kobj,
 		sysfs_remove_link(&dev->class->p->class_subsys.kobj,
@@ -1459,8 +1571,8 @@ int device_move(struct device *dev, struct device *new_parent)
 	new_parent = get_device(new_parent);
 	new_parent = get_device(new_parent);
 	new_parent_kobj = get_device_parent(dev, new_parent);
 	new_parent_kobj = get_device_parent(dev, new_parent);
 
 
-	pr_debug("device: '%s': %s: moving to '%s'\n", dev->bus_id,
-		 __func__, new_parent ? new_parent->bus_id : "<NULL>");
+	pr_debug("device: '%s': %s: moving to '%s'\n", dev_name(dev),
+		 __func__, new_parent ? dev_name(new_parent) : "<NULL>");
 	error = kobject_move(&dev->kobj, new_parent_kobj);
 	error = kobject_move(&dev->kobj, new_parent_kobj);
 	if (error) {
 	if (error) {
 		cleanup_glue_dir(dev, new_parent_kobj);
 		cleanup_glue_dir(dev, new_parent_kobj);
@@ -1470,9 +1582,10 @@ int device_move(struct device *dev, struct device *new_parent)
 	old_parent = dev->parent;
 	old_parent = dev->parent;
 	dev->parent = new_parent;
 	dev->parent = new_parent;
 	if (old_parent)
 	if (old_parent)
-		klist_remove(&dev->knode_parent);
+		klist_remove(&dev->p->knode_parent);
 	if (new_parent) {
 	if (new_parent) {
-		klist_add_tail(&dev->knode_parent, &new_parent->klist_children);
+		klist_add_tail(&dev->p->knode_parent,
+			       &new_parent->p->klist_children);
 		set_dev_node(dev, dev_to_node(new_parent));
 		set_dev_node(dev, dev_to_node(new_parent));
 	}
 	}
 
 
@@ -1484,11 +1597,11 @@ int device_move(struct device *dev, struct device *new_parent)
 		device_move_class_links(dev, new_parent, old_parent);
 		device_move_class_links(dev, new_parent, old_parent);
 		if (!kobject_move(&dev->kobj, &old_parent->kobj)) {
 		if (!kobject_move(&dev->kobj, &old_parent->kobj)) {
 			if (new_parent)
 			if (new_parent)
-				klist_remove(&dev->knode_parent);
+				klist_remove(&dev->p->knode_parent);
 			dev->parent = old_parent;
 			dev->parent = old_parent;
 			if (old_parent) {
 			if (old_parent) {
-				klist_add_tail(&dev->knode_parent,
-					       &old_parent->klist_children);
+				klist_add_tail(&dev->p->knode_parent,
+					       &old_parent->p->klist_children);
 				set_dev_node(dev, dev_to_node(old_parent));
 				set_dev_node(dev, dev_to_node(old_parent));
 			}
 			}
 		}
 		}

+ 14 - 12
drivers/base/dd.c

@@ -28,20 +28,20 @@
 
 
 static void driver_bound(struct device *dev)
 static void driver_bound(struct device *dev)
 {
 {
-	if (klist_node_attached(&dev->knode_driver)) {
+	if (klist_node_attached(&dev->p->knode_driver)) {
 		printk(KERN_WARNING "%s: device %s already bound\n",
 		printk(KERN_WARNING "%s: device %s already bound\n",
 			__func__, kobject_name(&dev->kobj));
 			__func__, kobject_name(&dev->kobj));
 		return;
 		return;
 	}
 	}
 
 
-	pr_debug("driver: '%s': %s: bound to device '%s'\n", dev->bus_id,
+	pr_debug("driver: '%s': %s: bound to device '%s'\n", dev_name(dev),
 		 __func__, dev->driver->name);
 		 __func__, dev->driver->name);
 
 
 	if (dev->bus)
 	if (dev->bus)
 		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
 		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
 					     BUS_NOTIFY_BOUND_DRIVER, dev);
 					     BUS_NOTIFY_BOUND_DRIVER, dev);
 
 
-	klist_add_tail(&dev->knode_driver, &dev->driver->p->klist_devices);
+	klist_add_tail(&dev->p->knode_driver, &dev->driver->p->klist_devices);
 }
 }
 
 
 static int driver_sysfs_add(struct device *dev)
 static int driver_sysfs_add(struct device *dev)
@@ -104,13 +104,13 @@ static int really_probe(struct device *dev, struct device_driver *drv)
 
 
 	atomic_inc(&probe_count);
 	atomic_inc(&probe_count);
 	pr_debug("bus: '%s': %s: probing driver %s with device %s\n",
 	pr_debug("bus: '%s': %s: probing driver %s with device %s\n",
-		 drv->bus->name, __func__, drv->name, dev->bus_id);
+		 drv->bus->name, __func__, drv->name, dev_name(dev));
 	WARN_ON(!list_empty(&dev->devres_head));
 	WARN_ON(!list_empty(&dev->devres_head));
 
 
 	dev->driver = drv;
 	dev->driver = drv;
 	if (driver_sysfs_add(dev)) {
 	if (driver_sysfs_add(dev)) {
 		printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n",
 		printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n",
-			__func__, dev->bus_id);
+			__func__, dev_name(dev));
 		goto probe_failed;
 		goto probe_failed;
 	}
 	}
 
 
@@ -127,7 +127,7 @@ static int really_probe(struct device *dev, struct device_driver *drv)
 	driver_bound(dev);
 	driver_bound(dev);
 	ret = 1;
 	ret = 1;
 	pr_debug("bus: '%s': %s: bound device %s to driver %s\n",
 	pr_debug("bus: '%s': %s: bound device %s to driver %s\n",
-		 drv->bus->name, __func__, dev->bus_id, drv->name);
+		 drv->bus->name, __func__, dev_name(dev), drv->name);
 	goto done;
 	goto done;
 
 
 probe_failed:
 probe_failed:
@@ -139,7 +139,7 @@ probe_failed:
 		/* driver matched but the probe failed */
 		/* driver matched but the probe failed */
 		printk(KERN_WARNING
 		printk(KERN_WARNING
 		       "%s: probe of %s failed with error %d\n",
 		       "%s: probe of %s failed with error %d\n",
-		       drv->name, dev->bus_id, ret);
+		       drv->name, dev_name(dev), ret);
 	}
 	}
 	/*
 	/*
 	 * Ignore errors returned by ->probe so that the next driver can try
 	 * Ignore errors returned by ->probe so that the next driver can try
@@ -194,7 +194,7 @@ int driver_probe_device(struct device_driver *drv, struct device *dev)
 		goto done;
 		goto done;
 
 
 	pr_debug("bus: '%s': %s: matched device %s with driver %s\n",
 	pr_debug("bus: '%s': %s: matched device %s with driver %s\n",
-		 drv->bus->name, __func__, dev->bus_id, drv->name);
+		 drv->bus->name, __func__, dev_name(dev), drv->name);
 
 
 	ret = really_probe(dev, drv);
 	ret = really_probe(dev, drv);
 
 
@@ -298,7 +298,6 @@ static void __device_release_driver(struct device *dev)
 	drv = dev->driver;
 	drv = dev->driver;
 	if (drv) {
 	if (drv) {
 		driver_sysfs_remove(dev);
 		driver_sysfs_remove(dev);
-		sysfs_remove_link(&dev->kobj, "driver");
 
 
 		if (dev->bus)
 		if (dev->bus)
 			blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
 			blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
@@ -311,7 +310,7 @@ static void __device_release_driver(struct device *dev)
 			drv->remove(dev);
 			drv->remove(dev);
 		devres_release_all(dev);
 		devres_release_all(dev);
 		dev->driver = NULL;
 		dev->driver = NULL;
-		klist_remove(&dev->knode_driver);
+		klist_remove(&dev->p->knode_driver);
 	}
 	}
 }
 }
 
 
@@ -341,6 +340,7 @@ EXPORT_SYMBOL_GPL(device_release_driver);
  */
  */
 void driver_detach(struct device_driver *drv)
 void driver_detach(struct device_driver *drv)
 {
 {
+	struct device_private *dev_prv;
 	struct device *dev;
 	struct device *dev;
 
 
 	for (;;) {
 	for (;;) {
@@ -349,8 +349,10 @@ void driver_detach(struct device_driver *drv)
 			spin_unlock(&drv->p->klist_devices.k_lock);
 			spin_unlock(&drv->p->klist_devices.k_lock);
 			break;
 			break;
 		}
 		}
-		dev = list_entry(drv->p->klist_devices.k_list.prev,
-				struct device, knode_driver.n_node);
+		dev_prv = list_entry(drv->p->klist_devices.k_list.prev,
+				     struct device_private,
+				     knode_driver.n_node);
+		dev = dev_prv->device;
 		get_device(dev);
 		get_device(dev);
 		spin_unlock(&drv->p->klist_devices.k_lock);
 		spin_unlock(&drv->p->klist_devices.k_lock);
 
 

+ 10 - 3
drivers/base/driver.c

@@ -19,7 +19,14 @@
 static struct device *next_device(struct klist_iter *i)
 static struct device *next_device(struct klist_iter *i)
 {
 {
 	struct klist_node *n = klist_next(i);
 	struct klist_node *n = klist_next(i);
-	return n ? container_of(n, struct device, knode_driver) : NULL;
+	struct device *dev = NULL;
+	struct device_private *dev_prv;
+
+	if (n) {
+		dev_prv = to_device_private_driver(n);
+		dev = dev_prv->device;
+	}
+	return dev;
 }
 }
 
 
 /**
 /**
@@ -42,7 +49,7 @@ int driver_for_each_device(struct device_driver *drv, struct device *start,
 		return -EINVAL;
 		return -EINVAL;
 
 
 	klist_iter_init_node(&drv->p->klist_devices, &i,
 	klist_iter_init_node(&drv->p->klist_devices, &i,
-			     start ? &start->knode_driver : NULL);
+			     start ? &start->p->knode_driver : NULL);
 	while ((dev = next_device(&i)) && !error)
 	while ((dev = next_device(&i)) && !error)
 		error = fn(dev, data);
 		error = fn(dev, data);
 	klist_iter_exit(&i);
 	klist_iter_exit(&i);
@@ -76,7 +83,7 @@ struct device *driver_find_device(struct device_driver *drv,
 		return NULL;
 		return NULL;
 
 
 	klist_iter_init_node(&drv->p->klist_devices, &i,
 	klist_iter_init_node(&drv->p->klist_devices, &i,
-			     (start ? &start->knode_driver : NULL));
+			     (start ? &start->p->knode_driver : NULL));
 	while ((dev = next_device(&i)))
 	while ((dev = next_device(&i)))
 		if (match(dev, data) && get_device(dev))
 		if (match(dev, data) && get_device(dev))
 			break;
 			break;

+ 1 - 7
drivers/base/firmware_class.c

@@ -291,12 +291,6 @@ firmware_class_timeout(u_long data)
 	fw_load_abort(fw_priv);
 	fw_load_abort(fw_priv);
 }
 }
 
 
-static inline void fw_setup_device_id(struct device *f_dev, struct device *dev)
-{
-	/* XXX warning we should watch out for name collisions */
-	strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
-}
-
 static int fw_register_device(struct device **dev_p, const char *fw_name,
 static int fw_register_device(struct device **dev_p, const char *fw_name,
 			      struct device *device)
 			      struct device *device)
 {
 {
@@ -321,7 +315,7 @@ static int fw_register_device(struct device **dev_p, const char *fw_name,
 	fw_priv->timeout.data = (u_long) fw_priv;
 	fw_priv->timeout.data = (u_long) fw_priv;
 	init_timer(&fw_priv->timeout);
 	init_timer(&fw_priv->timeout);
 
 
-	fw_setup_device_id(f_dev, device);
+	dev_set_name(f_dev, dev_name(device));
 	f_dev->parent = device;
 	f_dev->parent = device;
 	f_dev->class = &firmware_class;
 	f_dev->class = &firmware_class;
 	dev_set_drvdata(f_dev, fw_priv);
 	dev_set_drvdata(f_dev, fw_priv);

+ 3 - 4
drivers/base/isa.c

@@ -11,7 +11,7 @@
 #include <linux/isa.h>
 #include <linux/isa.h>
 
 
 static struct device isa_bus = {
 static struct device isa_bus = {
-	.bus_id		= "isa"
+	.init_name	= "isa"
 };
 };
 
 
 struct isa_dev {
 struct isa_dev {
@@ -135,9 +135,8 @@ int isa_register_driver(struct isa_driver *isa_driver, unsigned int ndev)
 		isa_dev->dev.parent	= &isa_bus;
 		isa_dev->dev.parent	= &isa_bus;
 		isa_dev->dev.bus	= &isa_bus_type;
 		isa_dev->dev.bus	= &isa_bus_type;
 
 
-		snprintf(isa_dev->dev.bus_id, BUS_ID_SIZE, "%s.%u",
-				isa_driver->driver.name, id);
-
+		dev_set_name(&isa_dev->dev, "%s.%u",
+			     isa_driver->driver.name, id);
 		isa_dev->dev.platform_data	= isa_driver;
 		isa_dev->dev.platform_data	= isa_driver;
 		isa_dev->dev.release		= isa_dev_release;
 		isa_dev->dev.release		= isa_dev_release;
 		isa_dev->id			= id;
 		isa_dev->id			= id;

+ 67 - 63
drivers/base/platform.c

@@ -24,7 +24,7 @@
 				 driver))
 				 driver))
 
 
 struct device platform_bus = {
 struct device platform_bus = {
-	.bus_id		= "platform",
+	.init_name	= "platform",
 };
 };
 EXPORT_SYMBOL_GPL(platform_bus);
 EXPORT_SYMBOL_GPL(platform_bus);
 
 
@@ -242,16 +242,15 @@ int platform_device_add(struct platform_device *pdev)
 	pdev->dev.bus = &platform_bus_type;
 	pdev->dev.bus = &platform_bus_type;
 
 
 	if (pdev->id != -1)
 	if (pdev->id != -1)
-		snprintf(pdev->dev.bus_id, BUS_ID_SIZE, "%s.%d", pdev->name,
-			 pdev->id);
+		dev_set_name(&pdev->dev, "%s.%d", pdev->name,  pdev->id);
 	else
 	else
-		strlcpy(pdev->dev.bus_id, pdev->name, BUS_ID_SIZE);
+		dev_set_name(&pdev->dev, pdev->name);
 
 
 	for (i = 0; i < pdev->num_resources; i++) {
 	for (i = 0; i < pdev->num_resources; i++) {
 		struct resource *p, *r = &pdev->resource[i];
 		struct resource *p, *r = &pdev->resource[i];
 
 
 		if (r->name == NULL)
 		if (r->name == NULL)
-			r->name = pdev->dev.bus_id;
+			r->name = dev_name(&pdev->dev);
 
 
 		p = r->parent;
 		p = r->parent;
 		if (!p) {
 		if (!p) {
@@ -264,14 +263,14 @@ int platform_device_add(struct platform_device *pdev)
 		if (p && insert_resource(p, r)) {
 		if (p && insert_resource(p, r)) {
 			printk(KERN_ERR
 			printk(KERN_ERR
 			       "%s: failed to claim resource %d\n",
 			       "%s: failed to claim resource %d\n",
-			       pdev->dev.bus_id, i);
+			       dev_name(&pdev->dev), i);
 			ret = -EBUSY;
 			ret = -EBUSY;
 			goto failed;
 			goto failed;
 		}
 		}
 	}
 	}
 
 
 	pr_debug("Registering platform device '%s'. Parent at %s\n",
 	pr_debug("Registering platform device '%s'. Parent at %s\n",
-		 pdev->dev.bus_id, pdev->dev.parent->bus_id);
+		 dev_name(&pdev->dev), dev_name(pdev->dev.parent));
 
 
 	ret = device_add(&pdev->dev);
 	ret = device_add(&pdev->dev);
 	if (ret == 0)
 	if (ret == 0)
@@ -503,8 +502,6 @@ int platform_driver_register(struct platform_driver *drv)
 		drv->driver.suspend = platform_drv_suspend;
 		drv->driver.suspend = platform_drv_suspend;
 	if (drv->resume)
 	if (drv->resume)
 		drv->driver.resume = platform_drv_resume;
 		drv->driver.resume = platform_drv_resume;
-	if (drv->pm)
-		drv->driver.pm = &drv->pm->base;
 	return driver_register(&drv->driver);
 	return driver_register(&drv->driver);
 }
 }
 EXPORT_SYMBOL_GPL(platform_driver_register);
 EXPORT_SYMBOL_GPL(platform_driver_register);
@@ -609,7 +606,7 @@ static int platform_match(struct device *dev, struct device_driver *drv)
 	struct platform_device *pdev;
 	struct platform_device *pdev;
 
 
 	pdev = container_of(dev, struct platform_device, dev);
 	pdev = container_of(dev, struct platform_device, dev);
-	return (strncmp(pdev->name, drv->name, BUS_ID_SIZE) == 0);
+	return (strcmp(pdev->name, drv->name) == 0);
 }
 }
 
 
 #ifdef CONFIG_PM_SLEEP
 #ifdef CONFIG_PM_SLEEP
@@ -686,7 +683,10 @@ static int platform_pm_suspend(struct device *dev)
 	struct device_driver *drv = dev->driver;
 	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (drv && drv->pm) {
+	if (!drv)
+		return 0;
+
+	if (drv->pm) {
 		if (drv->pm->suspend)
 		if (drv->pm->suspend)
 			ret = drv->pm->suspend(dev);
 			ret = drv->pm->suspend(dev);
 	} else {
 	} else {
@@ -698,16 +698,15 @@ static int platform_pm_suspend(struct device *dev)
 
 
 static int platform_pm_suspend_noirq(struct device *dev)
 static int platform_pm_suspend_noirq(struct device *dev)
 {
 {
-	struct platform_driver *pdrv;
+	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (!dev->driver)
+	if (!drv)
 		return 0;
 		return 0;
 
 
-	pdrv = to_platform_driver(dev->driver);
-	if (pdrv->pm) {
-		if (pdrv->pm->suspend_noirq)
-			ret = pdrv->pm->suspend_noirq(dev);
+	if (drv->pm) {
+		if (drv->pm->suspend_noirq)
+			ret = drv->pm->suspend_noirq(dev);
 	} else {
 	} else {
 		ret = platform_legacy_suspend_late(dev, PMSG_SUSPEND);
 		ret = platform_legacy_suspend_late(dev, PMSG_SUSPEND);
 	}
 	}
@@ -720,7 +719,10 @@ static int platform_pm_resume(struct device *dev)
 	struct device_driver *drv = dev->driver;
 	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (drv && drv->pm) {
+	if (!drv)
+		return 0;
+
+	if (drv->pm) {
 		if (drv->pm->resume)
 		if (drv->pm->resume)
 			ret = drv->pm->resume(dev);
 			ret = drv->pm->resume(dev);
 	} else {
 	} else {
@@ -732,16 +734,15 @@ static int platform_pm_resume(struct device *dev)
 
 
 static int platform_pm_resume_noirq(struct device *dev)
 static int platform_pm_resume_noirq(struct device *dev)
 {
 {
-	struct platform_driver *pdrv;
+	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (!dev->driver)
+	if (!drv)
 		return 0;
 		return 0;
 
 
-	pdrv = to_platform_driver(dev->driver);
-	if (pdrv->pm) {
-		if (pdrv->pm->resume_noirq)
-			ret = pdrv->pm->resume_noirq(dev);
+	if (drv->pm) {
+		if (drv->pm->resume_noirq)
+			ret = drv->pm->resume_noirq(dev);
 	} else {
 	} else {
 		ret = platform_legacy_resume_early(dev);
 		ret = platform_legacy_resume_early(dev);
 	}
 	}
@@ -780,16 +781,15 @@ static int platform_pm_freeze(struct device *dev)
 
 
 static int platform_pm_freeze_noirq(struct device *dev)
 static int platform_pm_freeze_noirq(struct device *dev)
 {
 {
-	struct platform_driver *pdrv;
+	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (!dev->driver)
+	if (!drv)
 		return 0;
 		return 0;
 
 
-	pdrv = to_platform_driver(dev->driver);
-	if (pdrv->pm) {
-		if (pdrv->pm->freeze_noirq)
-			ret = pdrv->pm->freeze_noirq(dev);
+	if (drv->pm) {
+		if (drv->pm->freeze_noirq)
+			ret = drv->pm->freeze_noirq(dev);
 	} else {
 	} else {
 		ret = platform_legacy_suspend_late(dev, PMSG_FREEZE);
 		ret = platform_legacy_suspend_late(dev, PMSG_FREEZE);
 	}
 	}
@@ -802,7 +802,10 @@ static int platform_pm_thaw(struct device *dev)
 	struct device_driver *drv = dev->driver;
 	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (drv && drv->pm) {
+	if (!drv)
+		return 0;
+
+	if (drv->pm) {
 		if (drv->pm->thaw)
 		if (drv->pm->thaw)
 			ret = drv->pm->thaw(dev);
 			ret = drv->pm->thaw(dev);
 	} else {
 	} else {
@@ -814,16 +817,15 @@ static int platform_pm_thaw(struct device *dev)
 
 
 static int platform_pm_thaw_noirq(struct device *dev)
 static int platform_pm_thaw_noirq(struct device *dev)
 {
 {
-	struct platform_driver *pdrv;
+	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (!dev->driver)
+	if (!drv)
 		return 0;
 		return 0;
 
 
-	pdrv = to_platform_driver(dev->driver);
-	if (pdrv->pm) {
-		if (pdrv->pm->thaw_noirq)
-			ret = pdrv->pm->thaw_noirq(dev);
+	if (drv->pm) {
+		if (drv->pm->thaw_noirq)
+			ret = drv->pm->thaw_noirq(dev);
 	} else {
 	} else {
 		ret = platform_legacy_resume_early(dev);
 		ret = platform_legacy_resume_early(dev);
 	}
 	}
@@ -836,7 +838,10 @@ static int platform_pm_poweroff(struct device *dev)
 	struct device_driver *drv = dev->driver;
 	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (drv && drv->pm) {
+	if (!drv)
+		return 0;
+
+	if (drv->pm) {
 		if (drv->pm->poweroff)
 		if (drv->pm->poweroff)
 			ret = drv->pm->poweroff(dev);
 			ret = drv->pm->poweroff(dev);
 	} else {
 	} else {
@@ -848,16 +853,15 @@ static int platform_pm_poweroff(struct device *dev)
 
 
 static int platform_pm_poweroff_noirq(struct device *dev)
 static int platform_pm_poweroff_noirq(struct device *dev)
 {
 {
-	struct platform_driver *pdrv;
+	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (!dev->driver)
+	if (!drv)
 		return 0;
 		return 0;
 
 
-	pdrv = to_platform_driver(dev->driver);
-	if (pdrv->pm) {
-		if (pdrv->pm->poweroff_noirq)
-			ret = pdrv->pm->poweroff_noirq(dev);
+	if (drv->pm) {
+		if (drv->pm->poweroff_noirq)
+			ret = drv->pm->poweroff_noirq(dev);
 	} else {
 	} else {
 		ret = platform_legacy_suspend_late(dev, PMSG_HIBERNATE);
 		ret = platform_legacy_suspend_late(dev, PMSG_HIBERNATE);
 	}
 	}
@@ -870,7 +874,10 @@ static int platform_pm_restore(struct device *dev)
 	struct device_driver *drv = dev->driver;
 	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (drv && drv->pm) {
+	if (!drv)
+		return 0;
+
+	if (drv->pm) {
 		if (drv->pm->restore)
 		if (drv->pm->restore)
 			ret = drv->pm->restore(dev);
 			ret = drv->pm->restore(dev);
 	} else {
 	} else {
@@ -882,16 +889,15 @@ static int platform_pm_restore(struct device *dev)
 
 
 static int platform_pm_restore_noirq(struct device *dev)
 static int platform_pm_restore_noirq(struct device *dev)
 {
 {
-	struct platform_driver *pdrv;
+	struct device_driver *drv = dev->driver;
 	int ret = 0;
 	int ret = 0;
 
 
-	if (!dev->driver)
+	if (!drv)
 		return 0;
 		return 0;
 
 
-	pdrv = to_platform_driver(dev->driver);
-	if (pdrv->pm) {
-		if (pdrv->pm->restore_noirq)
-			ret = pdrv->pm->restore_noirq(dev);
+	if (drv->pm) {
+		if (drv->pm->restore_noirq)
+			ret = drv->pm->restore_noirq(dev);
 	} else {
 	} else {
 		ret = platform_legacy_resume_early(dev);
 		ret = platform_legacy_resume_early(dev);
 	}
 	}
@@ -912,17 +918,15 @@ static int platform_pm_restore_noirq(struct device *dev)
 
 
 #endif /* !CONFIG_HIBERNATION */
 #endif /* !CONFIG_HIBERNATION */
 
 
-static struct pm_ext_ops platform_pm_ops = {
-	.base = {
-		.prepare = platform_pm_prepare,
-		.complete = platform_pm_complete,
-		.suspend = platform_pm_suspend,
-		.resume = platform_pm_resume,
-		.freeze = platform_pm_freeze,
-		.thaw = platform_pm_thaw,
-		.poweroff = platform_pm_poweroff,
-		.restore = platform_pm_restore,
-	},
+static struct dev_pm_ops platform_dev_pm_ops = {
+	.prepare = platform_pm_prepare,
+	.complete = platform_pm_complete,
+	.suspend = platform_pm_suspend,
+	.resume = platform_pm_resume,
+	.freeze = platform_pm_freeze,
+	.thaw = platform_pm_thaw,
+	.poweroff = platform_pm_poweroff,
+	.restore = platform_pm_restore,
 	.suspend_noirq = platform_pm_suspend_noirq,
 	.suspend_noirq = platform_pm_suspend_noirq,
 	.resume_noirq = platform_pm_resume_noirq,
 	.resume_noirq = platform_pm_resume_noirq,
 	.freeze_noirq = platform_pm_freeze_noirq,
 	.freeze_noirq = platform_pm_freeze_noirq,
@@ -931,7 +935,7 @@ static struct pm_ext_ops platform_pm_ops = {
 	.restore_noirq = platform_pm_restore_noirq,
 	.restore_noirq = platform_pm_restore_noirq,
 };
 };
 
 
-#define PLATFORM_PM_OPS_PTR	&platform_pm_ops
+#define PLATFORM_PM_OPS_PTR	(&platform_dev_pm_ops)
 
 
 #else /* !CONFIG_PM_SLEEP */
 #else /* !CONFIG_PM_SLEEP */
 
 

+ 11 - 10
drivers/base/power/main.c

@@ -76,7 +76,7 @@ void device_pm_add(struct device *dev)
 	if (dev->parent) {
 	if (dev->parent) {
 		if (dev->parent->power.status >= DPM_SUSPENDING)
 		if (dev->parent->power.status >= DPM_SUSPENDING)
 			dev_warn(dev, "parent %s should not be sleeping\n",
 			dev_warn(dev, "parent %s should not be sleeping\n",
-				dev->parent->bus_id);
+				 dev_name(dev->parent));
 	} else if (transition_started) {
 	} else if (transition_started) {
 		/*
 		/*
 		 * We refuse to register parentless devices while a PM
 		 * We refuse to register parentless devices while a PM
@@ -112,7 +112,8 @@ void device_pm_remove(struct device *dev)
  *	@ops:	PM operations to choose from.
  *	@ops:	PM operations to choose from.
  *	@state:	PM transition of the system being carried out.
  *	@state:	PM transition of the system being carried out.
  */
  */
-static int pm_op(struct device *dev, struct pm_ops *ops, pm_message_t state)
+static int pm_op(struct device *dev, struct dev_pm_ops *ops,
+			pm_message_t state)
 {
 {
 	int error = 0;
 	int error = 0;
 
 
@@ -174,7 +175,7 @@ static int pm_op(struct device *dev, struct pm_ops *ops, pm_message_t state)
  *	The operation is executed with interrupts disabled by the only remaining
  *	The operation is executed with interrupts disabled by the only remaining
  *	functional CPU in the system.
  *	functional CPU in the system.
  */
  */
-static int pm_noirq_op(struct device *dev, struct pm_ext_ops *ops,
+static int pm_noirq_op(struct device *dev, struct dev_pm_ops *ops,
 			pm_message_t state)
 			pm_message_t state)
 {
 {
 	int error = 0;
 	int error = 0;
@@ -354,7 +355,7 @@ static int resume_device(struct device *dev, pm_message_t state)
 	if (dev->bus) {
 	if (dev->bus) {
 		if (dev->bus->pm) {
 		if (dev->bus->pm) {
 			pm_dev_dbg(dev, state, "");
 			pm_dev_dbg(dev, state, "");
-			error = pm_op(dev, &dev->bus->pm->base, state);
+			error = pm_op(dev, dev->bus->pm, state);
 		} else if (dev->bus->resume) {
 		} else if (dev->bus->resume) {
 			pm_dev_dbg(dev, state, "legacy ");
 			pm_dev_dbg(dev, state, "legacy ");
 			error = dev->bus->resume(dev);
 			error = dev->bus->resume(dev);
@@ -451,9 +452,9 @@ static void complete_device(struct device *dev, pm_message_t state)
 		dev->type->pm->complete(dev);
 		dev->type->pm->complete(dev);
 	}
 	}
 
 
-	if (dev->bus && dev->bus->pm && dev->bus->pm->base.complete) {
+	if (dev->bus && dev->bus->pm && dev->bus->pm->complete) {
 		pm_dev_dbg(dev, state, "completing ");
 		pm_dev_dbg(dev, state, "completing ");
-		dev->bus->pm->base.complete(dev);
+		dev->bus->pm->complete(dev);
 	}
 	}
 
 
 	up(&dev->sem);
 	up(&dev->sem);
@@ -624,7 +625,7 @@ static int suspend_device(struct device *dev, pm_message_t state)
 	if (dev->bus) {
 	if (dev->bus) {
 		if (dev->bus->pm) {
 		if (dev->bus->pm) {
 			pm_dev_dbg(dev, state, "");
 			pm_dev_dbg(dev, state, "");
-			error = pm_op(dev, &dev->bus->pm->base, state);
+			error = pm_op(dev, dev->bus->pm, state);
 		} else if (dev->bus->suspend) {
 		} else if (dev->bus->suspend) {
 			pm_dev_dbg(dev, state, "legacy ");
 			pm_dev_dbg(dev, state, "legacy ");
 			error = dev->bus->suspend(dev, state);
 			error = dev->bus->suspend(dev, state);
@@ -685,10 +686,10 @@ static int prepare_device(struct device *dev, pm_message_t state)
 
 
 	down(&dev->sem);
 	down(&dev->sem);
 
 
-	if (dev->bus && dev->bus->pm && dev->bus->pm->base.prepare) {
+	if (dev->bus && dev->bus->pm && dev->bus->pm->prepare) {
 		pm_dev_dbg(dev, state, "preparing ");
 		pm_dev_dbg(dev, state, "preparing ");
-		error = dev->bus->pm->base.prepare(dev);
-		suspend_report_result(dev->bus->pm->base.prepare, error);
+		error = dev->bus->pm->prepare(dev);
+		suspend_report_result(dev->bus->pm->prepare, error);
 		if (error)
 		if (error)
 			goto End;
 			goto End;
 	}
 	}

+ 2 - 2
drivers/base/power/trace.c

@@ -140,7 +140,7 @@ static unsigned int hash_string(unsigned int seed, const char *data, unsigned in
 
 
 void set_trace_device(struct device *dev)
 void set_trace_device(struct device *dev)
 {
 {
-	dev_hash_value = hash_string(DEVSEED, dev->bus_id, DEVHASH);
+	dev_hash_value = hash_string(DEVSEED, dev_name(dev), DEVHASH);
 }
 }
 EXPORT_SYMBOL(set_trace_device);
 EXPORT_SYMBOL(set_trace_device);
 
 
@@ -192,7 +192,7 @@ static int show_dev_hash(unsigned int value)
 
 
 	while (entry != &dpm_list) {
 	while (entry != &dpm_list) {
 		struct device * dev = to_device(entry);
 		struct device * dev = to_device(entry);
-		unsigned int hash = hash_string(DEVSEED, dev->bus_id, DEVHASH);
+		unsigned int hash = hash_string(DEVSEED, dev_name(dev), DEVHASH);
 		if (hash == value) {
 		if (hash == value) {
 			dev_info(dev, "hash matches\n");
 			dev_info(dev, "hash matches\n");
 			match++;
 			match++;

+ 1 - 1
drivers/char/mwave/mwavedd.c

@@ -663,7 +663,7 @@ static int __init mwave_init(void)
 #if 0
 #if 0
 	/* sysfs */
 	/* sysfs */
 	memset(&mwave_device, 0, sizeof (struct device));
 	memset(&mwave_device, 0, sizeof (struct device));
-	snprintf(mwave_device.bus_id, BUS_ID_SIZE, "mwave");
+	dev_set_name(&mwave_device, "mwave");
 
 
 	if (device_register(&mwave_device))
 	if (device_register(&mwave_device))
 		goto cleanup_error;
 		goto cleanup_error;

+ 1 - 1
drivers/firmware/dmi-id.c

@@ -223,7 +223,7 @@ static int __init dmi_id_init(void)
 	}
 	}
 
 
 	dmi_dev->class = &dmi_class;
 	dmi_dev->class = &dmi_class;
-	strcpy(dmi_dev->bus_id, "id");
+	dev_set_name(dmi_dev, "id");
 	dmi_dev->groups = sys_dmi_attribute_groups;
 	dmi_dev->groups = sys_dmi_attribute_groups;
 
 
 	ret = device_register(dmi_dev);
 	ret = device_register(dmi_dev);

+ 1 - 1
drivers/gpio/gpiolib.c

@@ -1213,7 +1213,7 @@ static int gpiolib_show(struct seq_file *s, void *unused)
 		if (dev)
 		if (dev)
 			seq_printf(s, ", %s/%s",
 			seq_printf(s, ", %s/%s",
 				dev->bus ? dev->bus->name : "no-bus",
 				dev->bus ? dev->bus->name : "no-bus",
-				dev->bus_id);
+				dev_name(dev));
 		if (chip->label)
 		if (chip->label)
 			seq_printf(s, ", %s", chip->label);
 			seq_printf(s, ", %s", chip->label);
 		if (chip->can_sleep)
 		if (chip->can_sleep)

+ 1 - 1
drivers/gpu/drm/drm_sysfs.c

@@ -488,7 +488,7 @@ int drm_sysfs_device_add(struct drm_minor *minor)
         else
         else
                 minor_str = "card%d";
                 minor_str = "card%d";
 
 
-	snprintf(minor->kdev.bus_id, BUS_ID_SIZE, minor_str, minor->index);
+	dev_set_name(&minor->kdev, minor_str, minor->index);
 
 
 	err = device_register(&minor->kdev);
 	err = device_register(&minor->kdev);
 	if (err) {
 	if (err) {

+ 1 - 1
drivers/hwmon/hwmon.c

@@ -76,7 +76,7 @@ void hwmon_device_unregister(struct device *dev)
 {
 {
 	int id;
 	int id;
 
 
-	if (likely(sscanf(dev->bus_id, HWMON_ID_FORMAT, &id) == 1)) {
+	if (likely(sscanf(dev_name(dev), HWMON_ID_FORMAT, &id) == 1)) {
 		device_unregister(dev);
 		device_unregister(dev);
 		spin_lock(&idr_lock);
 		spin_lock(&idr_lock);
 		idr_remove(&hwmon_idr, id);
 		idr_remove(&hwmon_idr, id);

+ 1 - 1
drivers/hwmon/lm75.c

@@ -190,7 +190,7 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
 	}
 	}
 
 
 	dev_info(&client->dev, "%s: sensor '%s'\n",
 	dev_info(&client->dev, "%s: sensor '%s'\n",
-		data->hwmon_dev->bus_id, client->name);
+		 dev_name(data->hwmon_dev), client->name);
 
 
 	return 0;
 	return 0;
 
 

+ 1 - 1
drivers/idle/i7300_idle.c

@@ -177,7 +177,7 @@ static int __init i7300_idle_ioat_selftest(u8 *ctl,
 }
 }
 
 
 static struct device dummy_dma_dev = {
 static struct device dummy_dma_dev = {
-	.bus_id = "fallback device",
+	.init_name = "fallback device",
 	.coherent_dma_mask = DMA_64BIT_MASK,
 	.coherent_dma_mask = DMA_64BIT_MASK,
 	.dma_mask = &dummy_dma_dev.coherent_dma_mask,
 	.dma_mask = &dummy_dma_dev.coherent_dma_mask,
 };
 };

+ 1 - 1
drivers/infiniband/core/sysfs.c

@@ -778,7 +778,7 @@ int ib_device_register_sysfs(struct ib_device *device)
 	class_dev->class      = &ib_class;
 	class_dev->class      = &ib_class;
 	class_dev->driver_data = device;
 	class_dev->driver_data = device;
 	class_dev->parent     = device->dma_device;
 	class_dev->parent     = device->dma_device;
-	strlcpy(class_dev->bus_id, device->name, BUS_ID_SIZE);
+	dev_set_name(class_dev, device->name);
 
 
 	INIT_LIST_HEAD(&device->port_list);
 	INIT_LIST_HEAD(&device->port_list);
 
 

+ 1 - 2
drivers/infiniband/core/ucm.c

@@ -1266,8 +1266,7 @@ static void ib_ucm_add_one(struct ib_device *device)
 	ucm_dev->dev.parent = device->dma_device;
 	ucm_dev->dev.parent = device->dma_device;
 	ucm_dev->dev.devt = ucm_dev->cdev.dev;
 	ucm_dev->dev.devt = ucm_dev->cdev.dev;
 	ucm_dev->dev.release = ib_ucm_release_dev;
 	ucm_dev->dev.release = ib_ucm_release_dev;
-	snprintf(ucm_dev->dev.bus_id, BUS_ID_SIZE, "ucm%d",
-		 ucm_dev->devnum);
+	dev_set_name(&ucm_dev->dev, "ucm%d", ucm_dev->devnum);
 	if (device_register(&ucm_dev->dev))
 	if (device_register(&ucm_dev->dev))
 		goto err_cdev;
 		goto err_cdev;
 
 

+ 1 - 2
drivers/infiniband/ulp/srp/ib_srp.c

@@ -1949,8 +1949,7 @@ static struct srp_host *srp_add_port(struct srp_device *device, u8 port)
 
 
 	host->dev.class = &srp_class;
 	host->dev.class = &srp_class;
 	host->dev.parent = device->dev->dma_device;
 	host->dev.parent = device->dev->dma_device;
-	snprintf(host->dev.bus_id, BUS_ID_SIZE, "srp-%s-%d",
-		 device->dev->name, port);
+	dev_set_name(&host->dev, "srp-%s-%d", device->dev->name, port);
 
 
 	if (device_register(&host->dev))
 	if (device_register(&host->dev))
 		goto free_host;
 		goto free_host;

+ 1 - 1
drivers/isdn/mISDN/dsp_pipeline.c

@@ -91,7 +91,7 @@ int mISDN_dsp_element_register(struct mISDN_dsp_element *elem)
 
 
 	entry->dev.class = elements_class;
 	entry->dev.class = elements_class;
 	dev_set_drvdata(&entry->dev, elem);
 	dev_set_drvdata(&entry->dev, elem);
-	snprintf(entry->dev.bus_id, BUS_ID_SIZE, elem->name);
+	dev_set_name(&entry->dev, elem->name);
 	ret = device_register(&entry->dev);
 	ret = device_register(&entry->dev);
 	if (ret) {
 	if (ret) {
 		printk(KERN_ERR "%s: failed to register %s\n",
 		printk(KERN_ERR "%s: failed to register %s\n",

+ 4 - 6
drivers/lguest/lguest_device.c

@@ -321,10 +321,7 @@ static struct virtio_config_ops lguest_config_ops = {
 
 
 /* The root device for the lguest virtio devices.  This makes them appear as
 /* The root device for the lguest virtio devices.  This makes them appear as
  * /sys/devices/lguest/0,1,2 not /sys/devices/0,1,2. */
  * /sys/devices/lguest/0,1,2 not /sys/devices/0,1,2. */
-static struct device lguest_root = {
-	.parent = NULL,
-	.bus_id = "lguest",
-};
+static struct device *lguest_root;
 
 
 /*D:120 This is the core of the lguest bus: actually adding a new device.
 /*D:120 This is the core of the lguest bus: actually adding a new device.
  * It's a separate function because it's neater that way, and because an
  * It's a separate function because it's neater that way, and because an
@@ -351,7 +348,7 @@ static void add_lguest_device(struct lguest_device_desc *d,
 	}
 	}
 
 
 	/* This devices' parent is the lguest/ dir. */
 	/* This devices' parent is the lguest/ dir. */
-	ldev->vdev.dev.parent = &lguest_root;
+	ldev->vdev.dev.parent = lguest_root;
 	/* We have a unique device index thanks to the dev_index counter. */
 	/* We have a unique device index thanks to the dev_index counter. */
 	ldev->vdev.id.device = d->type;
 	ldev->vdev.id.device = d->type;
 	/* We have a simple set of routines for querying the device's
 	/* We have a simple set of routines for querying the device's
@@ -407,7 +404,8 @@ static int __init lguest_devices_init(void)
 	if (strcmp(pv_info.name, "lguest") != 0)
 	if (strcmp(pv_info.name, "lguest") != 0)
 		return 0;
 		return 0;
 
 
-	if (device_register(&lguest_root) != 0)
+	lguest_root = root_device_register("lguest");
+	if (IS_ERR(lguest_root))
 		panic("Could not register lguest root");
 		panic("Could not register lguest root");
 
 
 	/* Devices are in a single page above top of "normal" mem */
 	/* Devices are in a single page above top of "normal" mem */

+ 12 - 12
drivers/macintosh/macio_asic.c

@@ -33,7 +33,7 @@
 
 
 #undef DEBUG
 #undef DEBUG
 
 
-#define MAX_NODE_NAME_SIZE (BUS_ID_SIZE - 12)
+#define MAX_NODE_NAME_SIZE (20 - 12)
 
 
 static struct macio_chip      *macio_on_hold;
 static struct macio_chip      *macio_on_hold;
 
 
@@ -240,7 +240,7 @@ static void macio_create_fixup_irq(struct macio_dev *dev, int index,
 	if (irq != NO_IRQ) {
 	if (irq != NO_IRQ) {
 		dev->interrupt[index].start = irq;
 		dev->interrupt[index].start = irq;
 		dev->interrupt[index].flags = IORESOURCE_IRQ;
 		dev->interrupt[index].flags = IORESOURCE_IRQ;
-		dev->interrupt[index].name = dev->ofdev.dev.bus_id;
+		dev->interrupt[index].name = dev_name(&dev->ofdev.dev);
 	}
 	}
 	if (dev->n_interrupts <= index)
 	if (dev->n_interrupts <= index)
 		dev->n_interrupts = index + 1;
 		dev->n_interrupts = index + 1;
@@ -303,7 +303,7 @@ static void macio_setup_interrupts(struct macio_dev *dev)
 			break;
 			break;
 		res->start = irq;
 		res->start = irq;
 		res->flags = IORESOURCE_IRQ;
 		res->flags = IORESOURCE_IRQ;
-		res->name = dev->ofdev.dev.bus_id;
+		res->name = dev_name(&dev->ofdev.dev);
 		if (macio_resource_quirks(np, res, i - 1)) {
 		if (macio_resource_quirks(np, res, i - 1)) {
 			memset(res, 0, sizeof(struct resource));
 			memset(res, 0, sizeof(struct resource));
 			continue;
 			continue;
@@ -325,7 +325,7 @@ static void macio_setup_resources(struct macio_dev *dev,
 		if (index >= MACIO_DEV_COUNT_RESOURCES)
 		if (index >= MACIO_DEV_COUNT_RESOURCES)
 			break;
 			break;
 		*res = r;
 		*res = r;
-		res->name = dev->ofdev.dev.bus_id;
+		res->name = dev_name(&dev->ofdev.dev);
 
 
 		if (macio_resource_quirks(np, res, index)) {
 		if (macio_resource_quirks(np, res, index)) {
 			memset(res, 0, sizeof(struct resource));
 			memset(res, 0, sizeof(struct resource));
@@ -338,7 +338,7 @@ static void macio_setup_resources(struct macio_dev *dev,
 		if (insert_resource(parent_res, res)) {
 		if (insert_resource(parent_res, res)) {
 			printk(KERN_WARNING "Can't request resource "
 			printk(KERN_WARNING "Can't request resource "
 			       "%d for MacIO device %s\n",
 			       "%d for MacIO device %s\n",
-			       index, dev->ofdev.dev.bus_id);
+			       index, dev_name(&dev->ofdev.dev));
 		}
 		}
 	}
 	}
 	dev->n_resources = index;
 	dev->n_resources = index;
@@ -385,8 +385,8 @@ static struct macio_dev * macio_add_one_device(struct macio_chip *chip,
 
 
 	/* MacIO itself has a different reg, we use it's PCI base */
 	/* MacIO itself has a different reg, we use it's PCI base */
 	if (np == chip->of_node) {
 	if (np == chip->of_node) {
-		sprintf(dev->ofdev.dev.bus_id, "%1d.%08x:%.*s",
-			chip->lbus.index,
+		dev_set_name(&dev->ofdev.dev, "%1d.%08x:%.*s",
+			     chip->lbus.index,
 #ifdef CONFIG_PCI
 #ifdef CONFIG_PCI
 			(unsigned int)pci_resource_start(chip->lbus.pdev, 0),
 			(unsigned int)pci_resource_start(chip->lbus.pdev, 0),
 #else
 #else
@@ -395,9 +395,9 @@ static struct macio_dev * macio_add_one_device(struct macio_chip *chip,
 			MAX_NODE_NAME_SIZE, np->name);
 			MAX_NODE_NAME_SIZE, np->name);
 	} else {
 	} else {
 		reg = of_get_property(np, "reg", NULL);
 		reg = of_get_property(np, "reg", NULL);
-		sprintf(dev->ofdev.dev.bus_id, "%1d.%08x:%.*s",
-			chip->lbus.index,
-			reg ? *reg : 0, MAX_NODE_NAME_SIZE, np->name);
+		dev_set_name(&dev->ofdev.dev, "%1d.%08x:%.*s",
+			     chip->lbus.index,
+			     reg ? *reg : 0, MAX_NODE_NAME_SIZE, np->name);
 	}
 	}
 
 
 	/* Setup interrupts & resources */
 	/* Setup interrupts & resources */
@@ -408,7 +408,7 @@ static struct macio_dev * macio_add_one_device(struct macio_chip *chip,
 	/* Register with core */
 	/* Register with core */
 	if (of_device_register(&dev->ofdev) != 0) {
 	if (of_device_register(&dev->ofdev) != 0) {
 		printk(KERN_DEBUG"macio: device registration error for %s!\n",
 		printk(KERN_DEBUG"macio: device registration error for %s!\n",
-		       dev->ofdev.dev.bus_id);
+		       dev_name(&dev->ofdev.dev));
 		kfree(dev);
 		kfree(dev);
 		return NULL;
 		return NULL;
 	}
 	}
@@ -558,7 +558,7 @@ err_out:
 		resource_no,
 		resource_no,
 		macio_resource_len(dev, resource_no),
 		macio_resource_len(dev, resource_no),
 		macio_resource_start(dev, resource_no),
 		macio_resource_start(dev, resource_no),
-		dev->ofdev.dev.bus_id);
+		dev_name(&dev->ofdev.dev));
 	return -EBUSY;
 	return -EBUSY;
 }
 }
 
 

+ 2 - 3
drivers/memstick/core/memstick.c

@@ -385,8 +385,7 @@ static struct memstick_dev *memstick_alloc_card(struct memstick_host *host)
 
 
 	if (card) {
 	if (card) {
 		card->host = host;
 		card->host = host;
-		snprintf(card->dev.bus_id, sizeof(card->dev.bus_id),
-			 "%s", host->dev.bus_id);
+		dev_set_name(&card->dev, "%s", dev_name(&host->dev));
 		card->dev.parent = &host->dev;
 		card->dev.parent = &host->dev;
 		card->dev.bus = &memstick_bus_type;
 		card->dev.bus = &memstick_bus_type;
 		card->dev.release = memstick_free_card;
 		card->dev.release = memstick_free_card;
@@ -519,7 +518,7 @@ int memstick_add_host(struct memstick_host *host)
 	if (rc)
 	if (rc)
 		return rc;
 		return rc;
 
 
-	snprintf(host->dev.bus_id, BUS_ID_SIZE, "memstick%u", host->id);
+	dev_set_name(&host->dev, "memstick%u", host->id);
 
 
 	rc = device_add(&host->dev);
 	rc = device_add(&host->dev);
 	if (rc) {
 	if (rc) {

+ 7 - 7
drivers/memstick/core/mspro_block.c

@@ -887,14 +887,14 @@ try_again:
 	if (rc) {
 	if (rc) {
 		printk(KERN_WARNING
 		printk(KERN_WARNING
 		       "%s: could not switch to 4-bit mode, error %d\n",
 		       "%s: could not switch to 4-bit mode, error %d\n",
-		       card->dev.bus_id, rc);
+		       dev_name(&card->dev), rc);
 		return 0;
 		return 0;
 	}
 	}
 
 
 	msb->system = MEMSTICK_SYS_PAR4;
 	msb->system = MEMSTICK_SYS_PAR4;
 	host->set_param(host, MEMSTICK_INTERFACE, MEMSTICK_PAR4);
 	host->set_param(host, MEMSTICK_INTERFACE, MEMSTICK_PAR4);
 	printk(KERN_INFO "%s: switching to 4-bit parallel mode\n",
 	printk(KERN_INFO "%s: switching to 4-bit parallel mode\n",
-	       card->dev.bus_id);
+	       dev_name(&card->dev));
 
 
 	if (msb->caps & MEMSTICK_CAP_PAR8) {
 	if (msb->caps & MEMSTICK_CAP_PAR8) {
 		rc = mspro_block_set_interface(card, MEMSTICK_SYS_PAR8);
 		rc = mspro_block_set_interface(card, MEMSTICK_SYS_PAR8);
@@ -905,11 +905,11 @@ try_again:
 					MEMSTICK_PAR8);
 					MEMSTICK_PAR8);
 			printk(KERN_INFO
 			printk(KERN_INFO
 			       "%s: switching to 8-bit parallel mode\n",
 			       "%s: switching to 8-bit parallel mode\n",
-			       card->dev.bus_id);
+			       dev_name(&card->dev));
 		} else
 		} else
 			printk(KERN_WARNING
 			printk(KERN_WARNING
 			       "%s: could not switch to 8-bit mode, error %d\n",
 			       "%s: could not switch to 8-bit mode, error %d\n",
-			       card->dev.bus_id, rc);
+			       dev_name(&card->dev), rc);
 	}
 	}
 
 
 	card->next_request = h_mspro_block_req_init;
 	card->next_request = h_mspro_block_req_init;
@@ -922,7 +922,7 @@ try_again:
 	if (rc) {
 	if (rc) {
 		printk(KERN_WARNING
 		printk(KERN_WARNING
 		       "%s: interface error, trying to fall back to serial\n",
 		       "%s: interface error, trying to fall back to serial\n",
-		       card->dev.bus_id);
+		       dev_name(&card->dev));
 		msb->system = MEMSTICK_SYS_SERIAL;
 		msb->system = MEMSTICK_SYS_SERIAL;
 		host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF);
 		host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF);
 		msleep(10);
 		msleep(10);
@@ -992,14 +992,14 @@ static int mspro_block_read_attributes(struct memstick_dev *card)
 
 
 	if (be16_to_cpu(attr->signature) != MSPRO_BLOCK_SIGNATURE) {
 	if (be16_to_cpu(attr->signature) != MSPRO_BLOCK_SIGNATURE) {
 		printk(KERN_ERR "%s: unrecognized device signature %x\n",
 		printk(KERN_ERR "%s: unrecognized device signature %x\n",
-		       card->dev.bus_id, be16_to_cpu(attr->signature));
+		       dev_name(&card->dev), be16_to_cpu(attr->signature));
 		rc = -ENODEV;
 		rc = -ENODEV;
 		goto out_free_attr;
 		goto out_free_attr;
 	}
 	}
 
 
 	if (attr->count > MSPRO_BLOCK_MAX_ATTRIBUTES) {
 	if (attr->count > MSPRO_BLOCK_MAX_ATTRIBUTES) {
 		printk(KERN_WARNING "%s: way too many attribute entries\n",
 		printk(KERN_WARNING "%s: way too many attribute entries\n",
-		       card->dev.bus_id);
+		       dev_name(&card->dev));
 		attr_count = MSPRO_BLOCK_MAX_ATTRIBUTES;
 		attr_count = MSPRO_BLOCK_MAX_ATTRIBUTES;
 	} else
 	} else
 		attr_count = attr->count;
 		attr_count = attr->count;

+ 2 - 2
drivers/memstick/host/tifm_ms.c

@@ -546,7 +546,7 @@ static void tifm_ms_abort(unsigned long data)
 	printk(KERN_ERR
 	printk(KERN_ERR
 	       "%s : card failed to respond for a long period of time "
 	       "%s : card failed to respond for a long period of time "
 	       "(%x, %x)\n",
 	       "(%x, %x)\n",
-	       host->dev->dev.bus_id, host->req ? host->req->tpc : 0,
+	       dev_name(&host->dev->dev), host->req ? host->req->tpc : 0,
 	       host->cmd_flags);
 	       host->cmd_flags);
 
 
 	tifm_eject(host->dev);
 	tifm_eject(host->dev);
@@ -561,7 +561,7 @@ static int tifm_ms_probe(struct tifm_dev *sock)
 	if (!(TIFM_SOCK_STATE_OCCUPIED
 	if (!(TIFM_SOCK_STATE_OCCUPIED
 	      & readl(sock->addr + SOCK_PRESENT_STATE))) {
 	      & readl(sock->addr + SOCK_PRESENT_STATE))) {
 		printk(KERN_WARNING "%s : card gone, unexpectedly\n",
 		printk(KERN_WARNING "%s : card gone, unexpectedly\n",
-		       sock->dev.bus_id);
+		       dev_name(&sock->dev));
 		return rc;
 		return rc;
 	}
 	}
 
 

+ 4 - 4
drivers/message/i2o/device.c

@@ -132,7 +132,7 @@ static void i2o_device_release(struct device *dev)
 {
 {
 	struct i2o_device *i2o_dev = to_i2o_device(dev);
 	struct i2o_device *i2o_dev = to_i2o_device(dev);
 
 
-	pr_debug("i2o: device %s released\n", dev->bus_id);
+	pr_debug("i2o: device %s released\n", dev_name(dev));
 
 
 	kfree(i2o_dev);
 	kfree(i2o_dev);
 }
 }
@@ -227,8 +227,8 @@ static int i2o_device_add(struct i2o_controller *c, i2o_lct_entry *entry)
 
 
 	i2o_dev->lct_data = *entry;
 	i2o_dev->lct_data = *entry;
 
 
-	snprintf(i2o_dev->device.bus_id, BUS_ID_SIZE, "%d:%03x", c->unit,
-		 i2o_dev->lct_data.tid);
+	dev_set_name(&i2o_dev->device, "%d:%03x", c->unit,
+		     i2o_dev->lct_data.tid);
 
 
 	i2o_dev->iop = c;
 	i2o_dev->iop = c;
 	i2o_dev->device.parent = &c->device;
 	i2o_dev->device.parent = &c->device;
@@ -279,7 +279,7 @@ static int i2o_device_add(struct i2o_controller *c, i2o_lct_entry *entry)
 
 
 	i2o_driver_notify_device_add_all(i2o_dev);
 	i2o_driver_notify_device_add_all(i2o_dev);
 
 
-	pr_debug("i2o: device %s added\n", i2o_dev->device.bus_id);
+	pr_debug("i2o: device %s added\n", dev_name(&i2o_dev->device));
 
 
 	return 0;
 	return 0;
 
 

+ 1 - 1
drivers/message/i2o/i2o_proc.c

@@ -1300,7 +1300,7 @@ static int i2o_seq_show_dev_name(struct seq_file *seq, void *v)
 {
 {
 	struct i2o_device *d = (struct i2o_device *)seq->private;
 	struct i2o_device *d = (struct i2o_device *)seq->private;
 
 
-	seq_printf(seq, "%s\n", d->device.bus_id);
+	seq_printf(seq, "%s\n", dev_name(&d->device));
 
 
 	return 0;
 	return 0;
 }
 }

+ 1 - 1
drivers/message/i2o/iop.c

@@ -1072,7 +1072,7 @@ struct i2o_controller *i2o_iop_alloc(void)
 
 
 	c->device.release = &i2o_iop_release;
 	c->device.release = &i2o_iop_release;
 
 
-	snprintf(c->device.bus_id, BUS_ID_SIZE, "iop%d", c->unit);
+	dev_set_name(&c->device, "iop%d", c->unit);
 
 
 #if BITS_PER_LONG == 64
 #if BITS_PER_LONG == 64
 	spin_lock_init(&c->context_list_lock);
 	spin_lock_init(&c->context_list_lock);

+ 1 - 1
drivers/misc/sgi-gru/grumain.c

@@ -29,7 +29,7 @@ static struct device_driver gru_driver = {
 };
 };
 
 
 static struct device gru_device = {
 static struct device gru_device = {
-	.bus_id = {0},
+	.init_name = "",
 	.driver = &gru_driver,
 	.driver = &gru_driver,
 };
 };
 
 

+ 1 - 1
drivers/misc/sgi-xp/xp_main.c

@@ -25,7 +25,7 @@ struct device_driver xp_dbg_name = {
 };
 };
 
 
 struct device xp_dbg_subname = {
 struct device xp_dbg_subname = {
-	.bus_id = {0},		/* set to "" */
+	.init_name = "",		/* set to "" */
 	.driver = &xp_dbg_name
 	.driver = &xp_dbg_name
 };
 };
 
 

+ 4 - 4
drivers/misc/sgi-xp/xpc_main.c

@@ -59,12 +59,12 @@ struct device_driver xpc_dbg_name = {
 };
 };
 
 
 struct device xpc_part_dbg_subname = {
 struct device xpc_part_dbg_subname = {
-	.bus_id = {0},		/* set to "part" at xpc_init() time */
+	.init_name = "",	/* set to "part" at xpc_init() time */
 	.driver = &xpc_dbg_name
 	.driver = &xpc_dbg_name
 };
 };
 
 
 struct device xpc_chan_dbg_subname = {
 struct device xpc_chan_dbg_subname = {
-	.bus_id = {0},		/* set to "chan" at xpc_init() time */
+	.init_name = "",	/* set to "chan" at xpc_init() time */
 	.driver = &xpc_dbg_name
 	.driver = &xpc_dbg_name
 };
 };
 
 
@@ -1258,8 +1258,8 @@ xpc_init(void)
 	int ret;
 	int ret;
 	struct task_struct *kthread;
 	struct task_struct *kthread;
 
 
-	snprintf(xpc_part->bus_id, BUS_ID_SIZE, "part");
-	snprintf(xpc_chan->bus_id, BUS_ID_SIZE, "chan");
+	dev_set_name(xpc_part, "part");
+	dev_set_name(xpc_chan, "chan");
 
 
 	if (is_shub()) {
 	if (is_shub()) {
 		/*
 		/*

+ 1 - 1
drivers/misc/sgi-xp/xpnet.c

@@ -138,7 +138,7 @@ struct device_driver xpnet_dbg_name = {
 };
 };
 
 
 struct device xpnet_dbg_subname = {
 struct device xpnet_dbg_subname = {
-	.bus_id = {0},		/* set to "" */
+	.init_name = "",	/* set to "" */
 	.driver = &xpnet_dbg_name
 	.driver = &xpnet_dbg_name
 };
 };
 
 

+ 1 - 1
drivers/misc/tifm_7xx1.c

@@ -164,7 +164,7 @@ static void tifm_7xx1_switch_media(struct work_struct *work)
 		if (sock) {
 		if (sock) {
 			printk(KERN_INFO
 			printk(KERN_INFO
 			       "%s : demand removing card from socket %u:%u\n",
 			       "%s : demand removing card from socket %u:%u\n",
-			       fm->dev.bus_id, fm->id, cnt);
+			       dev_name(&fm->dev), fm->id, cnt);
 			fm->sockets[cnt] = NULL;
 			fm->sockets[cnt] = NULL;
 			sock_addr = sock->addr;
 			sock_addr = sock->addr;
 			spin_unlock_irqrestore(&fm->lock, flags);
 			spin_unlock_irqrestore(&fm->lock, flags);

+ 3 - 4
drivers/misc/tifm_core.c

@@ -203,7 +203,7 @@ int tifm_add_adapter(struct tifm_adapter *fm)
 	if (rc)
 	if (rc)
 		return rc;
 		return rc;
 
 
-	snprintf(fm->dev.bus_id, BUS_ID_SIZE, "tifm%u", fm->id);
+	dev_set_name(&fm->dev, "tifm%u", fm->id);
 	rc = device_add(&fm->dev);
 	rc = device_add(&fm->dev);
 	if (rc) {
 	if (rc) {
 		spin_lock(&tifm_adapter_lock);
 		spin_lock(&tifm_adapter_lock);
@@ -266,9 +266,8 @@ struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id,
 		sock->dev.dma_mask = fm->dev.parent->dma_mask;
 		sock->dev.dma_mask = fm->dev.parent->dma_mask;
 		sock->dev.release = tifm_free_device;
 		sock->dev.release = tifm_free_device;
 
 
-		snprintf(sock->dev.bus_id, BUS_ID_SIZE,
-			 "tifm_%s%u:%u", tifm_media_type_name(type, 2),
-			 fm->id, id);
+		dev_set_name(&sock->dev, "tifm_%s%u:%u",
+			     tifm_media_type_name(type, 2), fm->id, id);
 		printk(KERN_INFO DRIVER_NAME
 		printk(KERN_INFO DRIVER_NAME
 		       ": %s card detected in socket %u:%u\n",
 		       ": %s card detected in socket %u:%u\n",
 		       tifm_media_type_name(type, 0), fm->id, id);
 		       tifm_media_type_name(type, 0), fm->id, id);

+ 8 - 8
drivers/mtd/devices/m25p80.c

@@ -170,7 +170,7 @@ static int wait_till_ready(struct m25p *flash)
 static int erase_chip(struct m25p *flash)
 static int erase_chip(struct m25p *flash)
 {
 {
 	DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %dKiB\n",
 	DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %dKiB\n",
-			flash->spi->dev.bus_id, __func__,
+			dev_name(&flash->spi->dev), __func__,
 			flash->mtd.size / 1024);
 			flash->mtd.size / 1024);
 
 
 	/* Wait until finished previous write command. */
 	/* Wait until finished previous write command. */
@@ -197,7 +197,7 @@ static int erase_chip(struct m25p *flash)
 static int erase_sector(struct m25p *flash, u32 offset)
 static int erase_sector(struct m25p *flash, u32 offset)
 {
 {
 	DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %dKiB at 0x%08x\n",
 	DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %dKiB at 0x%08x\n",
-			flash->spi->dev.bus_id, __func__,
+			dev_name(&flash->spi->dev), __func__,
 			flash->mtd.erasesize / 1024, offset);
 			flash->mtd.erasesize / 1024, offset);
 
 
 	/* Wait until finished previous write command. */
 	/* Wait until finished previous write command. */
@@ -234,7 +234,7 @@ static int m25p80_erase(struct mtd_info *mtd, struct erase_info *instr)
 	u32 addr,len;
 	u32 addr,len;
 
 
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %d\n",
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %d\n",
-			flash->spi->dev.bus_id, __func__, "at",
+			dev_name(&flash->spi->dev), __func__, "at",
 			(u32)instr->addr, instr->len);
 			(u32)instr->addr, instr->len);
 
 
 	/* sanity checks */
 	/* sanity checks */
@@ -295,7 +295,7 @@ static int m25p80_read(struct mtd_info *mtd, loff_t from, size_t len,
 	struct spi_message m;
 	struct spi_message m;
 
 
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n",
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n",
-			flash->spi->dev.bus_id, __func__, "from",
+			dev_name(&flash->spi->dev), __func__, "from",
 			(u32)from, len);
 			(u32)from, len);
 
 
 	/* sanity checks */
 	/* sanity checks */
@@ -367,7 +367,7 @@ static int m25p80_write(struct mtd_info *mtd, loff_t to, size_t len,
 	struct spi_message m;
 	struct spi_message m;
 
 
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n",
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n",
-			flash->spi->dev.bus_id, __func__, "to",
+			dev_name(&flash->spi->dev), __func__, "to",
 			(u32)to, len);
 			(u32)to, len);
 
 
 	if (retlen)
 	if (retlen)
@@ -563,7 +563,7 @@ static struct flash_info *__devinit jedec_probe(struct spi_device *spi)
 	tmp = spi_write_then_read(spi, &code, 1, id, 5);
 	tmp = spi_write_then_read(spi, &code, 1, id, 5);
 	if (tmp < 0) {
 	if (tmp < 0) {
 		DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
 		DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
-			spi->dev.bus_id, tmp);
+			dev_name(&spi->dev), tmp);
 		return NULL;
 		return NULL;
 	}
 	}
 	jedec = id[0];
 	jedec = id[0];
@@ -617,7 +617,7 @@ static int __devinit m25p_probe(struct spi_device *spi)
 		/* unrecognized chip? */
 		/* unrecognized chip? */
 		if (i == ARRAY_SIZE(m25p_data)) {
 		if (i == ARRAY_SIZE(m25p_data)) {
 			DEBUG(MTD_DEBUG_LEVEL0, "%s: unrecognized id %s\n",
 			DEBUG(MTD_DEBUG_LEVEL0, "%s: unrecognized id %s\n",
-					spi->dev.bus_id, data->type);
+					dev_name(&spi->dev), data->type);
 			info = NULL;
 			info = NULL;
 
 
 		/* recognized; is that chip really what's there? */
 		/* recognized; is that chip really what's there? */
@@ -658,7 +658,7 @@ static int __devinit m25p_probe(struct spi_device *spi)
 	if (data && data->name)
 	if (data && data->name)
 		flash->mtd.name = data->name;
 		flash->mtd.name = data->name;
 	else
 	else
-		flash->mtd.name = spi->dev.bus_id;
+		flash->mtd.name = dev_name(&spi->dev);
 
 
 	flash->mtd.type = MTD_NORFLASH;
 	flash->mtd.type = MTD_NORFLASH;
 	flash->mtd.writesize = 1;
 	flash->mtd.writesize = 1;

+ 15 - 15
drivers/mtd/devices/mtd_dataflash.c

@@ -128,7 +128,7 @@ static int dataflash_waitready(struct spi_device *spi)
 		status = dataflash_status(spi);
 		status = dataflash_status(spi);
 		if (status < 0) {
 		if (status < 0) {
 			DEBUG(MTD_DEBUG_LEVEL1, "%s: status %d?\n",
 			DEBUG(MTD_DEBUG_LEVEL1, "%s: status %d?\n",
-					spi->dev.bus_id, status);
+					dev_name(&spi->dev), status);
 			status = 0;
 			status = 0;
 		}
 		}
 
 
@@ -154,7 +154,7 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
 	uint8_t			*command;
 	uint8_t			*command;
 
 
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: erase addr=0x%x len 0x%x\n",
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: erase addr=0x%x len 0x%x\n",
-			spi->dev.bus_id,
+			dev_name(&spi->dev),
 			instr->addr, instr->len);
 			instr->addr, instr->len);
 
 
 	/* Sanity checks */
 	/* Sanity checks */
@@ -197,7 +197,7 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
 
 
 		if (status < 0) {
 		if (status < 0) {
 			printk(KERN_ERR "%s: erase %x, err %d\n",
 			printk(KERN_ERR "%s: erase %x, err %d\n",
-				spi->dev.bus_id, pageaddr, status);
+				dev_name(&spi->dev), pageaddr, status);
 			/* REVISIT:  can retry instr->retries times; or
 			/* REVISIT:  can retry instr->retries times; or
 			 * giveup and instr->fail_addr = instr->addr;
 			 * giveup and instr->fail_addr = instr->addr;
 			 */
 			 */
@@ -239,7 +239,7 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len,
 	int			status;
 	int			status;
 
 
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: read 0x%x..0x%x\n",
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: read 0x%x..0x%x\n",
-		priv->spi->dev.bus_id, (unsigned)from, (unsigned)(from + len));
+		dev_name(&priv->spi->dev), (unsigned)from, (unsigned)(from + len));
 
 
 	*retlen = 0;
 	*retlen = 0;
 
 
@@ -288,7 +288,7 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len,
 		status = 0;
 		status = 0;
 	} else
 	} else
 		DEBUG(MTD_DEBUG_LEVEL1, "%s: read %x..%x --> %d\n",
 		DEBUG(MTD_DEBUG_LEVEL1, "%s: read %x..%x --> %d\n",
-			priv->spi->dev.bus_id,
+			dev_name(&priv->spi->dev),
 			(unsigned)from, (unsigned)(from + len),
 			(unsigned)from, (unsigned)(from + len),
 			status);
 			status);
 	return status;
 	return status;
@@ -315,7 +315,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 	uint8_t			*command;
 	uint8_t			*command;
 
 
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: write 0x%x..0x%x\n",
 	DEBUG(MTD_DEBUG_LEVEL2, "%s: write 0x%x..0x%x\n",
-		spi->dev.bus_id, (unsigned)to, (unsigned)(to + len));
+		dev_name(&spi->dev), (unsigned)to, (unsigned)(to + len));
 
 
 	*retlen = 0;
 	*retlen = 0;
 
 
@@ -374,7 +374,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 			status = spi_sync(spi, &msg);
 			status = spi_sync(spi, &msg);
 			if (status < 0)
 			if (status < 0)
 				DEBUG(MTD_DEBUG_LEVEL1, "%s: xfer %u -> %d \n",
 				DEBUG(MTD_DEBUG_LEVEL1, "%s: xfer %u -> %d \n",
-					spi->dev.bus_id, addr, status);
+					dev_name(&spi->dev), addr, status);
 
 
 			(void) dataflash_waitready(priv->spi);
 			(void) dataflash_waitready(priv->spi);
 		}
 		}
@@ -396,7 +396,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 		spi_transfer_del(x + 1);
 		spi_transfer_del(x + 1);
 		if (status < 0)
 		if (status < 0)
 			DEBUG(MTD_DEBUG_LEVEL1, "%s: pgm %u/%u -> %d \n",
 			DEBUG(MTD_DEBUG_LEVEL1, "%s: pgm %u/%u -> %d \n",
-				spi->dev.bus_id, addr, writelen, status);
+				dev_name(&spi->dev), addr, writelen, status);
 
 
 		(void) dataflash_waitready(priv->spi);
 		(void) dataflash_waitready(priv->spi);
 
 
@@ -416,14 +416,14 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 		status = spi_sync(spi, &msg);
 		status = spi_sync(spi, &msg);
 		if (status < 0)
 		if (status < 0)
 			DEBUG(MTD_DEBUG_LEVEL1, "%s: compare %u -> %d \n",
 			DEBUG(MTD_DEBUG_LEVEL1, "%s: compare %u -> %d \n",
-				spi->dev.bus_id, addr, status);
+				dev_name(&spi->dev), addr, status);
 
 
 		status = dataflash_waitready(priv->spi);
 		status = dataflash_waitready(priv->spi);
 
 
 		/* Check result of the compare operation */
 		/* Check result of the compare operation */
 		if (status & (1 << 6)) {
 		if (status & (1 << 6)) {
 			printk(KERN_ERR "%s: compare page %u, err %d\n",
 			printk(KERN_ERR "%s: compare page %u, err %d\n",
-				spi->dev.bus_id, pageaddr, status);
+				dev_name(&spi->dev), pageaddr, status);
 			remaining = 0;
 			remaining = 0;
 			status = -EIO;
 			status = -EIO;
 			break;
 			break;
@@ -779,7 +779,7 @@ static struct flash_info *__devinit jedec_probe(struct spi_device *spi)
 	tmp = spi_write_then_read(spi, &code, 1, id, 3);
 	tmp = spi_write_then_read(spi, &code, 1, id, 3);
 	if (tmp < 0) {
 	if (tmp < 0) {
 		DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
 		DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
-			spi->dev.bus_id, tmp);
+			dev_name(&spi->dev), tmp);
 		return ERR_PTR(tmp);
 		return ERR_PTR(tmp);
 	}
 	}
 	if (id[0] != 0x1f)
 	if (id[0] != 0x1f)
@@ -869,7 +869,7 @@ static int __devinit dataflash_probe(struct spi_device *spi)
 	status = dataflash_status(spi);
 	status = dataflash_status(spi);
 	if (status <= 0 || status == 0xff) {
 	if (status <= 0 || status == 0xff) {
 		DEBUG(MTD_DEBUG_LEVEL1, "%s: status error %d\n",
 		DEBUG(MTD_DEBUG_LEVEL1, "%s: status error %d\n",
-				spi->dev.bus_id, status);
+				dev_name(&spi->dev), status);
 		if (status == 0 || status == 0xff)
 		if (status == 0 || status == 0xff)
 			status = -ENODEV;
 			status = -ENODEV;
 		return status;
 		return status;
@@ -905,13 +905,13 @@ static int __devinit dataflash_probe(struct spi_device *spi)
 	/* obsolete AT45DB1282 not (yet?) supported */
 	/* obsolete AT45DB1282 not (yet?) supported */
 	default:
 	default:
 		DEBUG(MTD_DEBUG_LEVEL1, "%s: unsupported device (%x)\n",
 		DEBUG(MTD_DEBUG_LEVEL1, "%s: unsupported device (%x)\n",
-				spi->dev.bus_id, status & 0x3c);
+				dev_name(&spi->dev), status & 0x3c);
 		status = -ENODEV;
 		status = -ENODEV;
 	}
 	}
 
 
 	if (status < 0)
 	if (status < 0)
 		DEBUG(MTD_DEBUG_LEVEL1, "%s: add_dataflash --> %d\n",
 		DEBUG(MTD_DEBUG_LEVEL1, "%s: add_dataflash --> %d\n",
-				spi->dev.bus_id, status);
+				dev_name(&spi->dev), status);
 
 
 	return status;
 	return status;
 }
 }
@@ -921,7 +921,7 @@ static int __devexit dataflash_remove(struct spi_device *spi)
 	struct dataflash	*flash = dev_get_drvdata(&spi->dev);
 	struct dataflash	*flash = dev_get_drvdata(&spi->dev);
 	int			status;
 	int			status;
 
 
-	DEBUG(MTD_DEBUG_LEVEL1, "%s: remove\n", spi->dev.bus_id);
+	DEBUG(MTD_DEBUG_LEVEL1, "%s: remove\n", dev_name(&spi->dev));
 
 
 	if (mtd_has_partitions() && flash->partitioned)
 	if (mtd_has_partitions() && flash->partitioned)
 		status = del_mtd_partitions(&flash->mtd);
 		status = del_mtd_partitions(&flash->mtd);

+ 1 - 1
drivers/mtd/maps/integrator-flash.c

@@ -105,7 +105,7 @@ static int armflash_probe(struct platform_device *dev)
 	info->map.bankwidth	= plat->width;
 	info->map.bankwidth	= plat->width;
 	info->map.phys		= res->start;
 	info->map.phys		= res->start;
 	info->map.virt		= base;
 	info->map.virt		= base;
-	info->map.name		= dev->dev.bus_id;
+	info->map.name		= dev_name(&dev->dev);
 	info->map.set_vpp	= armflash_set_vpp;
 	info->map.set_vpp	= armflash_set_vpp;
 
 
 	simple_map_init(&info->map);
 	simple_map_init(&info->map);

+ 2 - 2
drivers/mtd/maps/ixp2000.c

@@ -188,7 +188,7 @@ static int ixp2000_flash_probe(struct platform_device *dev)
  	 */
  	 */
 	info->map.map_priv_2 = (unsigned long) ixp_data->bank_setup;
 	info->map.map_priv_2 = (unsigned long) ixp_data->bank_setup;
 
 
-	info->map.name = dev->dev.bus_id;
+	info->map.name = dev_name(&dev->dev);
 	info->map.read = ixp2000_flash_read8;
 	info->map.read = ixp2000_flash_read8;
 	info->map.write = ixp2000_flash_write8;
 	info->map.write = ixp2000_flash_write8;
 	info->map.copy_from = ixp2000_flash_copy_from;
 	info->map.copy_from = ixp2000_flash_copy_from;
@@ -196,7 +196,7 @@ static int ixp2000_flash_probe(struct platform_device *dev)
 
 
 	info->res = request_mem_region(dev->resource->start,
 	info->res = request_mem_region(dev->resource->start,
 			dev->resource->end - dev->resource->start + 1,
 			dev->resource->end - dev->resource->start + 1,
-			dev->dev.bus_id);
+			dev_name(&dev->dev));
 	if (!info->res) {
 	if (!info->res) {
 		dev_err(&dev->dev, "Could not reserve memory region\n");
 		dev_err(&dev->dev, "Could not reserve memory region\n");
 		err = -ENOMEM;
 		err = -ENOMEM;

+ 1 - 1
drivers/mtd/maps/ixp4xx.c

@@ -218,7 +218,7 @@ static int ixp4xx_flash_probe(struct platform_device *dev)
 	 * handle that.
 	 * handle that.
 	 */
 	 */
 	info->map.bankwidth = 2;
 	info->map.bankwidth = 2;
-	info->map.name = dev->dev.bus_id;
+	info->map.name = dev_name(&dev->dev);
 	info->map.read = ixp4xx_read16,
 	info->map.read = ixp4xx_read16,
 	info->map.write = ixp4xx_probe_write16,
 	info->map.write = ixp4xx_probe_write16,
 	info->map.copy_from = ixp4xx_copy_from,
 	info->map.copy_from = ixp4xx_copy_from,

+ 1 - 1
drivers/mtd/maps/omap_nor.c

@@ -101,7 +101,7 @@ static int __init omapflash_probe(struct platform_device *pdev)
 		err = -ENOMEM;
 		err = -ENOMEM;
 		goto out_release_mem_region;
 		goto out_release_mem_region;
 	}
 	}
-	info->map.name		= pdev->dev.bus_id;
+	info->map.name		= dev_name(&pdev->dev);
 	info->map.phys		= res->start;
 	info->map.phys		= res->start;
 	info->map.size		= size;
 	info->map.size		= size;
 	info->map.bankwidth	= pdata->width;
 	info->map.bankwidth	= pdata->width;

+ 3 - 3
drivers/mtd/maps/physmap.c

@@ -108,13 +108,13 @@ static int physmap_flash_probe(struct platform_device *dev)
 		if (!devm_request_mem_region(&dev->dev,
 		if (!devm_request_mem_region(&dev->dev,
 			dev->resource[i].start,
 			dev->resource[i].start,
 			dev->resource[i].end - dev->resource[i].start + 1,
 			dev->resource[i].end - dev->resource[i].start + 1,
-			dev->dev.bus_id)) {
+			dev_name(&dev->dev))) {
 			dev_err(&dev->dev, "Could not reserve memory region\n");
 			dev_err(&dev->dev, "Could not reserve memory region\n");
 			err = -ENOMEM;
 			err = -ENOMEM;
 			goto err_out;
 			goto err_out;
 		}
 		}
 
 
-		info->map[i].name = dev->dev.bus_id;
+		info->map[i].name = dev_name(&dev->dev);
 		info->map[i].phys = dev->resource[i].start;
 		info->map[i].phys = dev->resource[i].start;
 		info->map[i].size = dev->resource[i].end - dev->resource[i].start + 1;
 		info->map[i].size = dev->resource[i].end - dev->resource[i].start + 1;
 		info->map[i].bankwidth = physmap_data->width;
 		info->map[i].bankwidth = physmap_data->width;
@@ -150,7 +150,7 @@ static int physmap_flash_probe(struct platform_device *dev)
 		 * We detected multiple devices. Concatenate them together.
 		 * We detected multiple devices. Concatenate them together.
 		 */
 		 */
 #ifdef CONFIG_MTD_CONCAT
 #ifdef CONFIG_MTD_CONCAT
-		info->cmtd = mtd_concat_create(info->mtd, devices_found, dev->dev.bus_id);
+		info->cmtd = mtd_concat_create(info->mtd, devices_found, dev_name(&dev->dev));
 		if (info->cmtd == NULL)
 		if (info->cmtd == NULL)
 			err = -ENXIO;
 			err = -ENXIO;
 #else
 #else

+ 2 - 2
drivers/mtd/maps/physmap_of.c

@@ -183,7 +183,7 @@ static int __devinit of_flash_probe(struct of_device *dev,
 
 
 	err = -EBUSY;
 	err = -EBUSY;
 	info->res = request_mem_region(res.start, res.end - res.start + 1,
 	info->res = request_mem_region(res.start, res.end - res.start + 1,
-				       dev->dev.bus_id);
+				       dev_name(&dev->dev));
 	if (!info->res)
 	if (!info->res)
 		goto err_out;
 		goto err_out;
 
 
@@ -194,7 +194,7 @@ static int __devinit of_flash_probe(struct of_device *dev,
 		goto err_out;
 		goto err_out;
 	}
 	}
 
 
-	info->map.name = dev->dev.bus_id;
+	info->map.name = dev_name(&dev->dev);
 	info->map.phys = res.start;
 	info->map.phys = res.start;
 	info->map.size = res.end - res.start + 1;
 	info->map.size = res.end - res.start + 1;
 	info->map.bankwidth = *width;
 	info->map.bankwidth = *width;

+ 1 - 1
drivers/mtd/mtdconcat.c

@@ -691,7 +691,7 @@ static int concat_block_markbad(struct mtd_info *mtd, loff_t ofs)
  */
  */
 struct mtd_info *mtd_concat_create(struct mtd_info *subdev[],	/* subdevices to concatenate */
 struct mtd_info *mtd_concat_create(struct mtd_info *subdev[],	/* subdevices to concatenate */
 				   int num_devs,	/* number of subdevices      */
 				   int num_devs,	/* number of subdevices      */
-				   char *name)
+				   const char *name)
 {				/* name for the new device   */
 {				/* name for the new device   */
 	int i;
 	int i;
 	size_t size;
 	size_t size;

+ 1 - 1
drivers/mtd/nand/fsl_upm.c

@@ -222,7 +222,7 @@ static int __devinit fun_probe(struct of_device *ofdev,
 
 
 	fun->rnb_gpio = of_get_gpio(ofdev->node, 0);
 	fun->rnb_gpio = of_get_gpio(ofdev->node, 0);
 	if (fun->rnb_gpio >= 0) {
 	if (fun->rnb_gpio >= 0) {
-		ret = gpio_request(fun->rnb_gpio, ofdev->dev.bus_id);
+		ret = gpio_request(fun->rnb_gpio, dev_name(&ofdev->dev));
 		if (ret) {
 		if (ret) {
 			dev_err(&ofdev->dev, "can't request RNB gpio\n");
 			dev_err(&ofdev->dev, "can't request RNB gpio\n");
 			goto err2;
 			goto err2;

+ 1 - 1
drivers/mtd/nand/plat_nand.c

@@ -54,7 +54,7 @@ static int __init plat_nand_probe(struct platform_device *pdev)
 	data->chip.priv = &data;
 	data->chip.priv = &data;
 	data->mtd.priv = &data->chip;
 	data->mtd.priv = &data->chip;
 	data->mtd.owner = THIS_MODULE;
 	data->mtd.owner = THIS_MODULE;
-	data->mtd.name = pdev->dev.bus_id;
+	data->mtd.name = dev_name(&pdev->dev);
 
 
 	data->chip.IO_ADDR_R = data->io_base;
 	data->chip.IO_ADDR_R = data->io_base;
 	data->chip.IO_ADDR_W = data->io_base;
 	data->chip.IO_ADDR_W = data->io_base;

+ 1 - 1
drivers/mtd/nand/tmio_nand.c

@@ -433,7 +433,7 @@ static int tmio_probe(struct platform_device *dev)
 	nand_chip->chip_delay = 15;
 	nand_chip->chip_delay = 15;
 
 
 	retval = request_irq(irq, &tmio_irq,
 	retval = request_irq(irq, &tmio_irq,
-				IRQF_DISABLED, dev->dev.bus_id, tmio);
+				IRQF_DISABLED, dev_name(&dev->dev), tmio);
 	if (retval) {
 	if (retval) {
 		dev_err(&dev->dev, "request_irq error %d\n", retval);
 		dev_err(&dev->dev, "request_irq error %d\n", retval);
 		goto err_irq;
 		goto err_irq;

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

@@ -63,7 +63,7 @@ static int __devinit generic_onenand_probe(struct device *dev)
 	info->onenand.mmcontrol = pdata->mmcontrol;
 	info->onenand.mmcontrol = pdata->mmcontrol;
 	info->onenand.irq = platform_get_irq(pdev, 0);
 	info->onenand.irq = platform_get_irq(pdev, 0);
 
 
-	info->mtd.name = pdev->dev.bus_id;
+	info->mtd.name = dev_name(&pdev->dev);
 	info->mtd.priv = &info->onenand;
 	info->mtd.priv = &info->onenand;
 	info->mtd.owner = THIS_MODULE;
 	info->mtd.owner = THIS_MODULE;
 
 

+ 1 - 1
drivers/mtd/onenand/omap2.c

@@ -668,7 +668,7 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)
 		 c->onenand.base);
 		 c->onenand.base);
 
 
 	c->pdev = pdev;
 	c->pdev = pdev;
-	c->mtd.name = pdev->dev.bus_id;
+	c->mtd.name = dev_name(&pdev->dev);
 	c->mtd.priv = &c->onenand;
 	c->mtd.priv = &c->onenand;
 	c->mtd.owner = THIS_MODULE;
 	c->mtd.owner = THIS_MODULE;
 
 

+ 1 - 1
drivers/mtd/ubi/build.c

@@ -280,7 +280,7 @@ static int ubi_sysfs_init(struct ubi_device *ubi)
 	ubi->dev.release = dev_release;
 	ubi->dev.release = dev_release;
 	ubi->dev.devt = ubi->cdev.dev;
 	ubi->dev.devt = ubi->cdev.dev;
 	ubi->dev.class = ubi_class;
 	ubi->dev.class = ubi_class;
-	sprintf(&ubi->dev.bus_id[0], UBI_NAME_STR"%d", ubi->ubi_num);
+	dev_set_name(&ubi->dev, UBI_NAME_STR"%d", ubi->ubi_num);
 	err = device_register(&ubi->dev);
 	err = device_register(&ubi->dev);
 	if (err)
 	if (err)
 		return err;
 		return err;

+ 2 - 2
drivers/mtd/ubi/vmt.c

@@ -329,7 +329,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
 	vol->dev.devt = dev;
 	vol->dev.devt = dev;
 	vol->dev.class = ubi_class;
 	vol->dev.class = ubi_class;
 
 
-	sprintf(&vol->dev.bus_id[0], "%s_%d", ubi->ubi_name, vol->vol_id);
+	dev_set_name(&vol->dev, "%s_%d", ubi->ubi_name, vol->vol_id);
 	err = device_register(&vol->dev);
 	err = device_register(&vol->dev);
 	if (err) {
 	if (err) {
 		ubi_err("cannot register device");
 		ubi_err("cannot register device");
@@ -678,7 +678,7 @@ int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol)
 	vol->dev.parent = &ubi->dev;
 	vol->dev.parent = &ubi->dev;
 	vol->dev.devt = dev;
 	vol->dev.devt = dev;
 	vol->dev.class = ubi_class;
 	vol->dev.class = ubi_class;
-	sprintf(&vol->dev.bus_id[0], "%s_%d", ubi->ubi_name, vol->vol_id);
+	dev_set_name(&vol->dev, "%s_%d", ubi->ubi_name, vol->vol_id);
 	err = device_register(&vol->dev);
 	err = device_register(&vol->dev);
 	if (err)
 	if (err)
 		goto out_gluebi;
 		goto out_gluebi;

+ 77 - 55
drivers/pci/pci-driver.c

@@ -300,6 +300,14 @@ static void pci_device_shutdown(struct device *dev)
 
 
 #ifdef CONFIG_PM_SLEEP
 #ifdef CONFIG_PM_SLEEP
 
 
+static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
+{
+	struct pci_driver *drv = pci_dev->driver;
+
+	return drv && (drv->suspend || drv->suspend_late || drv->resume
+		|| drv->resume_early);
+}
+
 /*
 /*
  * Default "suspend" method for devices that have no driver provided suspend,
  * Default "suspend" method for devices that have no driver provided suspend,
  * or not even a driver at all.
  * or not even a driver at all.
@@ -317,14 +325,22 @@ static void pci_default_pm_suspend(struct pci_dev *pci_dev)
 
 
 /*
 /*
  * Default "resume" method for devices that have no driver provided resume,
  * Default "resume" method for devices that have no driver provided resume,
- * or not even a driver at all.
+ * or not even a driver at all (first part).
  */
  */
-static int pci_default_pm_resume(struct pci_dev *pci_dev)
+static void pci_default_pm_resume_early(struct pci_dev *pci_dev)
 {
 {
-	int retval = 0;
-
 	/* restore the PCI config space */
 	/* restore the PCI config space */
 	pci_restore_state(pci_dev);
 	pci_restore_state(pci_dev);
+}
+
+/*
+ * Default "resume" method for devices that have no driver provided resume,
+ * or not even a driver at all (second part).
+ */
+static int pci_default_pm_resume_late(struct pci_dev *pci_dev)
+{
+	int retval;
+
 	/* if the device was enabled before suspend, reenable */
 	/* if the device was enabled before suspend, reenable */
 	retval = pci_reenable_device(pci_dev);
 	retval = pci_reenable_device(pci_dev);
 	/*
 	/*
@@ -371,10 +387,12 @@ static int pci_legacy_resume(struct device *dev)
 	struct pci_dev * pci_dev = to_pci_dev(dev);
 	struct pci_dev * pci_dev = to_pci_dev(dev);
 	struct pci_driver * drv = pci_dev->driver;
 	struct pci_driver * drv = pci_dev->driver;
 
 
-	if (drv && drv->resume)
+	if (drv && drv->resume) {
 		error = drv->resume(pci_dev);
 		error = drv->resume(pci_dev);
-	else
-		error = pci_default_pm_resume(pci_dev);
+	} else {
+		pci_default_pm_resume_early(pci_dev);
+		error = pci_default_pm_resume_late(pci_dev);
+	}
 	return error;
 	return error;
 }
 }
 
 
@@ -420,10 +438,8 @@ static int pci_pm_suspend(struct device *dev)
 		if (drv->pm->suspend) {
 		if (drv->pm->suspend) {
 			error = drv->pm->suspend(dev);
 			error = drv->pm->suspend(dev);
 			suspend_report_result(drv->pm->suspend, error);
 			suspend_report_result(drv->pm->suspend, error);
-		} else {
-			pci_default_pm_suspend(pci_dev);
 		}
 		}
-	} else {
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
 		error = pci_legacy_suspend(dev, PMSG_SUSPEND);
 		error = pci_legacy_suspend(dev, PMSG_SUSPEND);
 	}
 	}
 	pci_fixup_device(pci_fixup_suspend, pci_dev);
 	pci_fixup_device(pci_fixup_suspend, pci_dev);
@@ -434,7 +450,7 @@ static int pci_pm_suspend(struct device *dev)
 static int pci_pm_suspend_noirq(struct device *dev)
 static int pci_pm_suspend_noirq(struct device *dev)
 {
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_dev *pci_dev = to_pci_dev(dev);
-	struct pci_driver *drv = pci_dev->driver;
+	struct device_driver *drv = dev->driver;
 	int error = 0;
 	int error = 0;
 
 
 	if (drv && drv->pm) {
 	if (drv && drv->pm) {
@@ -442,8 +458,10 @@ static int pci_pm_suspend_noirq(struct device *dev)
 			error = drv->pm->suspend_noirq(dev);
 			error = drv->pm->suspend_noirq(dev);
 			suspend_report_result(drv->pm->suspend_noirq, error);
 			suspend_report_result(drv->pm->suspend_noirq, error);
 		}
 		}
-	} else {
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
 		error = pci_legacy_suspend_late(dev, PMSG_SUSPEND);
 		error = pci_legacy_suspend_late(dev, PMSG_SUSPEND);
+	} else {
+		pci_default_pm_suspend(pci_dev);
 	}
 	}
 
 
 	return error;
 	return error;
@@ -453,15 +471,17 @@ static int pci_pm_resume(struct device *dev)
 {
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct device_driver *drv = dev->driver;
 	struct device_driver *drv = dev->driver;
-	int error;
+	int error = 0;
 
 
 	pci_fixup_device(pci_fixup_resume, pci_dev);
 	pci_fixup_device(pci_fixup_resume, pci_dev);
 
 
 	if (drv && drv->pm) {
 	if (drv && drv->pm) {
-		error = drv->pm->resume ? drv->pm->resume(dev) :
-			pci_default_pm_resume(pci_dev);
-	} else {
+		if (drv->pm->resume)
+			error = drv->pm->resume(dev);
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
 		error = pci_legacy_resume(dev);
 		error = pci_legacy_resume(dev);
+	} else {
+		error = pci_default_pm_resume_late(pci_dev);
 	}
 	}
 
 
 	return error;
 	return error;
@@ -470,16 +490,18 @@ static int pci_pm_resume(struct device *dev)
 static int pci_pm_resume_noirq(struct device *dev)
 static int pci_pm_resume_noirq(struct device *dev)
 {
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_dev *pci_dev = to_pci_dev(dev);
-	struct pci_driver *drv = pci_dev->driver;
+	struct device_driver *drv = dev->driver;
 	int error = 0;
 	int error = 0;
 
 
-	pci_fixup_device(pci_fixup_resume_early, pci_dev);
+	pci_fixup_device(pci_fixup_resume_early, to_pci_dev(dev));
 
 
 	if (drv && drv->pm) {
 	if (drv && drv->pm) {
 		if (drv->pm->resume_noirq)
 		if (drv->pm->resume_noirq)
 			error = drv->pm->resume_noirq(dev);
 			error = drv->pm->resume_noirq(dev);
-	} else {
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
 		error = pci_legacy_resume_early(dev);
 		error = pci_legacy_resume_early(dev);
+	} else {
+		pci_default_pm_resume_early(pci_dev);
 	}
 	}
 
 
 	return error;
 	return error;
@@ -506,10 +528,8 @@ static int pci_pm_freeze(struct device *dev)
 		if (drv->pm->freeze) {
 		if (drv->pm->freeze) {
 			error = drv->pm->freeze(dev);
 			error = drv->pm->freeze(dev);
 			suspend_report_result(drv->pm->freeze, error);
 			suspend_report_result(drv->pm->freeze, error);
-		} else {
-			pci_default_pm_suspend(pci_dev);
 		}
 		}
-	} else {
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
 		error = pci_legacy_suspend(dev, PMSG_FREEZE);
 		error = pci_legacy_suspend(dev, PMSG_FREEZE);
 		pci_fixup_device(pci_fixup_suspend, pci_dev);
 		pci_fixup_device(pci_fixup_suspend, pci_dev);
 	}
 	}
@@ -520,7 +540,7 @@ static int pci_pm_freeze(struct device *dev)
 static int pci_pm_freeze_noirq(struct device *dev)
 static int pci_pm_freeze_noirq(struct device *dev)
 {
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_dev *pci_dev = to_pci_dev(dev);
-	struct pci_driver *drv = pci_dev->driver;
+	struct device_driver *drv = dev->driver;
 	int error = 0;
 	int error = 0;
 
 
 	if (drv && drv->pm) {
 	if (drv && drv->pm) {
@@ -528,8 +548,10 @@ static int pci_pm_freeze_noirq(struct device *dev)
 			error = drv->pm->freeze_noirq(dev);
 			error = drv->pm->freeze_noirq(dev);
 			suspend_report_result(drv->pm->freeze_noirq, error);
 			suspend_report_result(drv->pm->freeze_noirq, error);
 		}
 		}
-	} else {
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
 		error = pci_legacy_suspend_late(dev, PMSG_FREEZE);
 		error = pci_legacy_suspend_late(dev, PMSG_FREEZE);
+	} else {
+		pci_default_pm_suspend(pci_dev);
 	}
 	}
 
 
 	return error;
 	return error;
@@ -537,14 +559,15 @@ static int pci_pm_freeze_noirq(struct device *dev)
 
 
 static int pci_pm_thaw(struct device *dev)
 static int pci_pm_thaw(struct device *dev)
 {
 {
+	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct device_driver *drv = dev->driver;
 	struct device_driver *drv = dev->driver;
 	int error = 0;
 	int error = 0;
 
 
 	if (drv && drv->pm) {
 	if (drv && drv->pm) {
 		if (drv->pm->thaw)
 		if (drv->pm->thaw)
 			error =  drv->pm->thaw(dev);
 			error =  drv->pm->thaw(dev);
-	} else {
-		pci_fixup_device(pci_fixup_resume, to_pci_dev(dev));
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
+		pci_fixup_device(pci_fixup_resume, pci_dev);
 		error = pci_legacy_resume(dev);
 		error = pci_legacy_resume(dev);
 	}
 	}
 
 
@@ -554,14 +577,14 @@ static int pci_pm_thaw(struct device *dev)
 static int pci_pm_thaw_noirq(struct device *dev)
 static int pci_pm_thaw_noirq(struct device *dev)
 {
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_dev *pci_dev = to_pci_dev(dev);
-	struct pci_driver *drv = pci_dev->driver;
+	struct device_driver *drv = dev->driver;
 	int error = 0;
 	int error = 0;
 
 
 	if (drv && drv->pm) {
 	if (drv && drv->pm) {
 		if (drv->pm->thaw_noirq)
 		if (drv->pm->thaw_noirq)
 			error = drv->pm->thaw_noirq(dev);
 			error = drv->pm->thaw_noirq(dev);
-	} else {
-		pci_fixup_device(pci_fixup_resume_early, pci_dev);
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
+		pci_fixup_device(pci_fixup_resume_early, to_pci_dev(dev));
 		error = pci_legacy_resume_early(dev);
 		error = pci_legacy_resume_early(dev);
 	}
 	}
 
 
@@ -570,17 +593,18 @@ static int pci_pm_thaw_noirq(struct device *dev)
 
 
 static int pci_pm_poweroff(struct device *dev)
 static int pci_pm_poweroff(struct device *dev)
 {
 {
+	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct device_driver *drv = dev->driver;
 	struct device_driver *drv = dev->driver;
 	int error = 0;
 	int error = 0;
 
 
-	pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev));
+	pci_fixup_device(pci_fixup_suspend, pci_dev);
 
 
 	if (drv && drv->pm) {
 	if (drv && drv->pm) {
 		if (drv->pm->poweroff) {
 		if (drv->pm->poweroff) {
 			error = drv->pm->poweroff(dev);
 			error = drv->pm->poweroff(dev);
 			suspend_report_result(drv->pm->poweroff, error);
 			suspend_report_result(drv->pm->poweroff, error);
 		}
 		}
-	} else {
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
 		error = pci_legacy_suspend(dev, PMSG_HIBERNATE);
 		error = pci_legacy_suspend(dev, PMSG_HIBERNATE);
 	}
 	}
 
 
@@ -589,8 +613,7 @@ static int pci_pm_poweroff(struct device *dev)
 
 
 static int pci_pm_poweroff_noirq(struct device *dev)
 static int pci_pm_poweroff_noirq(struct device *dev)
 {
 {
-	struct pci_dev *pci_dev = to_pci_dev(dev);
-	struct pci_driver *drv = pci_dev->driver;
+	struct device_driver *drv = dev->driver;
 	int error = 0;
 	int error = 0;
 
 
 	if (drv && drv->pm) {
 	if (drv && drv->pm) {
@@ -598,7 +621,7 @@ static int pci_pm_poweroff_noirq(struct device *dev)
 			error = drv->pm->poweroff_noirq(dev);
 			error = drv->pm->poweroff_noirq(dev);
 			suspend_report_result(drv->pm->poweroff_noirq, error);
 			suspend_report_result(drv->pm->poweroff_noirq, error);
 		}
 		}
-	} else {
+	} else if (pci_has_legacy_pm_support(to_pci_dev(dev))) {
 		error = pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
 		error = pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
 	}
 	}
 
 
@@ -609,13 +632,15 @@ static int pci_pm_restore(struct device *dev)
 {
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct device_driver *drv = dev->driver;
 	struct device_driver *drv = dev->driver;
-	int error;
+	int error = 0;
 
 
 	if (drv && drv->pm) {
 	if (drv && drv->pm) {
-		error = drv->pm->restore ? drv->pm->restore(dev) :
-			pci_default_pm_resume(pci_dev);
-	} else {
+		if (drv->pm->restore)
+			error = drv->pm->restore(dev);
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
 		error = pci_legacy_resume(dev);
 		error = pci_legacy_resume(dev);
+	} else {
+		error = pci_default_pm_resume_late(pci_dev);
 	}
 	}
 	pci_fixup_device(pci_fixup_resume, pci_dev);
 	pci_fixup_device(pci_fixup_resume, pci_dev);
 
 
@@ -625,7 +650,7 @@ static int pci_pm_restore(struct device *dev)
 static int pci_pm_restore_noirq(struct device *dev)
 static int pci_pm_restore_noirq(struct device *dev)
 {
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_dev *pci_dev = to_pci_dev(dev);
-	struct pci_driver *drv = pci_dev->driver;
+	struct device_driver *drv = dev->driver;
 	int error = 0;
 	int error = 0;
 
 
 	pci_fixup_device(pci_fixup_resume, pci_dev);
 	pci_fixup_device(pci_fixup_resume, pci_dev);
@@ -633,8 +658,10 @@ static int pci_pm_restore_noirq(struct device *dev)
 	if (drv && drv->pm) {
 	if (drv && drv->pm) {
 		if (drv->pm->restore_noirq)
 		if (drv->pm->restore_noirq)
 			error = drv->pm->restore_noirq(dev);
 			error = drv->pm->restore_noirq(dev);
-	} else {
+	} else if (pci_has_legacy_pm_support(pci_dev)) {
 		error = pci_legacy_resume_early(dev);
 		error = pci_legacy_resume_early(dev);
+	} else {
+		pci_default_pm_resume_early(pci_dev);
 	}
 	}
 	pci_fixup_device(pci_fixup_resume_early, pci_dev);
 	pci_fixup_device(pci_fixup_resume_early, pci_dev);
 
 
@@ -654,17 +681,15 @@ static int pci_pm_restore_noirq(struct device *dev)
 
 
 #endif /* !CONFIG_HIBERNATION */
 #endif /* !CONFIG_HIBERNATION */
 
 
-struct pm_ext_ops pci_pm_ops = {
-	.base = {
-		.prepare = pci_pm_prepare,
-		.complete = pci_pm_complete,
-		.suspend = pci_pm_suspend,
-		.resume = pci_pm_resume,
-		.freeze = pci_pm_freeze,
-		.thaw = pci_pm_thaw,
-		.poweroff = pci_pm_poweroff,
-		.restore = pci_pm_restore,
-	},
+struct dev_pm_ops pci_dev_pm_ops = {
+	.prepare = pci_pm_prepare,
+	.complete = pci_pm_complete,
+	.suspend = pci_pm_suspend,
+	.resume = pci_pm_resume,
+	.freeze = pci_pm_freeze,
+	.thaw = pci_pm_thaw,
+	.poweroff = pci_pm_poweroff,
+	.restore = pci_pm_restore,
 	.suspend_noirq = pci_pm_suspend_noirq,
 	.suspend_noirq = pci_pm_suspend_noirq,
 	.resume_noirq = pci_pm_resume_noirq,
 	.resume_noirq = pci_pm_resume_noirq,
 	.freeze_noirq = pci_pm_freeze_noirq,
 	.freeze_noirq = pci_pm_freeze_noirq,
@@ -673,7 +698,7 @@ struct pm_ext_ops pci_pm_ops = {
 	.restore_noirq = pci_pm_restore_noirq,
 	.restore_noirq = pci_pm_restore_noirq,
 };
 };
 
 
-#define PCI_PM_OPS_PTR	&pci_pm_ops
+#define PCI_PM_OPS_PTR	(&pci_dev_pm_ops)
 
 
 #else /* !CONFIG_PM_SLEEP */
 #else /* !CONFIG_PM_SLEEP */
 
 
@@ -703,9 +728,6 @@ int __pci_register_driver(struct pci_driver *drv, struct module *owner,
 	drv->driver.owner = owner;
 	drv->driver.owner = owner;
 	drv->driver.mod_name = mod_name;
 	drv->driver.mod_name = mod_name;
 
 
-	if (drv->pm)
-		drv->driver.pm = &drv->pm->base;
-
 	spin_lock_init(&drv->dynids.lock);
 	spin_lock_init(&drv->dynids.lock);
 	INIT_LIST_HEAD(&drv->dynids.list);
 	INIT_LIST_HEAD(&drv->dynids.list);
 
 

+ 3 - 4
drivers/pnp/card.c

@@ -165,8 +165,7 @@ struct pnp_card *pnp_alloc_card(struct pnp_protocol *protocol, int id, char *pnp
 	card->number = id;
 	card->number = id;
 
 
 	card->dev.parent = &card->protocol->dev;
 	card->dev.parent = &card->protocol->dev;
-	sprintf(card->dev.bus_id, "%02x:%02x", card->protocol->number,
-		card->number);
+	dev_set_name(&card->dev, "%02x:%02x", card->protocol->number, card->number);
 
 
 	card->dev.coherent_dma_mask = DMA_24BIT_MASK;
 	card->dev.coherent_dma_mask = DMA_24BIT_MASK;
 	card->dev.dma_mask = &card->dev.coherent_dma_mask;
 	card->dev.dma_mask = &card->dev.coherent_dma_mask;
@@ -295,8 +294,8 @@ int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev)
 {
 {
 	dev->dev.parent = &card->dev;
 	dev->dev.parent = &card->dev;
 	dev->card_link = NULL;
 	dev->card_link = NULL;
-	snprintf(dev->dev.bus_id, BUS_ID_SIZE, "%02x:%02x.%02x",
-		 dev->protocol->number, card->number, dev->number);
+	dev_set_name(&dev->dev, "%02x:%02x.%02x",
+		     dev->protocol->number, card->number, dev->number);
 	spin_lock(&pnp_lock);
 	spin_lock(&pnp_lock);
 	dev->card = card;
 	dev->card = card;
 	list_add_tail(&dev->card_list, &card->devices);
 	list_add_tail(&dev->card_list, &card->devices);

+ 2 - 3
drivers/pnp/core.c

@@ -70,7 +70,7 @@ int pnp_register_protocol(struct pnp_protocol *protocol)
 	spin_unlock(&pnp_lock);
 	spin_unlock(&pnp_lock);
 
 
 	protocol->number = nodenum;
 	protocol->number = nodenum;
-	sprintf(protocol->dev.bus_id, "pnp%d", nodenum);
+	dev_set_name(&protocol->dev, "pnp%d", nodenum);
 	return device_register(&protocol->dev);
 	return device_register(&protocol->dev);
 }
 }
 
 
@@ -145,8 +145,7 @@ struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *protocol, int id, char *pnpid
 	dev->dev.coherent_dma_mask = dev->dma_mask;
 	dev->dev.coherent_dma_mask = dev->dma_mask;
 	dev->dev.release = &pnp_release_device;
 	dev->dev.release = &pnp_release_device;
 
 
-	sprintf(dev->dev.bus_id, "%02x:%02x", dev->protocol->number,
-		dev->number);
+	dev_set_name(&dev->dev, "%02x:%02x", dev->protocol->number, dev->number);
 
 
 	dev_id = pnp_add_id(dev, pnpid);
 	dev_id = pnp_add_id(dev, pnpid);
 	if (!dev_id) {
 	if (!dev_id) {

+ 1 - 1
drivers/pnp/system.c

@@ -26,7 +26,7 @@ static void reserve_range(struct pnp_dev *dev, resource_size_t start,
 			  resource_size_t end, int port)
 			  resource_size_t end, int port)
 {
 {
 	char *regionid;
 	char *regionid;
-	const char *pnpid = dev->dev.bus_id;
+	const char *pnpid = dev_name(&dev->dev);
 	struct resource *res;
 	struct resource *res;
 
 
 	regionid = kmalloc(16, GFP_KERNEL);
 	regionid = kmalloc(16, GFP_KERNEL);

+ 2 - 2
drivers/power/ds2760_battery.c

@@ -354,7 +354,7 @@ static int ds2760_battery_probe(struct platform_device *pdev)
 	pdata = pdev->dev.platform_data;
 	pdata = pdev->dev.platform_data;
 	di->dev		= &pdev->dev;
 	di->dev		= &pdev->dev;
 	di->w1_dev	     = pdev->dev.parent;
 	di->w1_dev	     = pdev->dev.parent;
-	di->bat.name	   = pdev->dev.bus_id;
+	di->bat.name	   = dev_name(&pdev->dev);
 	di->bat.type	   = POWER_SUPPLY_TYPE_BATTERY;
 	di->bat.type	   = POWER_SUPPLY_TYPE_BATTERY;
 	di->bat.properties     = ds2760_battery_props;
 	di->bat.properties     = ds2760_battery_props;
 	di->bat.num_properties = ARRAY_SIZE(ds2760_battery_props);
 	di->bat.num_properties = ARRAY_SIZE(ds2760_battery_props);
@@ -371,7 +371,7 @@ static int ds2760_battery_probe(struct platform_device *pdev)
 	}
 	}
 
 
 	INIT_DELAYED_WORK(&di->monitor_work, ds2760_battery_work);
 	INIT_DELAYED_WORK(&di->monitor_work, ds2760_battery_work);
-	di->monitor_wqueue = create_singlethread_workqueue(pdev->dev.bus_id);
+	di->monitor_wqueue = create_singlethread_workqueue(dev_name(&pdev->dev));
 	if (!di->monitor_wqueue) {
 	if (!di->monitor_wqueue) {
 		retval = -ESRCH;
 		retval = -ESRCH;
 		goto workqueue_failed;
 		goto workqueue_failed;

+ 1 - 1
drivers/s390/Makefile

@@ -4,7 +4,7 @@
 
 
 CFLAGS_sysinfo.o += -Iinclude/math-emu -Iarch/s390/math-emu -w
 CFLAGS_sysinfo.o += -Iinclude/math-emu -Iarch/s390/math-emu -w
 
 
-obj-y += s390mach.o sysinfo.o s390_rdev.o
+obj-y += s390mach.o sysinfo.o
 obj-y += cio/ block/ char/ crypto/ net/ scsi/ kvm/
 obj-y += cio/ block/ char/ crypto/ net/ scsi/ kvm/
 
 
 drivers-y += drivers/s390/built-in.o
 drivers-y += drivers/s390/built-in.o

+ 5 - 6
drivers/s390/block/dcssblk.c

@@ -18,7 +18,6 @@
 #include <asm/io.h>
 #include <asm/io.h>
 #include <linux/completion.h>
 #include <linux/completion.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
-#include <asm/s390_rdev.h>
 
 
 #define DCSSBLK_NAME "dcssblk"
 #define DCSSBLK_NAME "dcssblk"
 #define DCSSBLK_MINORS_PER_DISK 1
 #define DCSSBLK_MINORS_PER_DISK 1
@@ -946,7 +945,7 @@ dcssblk_check_params(void)
 static void __exit
 static void __exit
 dcssblk_exit(void)
 dcssblk_exit(void)
 {
 {
-	s390_root_dev_unregister(dcssblk_root_dev);
+	root_device_unregister(dcssblk_root_dev);
 	unregister_blkdev(dcssblk_major, DCSSBLK_NAME);
 	unregister_blkdev(dcssblk_major, DCSSBLK_NAME);
 }
 }
 
 
@@ -955,22 +954,22 @@ dcssblk_init(void)
 {
 {
 	int rc;
 	int rc;
 
 
-	dcssblk_root_dev = s390_root_dev_register("dcssblk");
+	dcssblk_root_dev = root_device_register("dcssblk");
 	if (IS_ERR(dcssblk_root_dev))
 	if (IS_ERR(dcssblk_root_dev))
 		return PTR_ERR(dcssblk_root_dev);
 		return PTR_ERR(dcssblk_root_dev);
 	rc = device_create_file(dcssblk_root_dev, &dev_attr_add);
 	rc = device_create_file(dcssblk_root_dev, &dev_attr_add);
 	if (rc) {
 	if (rc) {
-		s390_root_dev_unregister(dcssblk_root_dev);
+		root_device_unregister(dcssblk_root_dev);
 		return rc;
 		return rc;
 	}
 	}
 	rc = device_create_file(dcssblk_root_dev, &dev_attr_remove);
 	rc = device_create_file(dcssblk_root_dev, &dev_attr_remove);
 	if (rc) {
 	if (rc) {
-		s390_root_dev_unregister(dcssblk_root_dev);
+		root_device_unregister(dcssblk_root_dev);
 		return rc;
 		return rc;
 	}
 	}
 	rc = register_blkdev(0, DCSSBLK_NAME);
 	rc = register_blkdev(0, DCSSBLK_NAME);
 	if (rc < 0) {
 	if (rc < 0) {
-		s390_root_dev_unregister(dcssblk_root_dev);
+		root_device_unregister(dcssblk_root_dev);
 		return rc;
 		return rc;
 	}
 	}
 	dcssblk_major = rc;
 	dcssblk_major = rc;

+ 3 - 4
drivers/s390/crypto/ap_bus.c

@@ -36,7 +36,6 @@
 #include <linux/notifier.h>
 #include <linux/notifier.h>
 #include <linux/kthread.h>
 #include <linux/kthread.h>
 #include <linux/mutex.h>
 #include <linux/mutex.h>
-#include <asm/s390_rdev.h>
 #include <asm/reset.h>
 #include <asm/reset.h>
 #include <asm/airq.h>
 #include <asm/airq.h>
 #include <asm/atomic.h>
 #include <asm/atomic.h>
@@ -1522,7 +1521,7 @@ int __init ap_module_init(void)
 	}
 	}
 
 
 	/* Create /sys/devices/ap. */
 	/* Create /sys/devices/ap. */
-	ap_root_device = s390_root_dev_register("ap");
+	ap_root_device = root_device_register("ap");
 	rc = IS_ERR(ap_root_device) ? PTR_ERR(ap_root_device) : 0;
 	rc = IS_ERR(ap_root_device) ? PTR_ERR(ap_root_device) : 0;
 	if (rc)
 	if (rc)
 		goto out_bus;
 		goto out_bus;
@@ -1565,7 +1564,7 @@ out_work:
 	hrtimer_cancel(&ap_poll_timer);
 	hrtimer_cancel(&ap_poll_timer);
 	destroy_workqueue(ap_work_queue);
 	destroy_workqueue(ap_work_queue);
 out_root:
 out_root:
-	s390_root_dev_unregister(ap_root_device);
+	root_device_unregister(ap_root_device);
 out_bus:
 out_bus:
 	while (i--)
 	while (i--)
 		bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
 		bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
@@ -1600,7 +1599,7 @@ void ap_module_exit(void)
 	hrtimer_cancel(&ap_poll_timer);
 	hrtimer_cancel(&ap_poll_timer);
 	destroy_workqueue(ap_work_queue);
 	destroy_workqueue(ap_work_queue);
 	tasklet_kill(&ap_tasklet);
 	tasklet_kill(&ap_tasklet);
-	s390_root_dev_unregister(ap_root_device);
+	root_device_unregister(ap_root_device);
 	while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
 	while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
 		    __ap_match_all)))
 		    __ap_match_all)))
 	{
 	{

+ 2 - 3
drivers/s390/kvm/kvm_virtio.c

@@ -24,7 +24,6 @@
 #include <asm/kvm_virtio.h>
 #include <asm/kvm_virtio.h>
 #include <asm/setup.h>
 #include <asm/setup.h>
 #include <asm/s390_ext.h>
 #include <asm/s390_ext.h>
-#include <asm/s390_rdev.h>
 
 
 #define VIRTIO_SUBCODE_64 0x0D00
 #define VIRTIO_SUBCODE_64 0x0D00
 
 
@@ -335,7 +334,7 @@ static int __init kvm_devices_init(void)
 	if (!MACHINE_IS_KVM)
 	if (!MACHINE_IS_KVM)
 		return -ENODEV;
 		return -ENODEV;
 
 
-	kvm_root = s390_root_dev_register("kvm_s390");
+	kvm_root = root_device_register("kvm_s390");
 	if (IS_ERR(kvm_root)) {
 	if (IS_ERR(kvm_root)) {
 		rc = PTR_ERR(kvm_root);
 		rc = PTR_ERR(kvm_root);
 		printk(KERN_ERR "Could not register kvm_s390 root device");
 		printk(KERN_ERR "Could not register kvm_s390 root device");
@@ -344,7 +343,7 @@ static int __init kvm_devices_init(void)
 
 
 	rc = vmem_add_mapping(real_memory_size, PAGE_SIZE);
 	rc = vmem_add_mapping(real_memory_size, PAGE_SIZE);
 	if (rc) {
 	if (rc) {
-		s390_root_dev_unregister(kvm_root);
+		root_device_unregister(kvm_root);
 		return rc;
 		return rc;
 	}
 	}
 
 

+ 3 - 4
drivers/s390/net/cu3088.c

@@ -25,7 +25,6 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/err.h>
 #include <linux/err.h>
 
 
-#include <asm/s390_rdev.h>
 #include <asm/ccwdev.h>
 #include <asm/ccwdev.h>
 #include <asm/ccwgroup.h>
 #include <asm/ccwgroup.h>
 
 
@@ -120,12 +119,12 @@ cu3088_init (void)
 {
 {
 	int rc;
 	int rc;
 
 
-	cu3088_root_dev = s390_root_dev_register("cu3088");
+	cu3088_root_dev = root_device_register("cu3088");
 	if (IS_ERR(cu3088_root_dev))
 	if (IS_ERR(cu3088_root_dev))
 		return PTR_ERR(cu3088_root_dev);
 		return PTR_ERR(cu3088_root_dev);
 	rc = ccw_driver_register(&cu3088_driver);
 	rc = ccw_driver_register(&cu3088_driver);
 	if (rc)
 	if (rc)
-		s390_root_dev_unregister(cu3088_root_dev);
+		root_device_unregister(cu3088_root_dev);
 
 
 	return rc;
 	return rc;
 }
 }
@@ -134,7 +133,7 @@ static void __exit
 cu3088_exit (void)
 cu3088_exit (void)
 {
 {
 	ccw_driver_unregister(&cu3088_driver);
 	ccw_driver_unregister(&cu3088_driver);
-	s390_root_dev_unregister(cu3088_root_dev);
+	root_device_unregister(cu3088_root_dev);
 }
 }
 
 
 MODULE_DEVICE_TABLE(ccw,cu3088_ids);
 MODULE_DEVICE_TABLE(ccw,cu3088_ids);

+ 3 - 4
drivers/s390/net/qeth_core_main.c

@@ -24,7 +24,6 @@
 
 
 #include <asm/ebcdic.h>
 #include <asm/ebcdic.h>
 #include <asm/io.h>
 #include <asm/io.h>
-#include <asm/s390_rdev.h>
 
 
 #include "qeth_core.h"
 #include "qeth_core.h"
 #include "qeth_core_offl.h"
 #include "qeth_core_offl.h"
@@ -4525,7 +4524,7 @@ static int __init qeth_core_init(void)
 				&driver_attr_group);
 				&driver_attr_group);
 	if (rc)
 	if (rc)
 		goto driver_err;
 		goto driver_err;
-	qeth_core_root_dev = s390_root_dev_register("qeth");
+	qeth_core_root_dev = root_device_register("qeth");
 	rc = IS_ERR(qeth_core_root_dev) ? PTR_ERR(qeth_core_root_dev) : 0;
 	rc = IS_ERR(qeth_core_root_dev) ? PTR_ERR(qeth_core_root_dev) : 0;
 	if (rc)
 	if (rc)
 		goto register_err;
 		goto register_err;
@@ -4539,7 +4538,7 @@ static int __init qeth_core_init(void)
 
 
 	return 0;
 	return 0;
 slab_err:
 slab_err:
-	s390_root_dev_unregister(qeth_core_root_dev);
+	root_device_unregister(qeth_core_root_dev);
 register_err:
 register_err:
 	driver_remove_file(&qeth_core_ccwgroup_driver.driver,
 	driver_remove_file(&qeth_core_ccwgroup_driver.driver,
 			   &driver_attr_group);
 			   &driver_attr_group);
@@ -4557,7 +4556,7 @@ out_err:
 
 
 static void __exit qeth_core_exit(void)
 static void __exit qeth_core_exit(void)
 {
 {
-	s390_root_dev_unregister(qeth_core_root_dev);
+	root_device_unregister(qeth_core_root_dev);
 	driver_remove_file(&qeth_core_ccwgroup_driver.driver,
 	driver_remove_file(&qeth_core_ccwgroup_driver.driver,
 			   &driver_attr_group);
 			   &driver_attr_group);
 	ccwgroup_driver_unregister(&qeth_core_ccwgroup_driver);
 	ccwgroup_driver_unregister(&qeth_core_ccwgroup_driver);

+ 0 - 2
drivers/s390/net/qeth_l2_main.c

@@ -20,8 +20,6 @@
 #include <linux/mii.h>
 #include <linux/mii.h>
 #include <linux/ip.h>
 #include <linux/ip.h>
 
 
-#include <asm/s390_rdev.h>
-
 #include "qeth_core.h"
 #include "qeth_core.h"
 #include "qeth_core_offl.h"
 #include "qeth_core_offl.h"
 
 

+ 0 - 2
drivers/s390/net/qeth_l3_main.c

@@ -26,8 +26,6 @@
 #include <net/ip.h>
 #include <net/ip.h>
 #include <net/arp.h>
 #include <net/arp.h>
 
 
-#include <asm/s390_rdev.h>
-
 #include "qeth_l3.h"
 #include "qeth_l3.h"
 #include "qeth_core_offl.h"
 #include "qeth_core_offl.h"
 
 

+ 0 - 51
drivers/s390/s390_rdev.c

@@ -1,51 +0,0 @@
-/*
- *  drivers/s390/s390_rdev.c
- *  s390 root device
- *
- *    Copyright (C) 2002, 2005 IBM Deutschland Entwicklung GmbH,
- *			 IBM Corporation
- *    Author(s): Cornelia Huck (cornelia.huck@de.ibm.com)
- *		  Carsten Otte  (cotte@de.ibm.com)
- */
-
-#include <linux/slab.h>
-#include <linux/err.h>
-#include <linux/device.h>
-#include <asm/s390_rdev.h>
-
-static void
-s390_root_dev_release(struct device *dev)
-{
-	kfree(dev);
-}
-
-struct device *
-s390_root_dev_register(const char *name)
-{
-	struct device *dev;
-	int ret;
-
-	if (!strlen(name))
-		return ERR_PTR(-EINVAL);
-	dev = kzalloc(sizeof(struct device), GFP_KERNEL);
-	if (!dev)
-		return ERR_PTR(-ENOMEM);
-	dev_set_name(dev, name);
-	dev->release = s390_root_dev_release;
-	ret = device_register(dev);
-	if (ret) {
-		kfree(dev);
-		return ERR_PTR(ret);
-	}
-	return dev;
-}
-
-void
-s390_root_dev_unregister(struct device *dev)
-{
-	if (dev)
-		device_unregister(dev);
-}
-
-EXPORT_SYMBOL(s390_root_dev_register);
-EXPORT_SYMBOL(s390_root_dev_unregister);

+ 2 - 2
drivers/serial/serial_core.c

@@ -2030,7 +2030,7 @@ int uart_suspend_port(struct uart_driver *drv, struct uart_port *port)
 		if (!tries)
 		if (!tries)
 			printk(KERN_ERR "%s%s%s%d: Unable to drain "
 			printk(KERN_ERR "%s%s%s%d: Unable to drain "
 					"transmitter\n",
 					"transmitter\n",
-			       port->dev ? port->dev->bus_id : "",
+			       port->dev ? dev_name(port->dev) : "",
 			       port->dev ? ": " : "",
 			       port->dev ? ": " : "",
 			       drv->dev_name,
 			       drv->dev_name,
 			       drv->tty_driver->name_base + port->line);
 			       drv->tty_driver->name_base + port->line);
@@ -2156,7 +2156,7 @@ uart_report_port(struct uart_driver *drv, struct uart_port *port)
 	}
 	}
 
 
 	printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
 	printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
-	       port->dev ? port->dev->bus_id : "",
+	       port->dev ? dev_name(port->dev) : "",
 	       port->dev ? ": " : "",
 	       port->dev ? ": " : "",
 	       drv->dev_name,
 	       drv->dev_name,
 	       drv->tty_driver->name_base + port->line,
 	       drv->tty_driver->name_base + port->line,

+ 9 - 11
drivers/spi/spi.c

@@ -47,7 +47,7 @@ modalias_show(struct device *dev, struct device_attribute *a, char *buf)
 {
 {
 	const struct spi_device	*spi = to_spi_device(dev);
 	const struct spi_device	*spi = to_spi_device(dev);
 
 
-	return snprintf(buf, BUS_ID_SIZE + 1, "%s\n", spi->modalias);
+	return sprintf(buf, "%s\n", spi->modalias);
 }
 }
 
 
 static struct device_attribute spi_dev_attrs[] = {
 static struct device_attribute spi_dev_attrs[] = {
@@ -63,7 +63,7 @@ static int spi_match_device(struct device *dev, struct device_driver *drv)
 {
 {
 	const struct spi_device	*spi = to_spi_device(dev);
 	const struct spi_device	*spi = to_spi_device(dev);
 
 
-	return strncmp(spi->modalias, drv->name, BUS_ID_SIZE) == 0;
+	return strcmp(spi->modalias, drv->name) == 0;
 }
 }
 
 
 static int spi_uevent(struct device *dev, struct kobj_uevent_env *env)
 static int spi_uevent(struct device *dev, struct kobj_uevent_env *env)
@@ -243,8 +243,7 @@ int spi_add_device(struct spi_device *spi)
 	}
 	}
 
 
 	/* Set the bus ID string */
 	/* Set the bus ID string */
-	snprintf(spi->dev.bus_id, sizeof spi->dev.bus_id,
-			"%s.%u", spi->master->dev.bus_id,
+	dev_set_name(&spi->dev, "%s.%u", dev_name(&spi->master->dev),
 			spi->chip_select);
 			spi->chip_select);
 
 
 
 
@@ -254,7 +253,7 @@ int spi_add_device(struct spi_device *spi)
 	 */
 	 */
 	mutex_lock(&spi_add_lock);
 	mutex_lock(&spi_add_lock);
 
 
-	if (bus_find_device_by_name(&spi_bus_type, NULL, spi->dev.bus_id)
+	if (bus_find_device_by_name(&spi_bus_type, NULL, dev_name(&spi->dev))
 			!= NULL) {
 			!= NULL) {
 		dev_err(dev, "chipselect %d already in use\n",
 		dev_err(dev, "chipselect %d already in use\n",
 				spi->chip_select);
 				spi->chip_select);
@@ -269,7 +268,7 @@ int spi_add_device(struct spi_device *spi)
 	status = spi->master->setup(spi);
 	status = spi->master->setup(spi);
 	if (status < 0) {
 	if (status < 0) {
 		dev_err(dev, "can't %s %s, status %d\n",
 		dev_err(dev, "can't %s %s, status %d\n",
-				"setup", spi->dev.bus_id, status);
+				"setup", dev_name(&spi->dev), status);
 		goto done;
 		goto done;
 	}
 	}
 
 
@@ -277,9 +276,9 @@ int spi_add_device(struct spi_device *spi)
 	status = device_add(&spi->dev);
 	status = device_add(&spi->dev);
 	if (status < 0)
 	if (status < 0)
 		dev_err(dev, "can't %s %s, status %d\n",
 		dev_err(dev, "can't %s %s, status %d\n",
-				"add", spi->dev.bus_id, status);
+				"add", dev_name(&spi->dev), status);
 	else
 	else
-		dev_dbg(dev, "registered child %s\n", spi->dev.bus_id);
+		dev_dbg(dev, "registered child %s\n", dev_name(&spi->dev));
 
 
 done:
 done:
 	mutex_unlock(&spi_add_lock);
 	mutex_unlock(&spi_add_lock);
@@ -504,12 +503,11 @@ int spi_register_master(struct spi_master *master)
 	/* register the device, then userspace will see it.
 	/* register the device, then userspace will see it.
 	 * registration fails if the bus ID is in use.
 	 * registration fails if the bus ID is in use.
 	 */
 	 */
-	snprintf(master->dev.bus_id, sizeof master->dev.bus_id,
-		"spi%u", master->bus_num);
+	dev_set_name(&master->dev, "spi%u", master->bus_num);
 	status = device_add(&master->dev);
 	status = device_add(&master->dev);
 	if (status < 0)
 	if (status < 0)
 		goto done;
 		goto done;
-	dev_dbg(dev, "registered master %s%s\n", master->dev.bus_id,
+	dev_dbg(dev, "registered master %s%s\n", dev_name(&master->dev),
 			dynamic ? " (dynamic)" : "");
 			dynamic ? " (dynamic)" : "");
 
 
 	/* populate children from any spi device tables */
 	/* populate children from any spi device tables */

+ 1 - 1
drivers/spi/spi_bitbang.c

@@ -475,7 +475,7 @@ int spi_bitbang_start(struct spi_bitbang *bitbang)
 	/* this task is the only thing to touch the SPI bits */
 	/* this task is the only thing to touch the SPI bits */
 	bitbang->busy = 0;
 	bitbang->busy = 0;
 	bitbang->workqueue = create_singlethread_workqueue(
 	bitbang->workqueue = create_singlethread_workqueue(
-			bitbang->master->dev.parent->bus_id);
+			dev_name(bitbang->master->dev.parent));
 	if (bitbang->workqueue == NULL) {
 	if (bitbang->workqueue == NULL) {
 		status = -EBUSY;
 		status = -EBUSY;
 		goto err1;
 		goto err1;

+ 1 - 1
drivers/spi/spi_butterfly.c

@@ -287,7 +287,7 @@ static void butterfly_attach(struct parport *p)
 	pp->dataflash = spi_new_device(pp->bitbang.master, &pp->info[0]);
 	pp->dataflash = spi_new_device(pp->bitbang.master, &pp->info[0]);
 	if (pp->dataflash)
 	if (pp->dataflash)
 		pr_debug("%s: dataflash at %s\n", p->name,
 		pr_debug("%s: dataflash at %s\n", p->name,
-				pp->dataflash->dev.bus_id);
+				dev_name(&pp->dataflash->dev));
 
 
 	// dev_info(_what?_, ...)
 	// dev_info(_what?_, ...)
 	pr_info("%s: AVR Butterfly\n", p->name);
 	pr_info("%s: AVR Butterfly\n", p->name);

+ 1 - 1
drivers/spi/spi_lm70llp.c

@@ -287,7 +287,7 @@ static void spi_lm70llp_attach(struct parport *p)
 	pp->spidev_lm70 = spi_new_device(pp->bitbang.master, &pp->info);
 	pp->spidev_lm70 = spi_new_device(pp->bitbang.master, &pp->info);
 	if (pp->spidev_lm70)
 	if (pp->spidev_lm70)
 		dev_dbg(&pp->spidev_lm70->dev, "spidev_lm70 at %s\n",
 		dev_dbg(&pp->spidev_lm70->dev, "spidev_lm70 at %s\n",
-				pp->spidev_lm70->dev.bus_id);
+				dev_name(&pp->spidev_lm70->dev));
 	else {
 	else {
 		printk(KERN_WARNING "%s: spi_new_device failed\n", DRVNAME);
 		printk(KERN_WARNING "%s: spi_new_device failed\n", DRVNAME);
 		status = -ENODEV;
 		status = -ENODEV;

+ 3 - 3
drivers/thermal/thermal_sys.c

@@ -579,7 +579,7 @@ static void thermal_release(struct device *dev)
 	struct thermal_zone_device *tz;
 	struct thermal_zone_device *tz;
 	struct thermal_cooling_device *cdev;
 	struct thermal_cooling_device *cdev;
 
 
-	if (!strncmp(dev->bus_id, "thermal_zone", sizeof "thermal_zone" - 1)) {
+	if (!strncmp(dev_name(dev), "thermal_zone", sizeof "thermal_zone" - 1)) {
 		tz = to_thermal_zone(dev);
 		tz = to_thermal_zone(dev);
 		kfree(tz);
 		kfree(tz);
 	} else {
 	} else {
@@ -630,7 +630,7 @@ struct thermal_cooling_device *thermal_cooling_device_register(char *type,
 	cdev->ops = ops;
 	cdev->ops = ops;
 	cdev->device.class = &thermal_class;
 	cdev->device.class = &thermal_class;
 	cdev->devdata = devdata;
 	cdev->devdata = devdata;
-	sprintf(cdev->device.bus_id, "cooling_device%d", cdev->id);
+	dev_set_name(&cdev->device, "cooling_device%d", cdev->id);
 	result = device_register(&cdev->device);
 	result = device_register(&cdev->device);
 	if (result) {
 	if (result) {
 		release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id);
 		release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id);
@@ -769,7 +769,7 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
 	tz->device.class = &thermal_class;
 	tz->device.class = &thermal_class;
 	tz->devdata = devdata;
 	tz->devdata = devdata;
 	tz->trips = trips;
 	tz->trips = trips;
-	sprintf(tz->device.bus_id, "thermal_zone%d", tz->id);
+	dev_set_name(&tz->device, "thermal_zone%d", tz->id);
 	result = device_register(&tz->device);
 	result = device_register(&tz->device);
 	if (result) {
 	if (result) {
 		release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
 		release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);

+ 142 - 17
drivers/uio/uio.c

@@ -35,6 +35,7 @@ struct uio_device {
 	int			vma_count;
 	int			vma_count;
 	struct uio_info		*info;
 	struct uio_info		*info;
 	struct kobject		*map_dir;
 	struct kobject		*map_dir;
+	struct kobject		*portio_dir;
 };
 };
 
 
 static int uio_major;
 static int uio_major;
@@ -75,17 +76,17 @@ static ssize_t map_offset_show(struct uio_mem *mem, char *buf)
 	return sprintf(buf, "0x%lx\n", mem->addr & ~PAGE_MASK);
 	return sprintf(buf, "0x%lx\n", mem->addr & ~PAGE_MASK);
 }
 }
 
 
-struct uio_sysfs_entry {
+struct map_sysfs_entry {
 	struct attribute attr;
 	struct attribute attr;
 	ssize_t (*show)(struct uio_mem *, char *);
 	ssize_t (*show)(struct uio_mem *, char *);
 	ssize_t (*store)(struct uio_mem *, const char *, size_t);
 	ssize_t (*store)(struct uio_mem *, const char *, size_t);
 };
 };
 
 
-static struct uio_sysfs_entry addr_attribute =
+static struct map_sysfs_entry addr_attribute =
 	__ATTR(addr, S_IRUGO, map_addr_show, NULL);
 	__ATTR(addr, S_IRUGO, map_addr_show, NULL);
-static struct uio_sysfs_entry size_attribute =
+static struct map_sysfs_entry size_attribute =
 	__ATTR(size, S_IRUGO, map_size_show, NULL);
 	__ATTR(size, S_IRUGO, map_size_show, NULL);
-static struct uio_sysfs_entry offset_attribute =
+static struct map_sysfs_entry offset_attribute =
 	__ATTR(offset, S_IRUGO, map_offset_show, NULL);
 	__ATTR(offset, S_IRUGO, map_offset_show, NULL);
 
 
 static struct attribute *attrs[] = {
 static struct attribute *attrs[] = {
@@ -106,9 +107,9 @@ static ssize_t map_type_show(struct kobject *kobj, struct attribute *attr,
 {
 {
 	struct uio_map *map = to_map(kobj);
 	struct uio_map *map = to_map(kobj);
 	struct uio_mem *mem = map->mem;
 	struct uio_mem *mem = map->mem;
-	struct uio_sysfs_entry *entry;
+	struct map_sysfs_entry *entry;
 
 
-	entry = container_of(attr, struct uio_sysfs_entry, attr);
+	entry = container_of(attr, struct map_sysfs_entry, attr);
 
 
 	if (!entry->show)
 	if (!entry->show)
 		return -EIO;
 		return -EIO;
@@ -116,16 +117,93 @@ static ssize_t map_type_show(struct kobject *kobj, struct attribute *attr,
 	return entry->show(mem, buf);
 	return entry->show(mem, buf);
 }
 }
 
 
-static struct sysfs_ops uio_sysfs_ops = {
+static struct sysfs_ops map_sysfs_ops = {
 	.show = map_type_show,
 	.show = map_type_show,
 };
 };
 
 
 static struct kobj_type map_attr_type = {
 static struct kobj_type map_attr_type = {
 	.release	= map_release,
 	.release	= map_release,
-	.sysfs_ops	= &uio_sysfs_ops,
+	.sysfs_ops	= &map_sysfs_ops,
 	.default_attrs	= attrs,
 	.default_attrs	= attrs,
 };
 };
 
 
+struct uio_portio {
+	struct kobject kobj;
+	struct uio_port *port;
+};
+#define to_portio(portio) container_of(portio, struct uio_portio, kobj)
+
+static ssize_t portio_start_show(struct uio_port *port, char *buf)
+{
+	return sprintf(buf, "0x%lx\n", port->start);
+}
+
+static ssize_t portio_size_show(struct uio_port *port, char *buf)
+{
+	return sprintf(buf, "0x%lx\n", port->size);
+}
+
+static ssize_t portio_porttype_show(struct uio_port *port, char *buf)
+{
+	const char *porttypes[] = {"none", "x86", "gpio", "other"};
+
+	if ((port->porttype < 0) || (port->porttype > UIO_PORT_OTHER))
+		return -EINVAL;
+
+	return sprintf(buf, "port_%s\n", porttypes[port->porttype]);
+}
+
+struct portio_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct uio_port *, char *);
+	ssize_t (*store)(struct uio_port *, const char *, size_t);
+};
+
+static struct portio_sysfs_entry portio_start_attribute =
+	__ATTR(start, S_IRUGO, portio_start_show, NULL);
+static struct portio_sysfs_entry portio_size_attribute =
+	__ATTR(size, S_IRUGO, portio_size_show, NULL);
+static struct portio_sysfs_entry portio_porttype_attribute =
+	__ATTR(porttype, S_IRUGO, portio_porttype_show, NULL);
+
+static struct attribute *portio_attrs[] = {
+	&portio_start_attribute.attr,
+	&portio_size_attribute.attr,
+	&portio_porttype_attribute.attr,
+	NULL,
+};
+
+static void portio_release(struct kobject *kobj)
+{
+	struct uio_portio *portio = to_portio(kobj);
+	kfree(portio);
+}
+
+static ssize_t portio_type_show(struct kobject *kobj, struct attribute *attr,
+			     char *buf)
+{
+	struct uio_portio *portio = to_portio(kobj);
+	struct uio_port *port = portio->port;
+	struct portio_sysfs_entry *entry;
+
+	entry = container_of(attr, struct portio_sysfs_entry, attr);
+
+	if (!entry->show)
+		return -EIO;
+
+	return entry->show(port, buf);
+}
+
+static struct sysfs_ops portio_sysfs_ops = {
+	.show = portio_type_show,
+};
+
+static struct kobj_type portio_attr_type = {
+	.release	= portio_release,
+	.sysfs_ops	= &portio_sysfs_ops,
+	.default_attrs	= portio_attrs,
+};
+
 static ssize_t show_name(struct device *dev,
 static ssize_t show_name(struct device *dev,
 			 struct device_attribute *attr, char *buf)
 			 struct device_attribute *attr, char *buf)
 {
 {
@@ -177,10 +255,13 @@ static struct attribute_group uio_attr_grp = {
 static int uio_dev_add_attributes(struct uio_device *idev)
 static int uio_dev_add_attributes(struct uio_device *idev)
 {
 {
 	int ret;
 	int ret;
-	int mi;
+	int mi, pi;
 	int map_found = 0;
 	int map_found = 0;
+	int portio_found = 0;
 	struct uio_mem *mem;
 	struct uio_mem *mem;
 	struct uio_map *map;
 	struct uio_map *map;
+	struct uio_port *port;
+	struct uio_portio *portio;
 
 
 	ret = sysfs_create_group(&idev->dev->kobj, &uio_attr_grp);
 	ret = sysfs_create_group(&idev->dev->kobj, &uio_attr_grp);
 	if (ret)
 	if (ret)
@@ -195,25 +276,58 @@ static int uio_dev_add_attributes(struct uio_device *idev)
 			idev->map_dir = kobject_create_and_add("maps",
 			idev->map_dir = kobject_create_and_add("maps",
 							&idev->dev->kobj);
 							&idev->dev->kobj);
 			if (!idev->map_dir)
 			if (!idev->map_dir)
-				goto err;
+				goto err_map;
 		}
 		}
 		map = kzalloc(sizeof(*map), GFP_KERNEL);
 		map = kzalloc(sizeof(*map), GFP_KERNEL);
 		if (!map)
 		if (!map)
-			goto err;
+			goto err_map;
 		kobject_init(&map->kobj, &map_attr_type);
 		kobject_init(&map->kobj, &map_attr_type);
 		map->mem = mem;
 		map->mem = mem;
 		mem->map = map;
 		mem->map = map;
 		ret = kobject_add(&map->kobj, idev->map_dir, "map%d", mi);
 		ret = kobject_add(&map->kobj, idev->map_dir, "map%d", mi);
 		if (ret)
 		if (ret)
-			goto err;
+			goto err_map;
 		ret = kobject_uevent(&map->kobj, KOBJ_ADD);
 		ret = kobject_uevent(&map->kobj, KOBJ_ADD);
 		if (ret)
 		if (ret)
-			goto err;
+			goto err_map;
+	}
+
+	for (pi = 0; pi < MAX_UIO_PORT_REGIONS; pi++) {
+		port = &idev->info->port[pi];
+		if (port->size == 0)
+			break;
+		if (!portio_found) {
+			portio_found = 1;
+			idev->portio_dir = kobject_create_and_add("portio",
+							&idev->dev->kobj);
+			if (!idev->portio_dir)
+				goto err_portio;
+		}
+		portio = kzalloc(sizeof(*portio), GFP_KERNEL);
+		if (!portio)
+			goto err_portio;
+		kobject_init(&portio->kobj, &portio_attr_type);
+		portio->port = port;
+		port->portio = portio;
+		ret = kobject_add(&portio->kobj, idev->portio_dir,
+							"port%d", pi);
+		if (ret)
+			goto err_portio;
+		ret = kobject_uevent(&portio->kobj, KOBJ_ADD);
+		if (ret)
+			goto err_portio;
 	}
 	}
 
 
 	return 0;
 	return 0;
 
 
-err:
+err_portio:
+	for (pi--; pi >= 0; pi--) {
+		port = &idev->info->port[pi];
+		portio = port->portio;
+		kobject_put(&portio->kobj);
+	}
+	kobject_put(idev->portio_dir);
+err_map:
 	for (mi--; mi>=0; mi--) {
 	for (mi--; mi>=0; mi--) {
 		mem = &idev->info->mem[mi];
 		mem = &idev->info->mem[mi];
 		map = mem->map;
 		map = mem->map;
@@ -228,15 +342,26 @@ err_group:
 
 
 static void uio_dev_del_attributes(struct uio_device *idev)
 static void uio_dev_del_attributes(struct uio_device *idev)
 {
 {
-	int mi;
+	int i;
 	struct uio_mem *mem;
 	struct uio_mem *mem;
-	for (mi = 0; mi < MAX_UIO_MAPS; mi++) {
-		mem = &idev->info->mem[mi];
+	struct uio_port *port;
+
+	for (i = 0; i < MAX_UIO_MAPS; i++) {
+		mem = &idev->info->mem[i];
 		if (mem->size == 0)
 		if (mem->size == 0)
 			break;
 			break;
 		kobject_put(&mem->map->kobj);
 		kobject_put(&mem->map->kobj);
 	}
 	}
 	kobject_put(idev->map_dir);
 	kobject_put(idev->map_dir);
+
+	for (i = 0; i < MAX_UIO_PORT_REGIONS; i++) {
+		port = &idev->info->port[i];
+		if (port->size == 0)
+			break;
+		kobject_put(&port->portio->kobj);
+	}
+	kobject_put(idev->portio_dir);
+
 	sysfs_remove_group(&idev->dev->kobj, &uio_attr_grp);
 	sysfs_remove_group(&idev->dev->kobj, &uio_attr_grp);
 }
 }
 
 

+ 1 - 2
drivers/uio/uio_cif.c

@@ -57,8 +57,7 @@ static int __devinit hilscher_pci_probe(struct pci_dev *dev,
 	info->mem[0].addr = pci_resource_start(dev, 0);
 	info->mem[0].addr = pci_resource_start(dev, 0);
 	if (!info->mem[0].addr)
 	if (!info->mem[0].addr)
 		goto out_release;
 		goto out_release;
-	info->mem[0].internal_addr = ioremap(pci_resource_start(dev, 0),
-					     pci_resource_len(dev, 0));
+	info->mem[0].internal_addr = pci_ioremap_bar(dev, 0);
 	if (!info->mem[0].internal_addr)
 	if (!info->mem[0].internal_addr)
 		goto out_release;
 		goto out_release;
 
 

+ 3 - 2
drivers/uio/uio_pdrv_genirq.c

@@ -81,7 +81,8 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)
 		goto bad0;
 		goto bad0;
 	}
 	}
 
 
-	if (uioinfo->handler || uioinfo->irqcontrol || uioinfo->irq_flags) {
+	if (uioinfo->handler || uioinfo->irqcontrol ||
+	    uioinfo->irq_flags & IRQF_SHARED) {
 		dev_err(&pdev->dev, "interrupt configuration error\n");
 		dev_err(&pdev->dev, "interrupt configuration error\n");
 		goto bad0;
 		goto bad0;
 	}
 	}
@@ -132,7 +133,7 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)
 	 * Interrupt sharing is not supported.
 	 * Interrupt sharing is not supported.
 	 */
 	 */
 
 
-	uioinfo->irq_flags = IRQF_DISABLED;
+	uioinfo->irq_flags |= IRQF_DISABLED;
 	uioinfo->handler = uio_pdrv_genirq_handler;
 	uioinfo->handler = uio_pdrv_genirq_handler;
 	uioinfo->irqcontrol = uio_pdrv_genirq_irqcontrol;
 	uioinfo->irqcontrol = uio_pdrv_genirq_irqcontrol;
 	uioinfo->priv = priv;
 	uioinfo->priv = priv;

+ 2 - 2
drivers/usb/core/usb.c

@@ -286,7 +286,7 @@ static int usb_dev_restore(struct device *dev)
 	return usb_resume(dev);
 	return usb_resume(dev);
 }
 }
 
 
-static struct pm_ops usb_device_pm_ops = {
+static struct dev_pm_ops usb_device_pm_ops = {
 	.prepare =	usb_dev_prepare,
 	.prepare =	usb_dev_prepare,
 	.complete =	usb_dev_complete,
 	.complete =	usb_dev_complete,
 	.suspend =	usb_dev_suspend,
 	.suspend =	usb_dev_suspend,
@@ -301,7 +301,7 @@ static struct pm_ops usb_device_pm_ops = {
 
 
 #define ksuspend_usb_init()	0
 #define ksuspend_usb_init()	0
 #define ksuspend_usb_cleanup()	do {} while (0)
 #define ksuspend_usb_cleanup()	do {} while (0)
-#define usb_device_pm_ops	(*(struct pm_ops *)0)
+#define usb_device_pm_ops	(*(struct dev_pm_ops *)0)
 
 
 #endif	/* CONFIG_PM */
 #endif	/* CONFIG_PM */
 
 

+ 1 - 1
drivers/usb/gadget/at91_udc.c

@@ -1474,7 +1474,7 @@ static struct at91_udc controller = {
 		.ep0	= &controller.ep[0].ep,
 		.ep0	= &controller.ep[0].ep,
 		.name	= driver_name,
 		.name	= driver_name,
 		.dev	= {
 		.dev	= {
-			.bus_id = "gadget",
+			.init_name = "gadget",
 			.release = nop_release,
 			.release = nop_release,
 		}
 		}
 	},
 	},

+ 1 - 1
drivers/usb/gadget/atmel_usba_udc.c

@@ -1034,7 +1034,7 @@ static struct usba_udc the_udc = {
 		.is_dualspeed	= 1,
 		.is_dualspeed	= 1,
 		.name		= "atmel_usba_udc",
 		.name		= "atmel_usba_udc",
 		.dev	= {
 		.dev	= {
-			.bus_id		= "gadget",
+			.init_name	= "gadget",
 			.release	= nop_release,
 			.release	= nop_release,
 		},
 		},
 	},
 	},

+ 1 - 1
drivers/usb/gadget/fsl_qe_udc.c

@@ -2545,7 +2545,7 @@ static int __devinit qe_udc_probe(struct of_device *ofdev,
 
 
 	device_initialize(&udc_controller->gadget.dev);
 	device_initialize(&udc_controller->gadget.dev);
 
 
-	strcpy(udc_controller->gadget.dev.bus_id, "gadget");
+	dev_set_name(&udc_controller->gadget.dev, "gadget");
 
 
 	udc_controller->gadget.dev.release = qe_udc_release;
 	udc_controller->gadget.dev.release = qe_udc_release;
 	udc_controller->gadget.dev.parent = &ofdev->dev;
 	udc_controller->gadget.dev.parent = &ofdev->dev;

部分文件因为文件数量过多而无法显示