aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-01-25 11:34:42 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2008-01-25 11:35:13 -0500
commitdf8dc74e8a383eaf2d9b44b80a71ec6f0e52b42e (patch)
treebc3799a43e8b94fa84b32e37b1c124d5e4868f50 /arch
parent556a169dab38b5100df6f4a45b655dddd3db94c1 (diff)
parent4a3ad20ccd8f4d2a0535cf98fa83f7b561ba59a9 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6
This can be broken down into these major areas: - Documentation updates (language translations and fixes, as well as kobject and kset documenatation updates.) - major kset/kobject/ktype rework and fixes. This cleans up the kset and kobject and ktype relationship and architecture, making sense of things now, and good documenation and samples are provided for others to use. Also the attributes for kobjects are much easier to handle now. This cleaned up a LOT of code all through the kernel, making kobjects easier to use if you want to. - struct bus_type has been reworked to now handle the lifetime rules properly, as the kobject is properly dynamic. - struct driver has also been reworked, and now the lifetime issues are resolved. - the block subsystem has been converted to use struct device now, and not "raw" kobjects. This patch has been in the -mm tree for over a year now, and finally all the issues are worked out with it. Older distros now properly work with new kernels, and no userspace updates are needed at all. - nozomi driver is added. This has also been in -mm for a long time, and many people have asked for it to go in. It is now in good enough shape to do so. - lots of class_device conversions to use struct device instead. The tree is almost all cleaned up now, only SCSI and IB is the remaining code to fix up... * git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6: (196 commits) Driver core: coding style fixes Kobject: fix coding style issues in kobject c files Kobject: fix coding style issues in kobject.h Driver core: fix coding style issues in device.h spi: use class iteration api scsi: use class iteration api rtc: use class iteration api power supply : use class iteration api ieee1394: use class iteration api Driver Core: add class iteration api Driver core: Cleanup get_device_parent() in device_add() and device_move() UIO: constify function pointer tables Driver Core: constify the name passed to platform_device_register_simple driver core: fix build with SYSFS=n sysfs: make SYSFS_DEPRECATED depend on SYSFS Driver core: use LIST_HEAD instead of call to INIT_LIST_HEAD in __init kobject: add sample code for how to use ksets/ktypes/kobjects kobject: add sample code for how to use kobjects in a simple manner. kobject: update the kobject/kset documentation kobject: remove old, outdated documentation. ...
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/kernel/time.c4
-rw-r--r--arch/arm/mach-integrator/integrator_ap.c2
-rw-r--r--arch/arm/mach-omap1/pm.c23
-rw-r--r--arch/arm/mach-pxa/cm-x270.c2
-rw-r--r--arch/arm/mach-pxa/lpd270.c2
-rw-r--r--arch/arm/mach-pxa/lubbock.c2
-rw-r--r--arch/arm/mach-pxa/mainstone.c2
-rw-r--r--arch/arm/mach-s3c2410/s3c2410.c2
-rw-r--r--arch/arm/mach-s3c2412/s3c2412.c2
-rw-r--r--arch/arm/mach-s3c2440/mach-osiris.c2
-rw-r--r--arch/arm/mach-s3c2443/s3c2443.c2
-rw-r--r--arch/arm/mach-sa1100/irq.c2
-rw-r--r--arch/arm/oprofile/common.c2
-rw-r--r--arch/arm/plat-omap/gpio.c2
-rw-r--r--arch/arm/plat-s3c24xx/dma.c2
-rw-r--r--arch/arm/plat-s3c24xx/s3c244x.c4
-rw-r--r--arch/avr32/kernel/time.c2
-rw-r--r--arch/cris/arch-v32/drivers/iop_fw_load.c11
-rw-r--r--arch/ia64/kernel/topology.c26
-rw-r--r--arch/mips/kernel/i8259.c2
-rw-r--r--arch/powerpc/platforms/cell/spu_base.c2
-rw-r--r--arch/powerpc/platforms/powermac/pic.c2
-rw-r--r--arch/powerpc/platforms/pseries/power.c32
-rw-r--r--arch/powerpc/sysdev/ipic.c2
-rw-r--r--arch/powerpc/sysdev/mpic.c2
-rw-r--r--arch/powerpc/sysdev/qe_lib/qe_ic.c2
-rw-r--r--arch/ppc/syslib/ipic.c2
-rw-r--r--arch/ppc/syslib/open_pic.c2
-rw-r--r--arch/ppc/syslib/open_pic2.c2
-rw-r--r--arch/s390/hypfs/inode.c13
-rw-r--r--arch/s390/kernel/ipl.c147
-rw-r--r--arch/s390/kernel/time.c2
-rw-r--r--arch/sh/drivers/dma/dma-sysfs.c2
-rw-r--r--arch/sh/kernel/cpu/sh4/sq.c13
-rw-r--r--arch/sh/kernel/time.c2
-rw-r--r--arch/x86/kernel/apic_32.c2
-rw-r--r--arch/x86/kernel/apic_64.c2
-rw-r--r--arch/x86/kernel/cpu/intel_cacheinfo.c24
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce_64.c2
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce_amd_64.c30
-rw-r--r--arch/x86/kernel/cpuid.c6
-rw-r--r--arch/x86/kernel/i8237.c2
-rw-r--r--arch/x86/kernel/i8259_32.c2
-rw-r--r--arch/x86/kernel/i8259_64.c2
-rw-r--r--arch/x86/kernel/io_apic_32.c2
-rw-r--r--arch/x86/kernel/io_apic_64.c2
-rw-r--r--arch/x86/kernel/msr.c6
-rw-r--r--arch/x86/kernel/nmi_32.c2
-rw-r--r--arch/x86/kernel/nmi_64.c2
-rw-r--r--arch/x86/oprofile/nmi_int.c2
50 files changed, 214 insertions, 199 deletions
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index 1533d3ecd7a0..f6f3689a86ee 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -195,7 +195,7 @@ static int leds_shutdown(struct sys_device *dev)
195} 195}
196 196
197static struct sysdev_class leds_sysclass = { 197static struct sysdev_class leds_sysclass = {
198 set_kset_name("leds"), 198 .name = "leds",
199 .shutdown = leds_shutdown, 199 .shutdown = leds_shutdown,
200 .suspend = leds_suspend, 200 .suspend = leds_suspend,
201 .resume = leds_resume, 201 .resume = leds_resume,
@@ -369,7 +369,7 @@ static int timer_resume(struct sys_device *dev)
369#endif 369#endif
370 370
371static struct sysdev_class timer_sysclass = { 371static struct sysdev_class timer_sysclass = {
372 set_kset_name("timer"), 372 .name = "timer",
373 .suspend = timer_suspend, 373 .suspend = timer_suspend,
374 .resume = timer_resume, 374 .resume = timer_resume,
375}; 375};
diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c
index 72280754354d..df37e93c6fc9 100644
--- a/arch/arm/mach-integrator/integrator_ap.c
+++ b/arch/arm/mach-integrator/integrator_ap.c
@@ -214,7 +214,7 @@ static int irq_resume(struct sys_device *dev)
214#endif 214#endif
215 215
216static struct sysdev_class irq_class = { 216static struct sysdev_class irq_class = {
217 set_kset_name("irq"), 217 .name = "irq",
218 .suspend = irq_suspend, 218 .suspend = irq_suspend,
219 .resume = irq_resume, 219 .resume = irq_resume,
220}; 220};
diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c
index 3bf01e28df33..d9805e3d9304 100644
--- a/arch/arm/mach-omap1/pm.c
+++ b/arch/arm/mach-omap1/pm.c
@@ -69,14 +69,14 @@ static unsigned int mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_SIZE];
69 69
70static unsigned short enable_dyn_sleep = 1; 70static unsigned short enable_dyn_sleep = 1;
71 71
72static ssize_t omap_pm_sleep_while_idle_show(struct kset *kset, char *buf) 72static ssize_t idle_show(struct kobject *kobj, struct kobj_attribute *attr,
73 char *buf)
73{ 74{
74 return sprintf(buf, "%hu\n", enable_dyn_sleep); 75 return sprintf(buf, "%hu\n", enable_dyn_sleep);
75} 76}
76 77
77static ssize_t omap_pm_sleep_while_idle_store(struct kset *kset, 78static ssize_t idle_store(struct kobject *kobj, struct kobj_attribute *attr,
78 const char * buf, 79 const char * buf, size_t n)
79 size_t n)
80{ 80{
81 unsigned short value; 81 unsigned short value;
82 if (sscanf(buf, "%hu", &value) != 1 || 82 if (sscanf(buf, "%hu", &value) != 1 ||
@@ -88,16 +88,9 @@ static ssize_t omap_pm_sleep_while_idle_store(struct kset *kset,
88 return n; 88 return n;
89} 89}
90 90
91static struct subsys_attribute sleep_while_idle_attr = { 91static struct kobj_attribute sleep_while_idle_attr =
92 .attr = { 92 __ATTR(sleep_while_idle, 0644, idle_show, idle_store);
93 .name = __stringify(sleep_while_idle),
94 .mode = 0644,
95 },
96 .show = omap_pm_sleep_while_idle_show,
97 .store = omap_pm_sleep_while_idle_store,
98};
99 93
100extern struct kset power_subsys;
101static void (*omap_sram_idle)(void) = NULL; 94static void (*omap_sram_idle)(void) = NULL;
102static void (*omap_sram_suspend)(unsigned long r0, unsigned long r1) = NULL; 95static void (*omap_sram_suspend)(unsigned long r0, unsigned long r1) = NULL;
103 96
@@ -726,9 +719,9 @@ static int __init omap_pm_init(void)
726 omap_pm_init_proc(); 719 omap_pm_init_proc();
727#endif 720#endif
728 721
729 error = subsys_create_file(&power_subsys, &sleep_while_idle_attr); 722 error = sysfs_create_file(power_kobj, &sleep_while_idle_attr);
730 if (error) 723 if (error)
731 printk(KERN_ERR "subsys_create_file failed: %d\n", error); 724 printk(KERN_ERR "sysfs_create_file failed: %d\n", error);
732 725
733 if (cpu_is_omap16xx()) { 726 if (cpu_is_omap16xx()) {
734 /* configure LOW_PWR pin */ 727 /* configure LOW_PWR pin */
diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c
index 177664ccb2e2..a16349272f54 100644
--- a/arch/arm/mach-pxa/cm-x270.c
+++ b/arch/arm/mach-pxa/cm-x270.c
@@ -566,7 +566,7 @@ static int cmx270_resume(struct sys_device *dev)
566} 566}
567 567
568static struct sysdev_class cmx270_pm_sysclass = { 568static struct sysdev_class cmx270_pm_sysclass = {
569 set_kset_name("pm"), 569 .name = "pm",
570 .resume = cmx270_resume, 570 .resume = cmx270_resume,
571 .suspend = cmx270_suspend, 571 .suspend = cmx270_suspend,
572}; 572};
diff --git a/arch/arm/mach-pxa/lpd270.c b/arch/arm/mach-pxa/lpd270.c
index 26116440a7c9..78ebad063cba 100644
--- a/arch/arm/mach-pxa/lpd270.c
+++ b/arch/arm/mach-pxa/lpd270.c
@@ -122,7 +122,7 @@ static int lpd270_irq_resume(struct sys_device *dev)
122} 122}
123 123
124static struct sysdev_class lpd270_irq_sysclass = { 124static struct sysdev_class lpd270_irq_sysclass = {
125 set_kset_name("cpld_irq"), 125 .name = "cpld_irq",
126 .resume = lpd270_irq_resume, 126 .resume = lpd270_irq_resume,
127}; 127};
128 128
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c
index 011a1a72b61c..1d3112dc629e 100644
--- a/arch/arm/mach-pxa/lubbock.c
+++ b/arch/arm/mach-pxa/lubbock.c
@@ -126,7 +126,7 @@ static int lubbock_irq_resume(struct sys_device *dev)
126} 126}
127 127
128static struct sysdev_class lubbock_irq_sysclass = { 128static struct sysdev_class lubbock_irq_sysclass = {
129 set_kset_name("cpld_irq"), 129 .name = "cpld_irq",
130 .resume = lubbock_irq_resume, 130 .resume = lubbock_irq_resume,
131}; 131};
132 132
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c
index a4bc3483cbb3..41d8c6cea62b 100644
--- a/arch/arm/mach-pxa/mainstone.c
+++ b/arch/arm/mach-pxa/mainstone.c
@@ -120,7 +120,7 @@ static int mainstone_irq_resume(struct sys_device *dev)
120} 120}
121 121
122static struct sysdev_class mainstone_irq_sysclass = { 122static struct sysdev_class mainstone_irq_sysclass = {
123 set_kset_name("cpld_irq"), 123 .name = "cpld_irq",
124 .resume = mainstone_irq_resume, 124 .resume = mainstone_irq_resume,
125}; 125};
126 126
diff --git a/arch/arm/mach-s3c2410/s3c2410.c b/arch/arm/mach-s3c2410/s3c2410.c
index e580303cb0ab..0e7991940f81 100644
--- a/arch/arm/mach-s3c2410/s3c2410.c
+++ b/arch/arm/mach-s3c2410/s3c2410.c
@@ -100,7 +100,7 @@ void __init s3c2410_init_clocks(int xtal)
100} 100}
101 101
102struct sysdev_class s3c2410_sysclass = { 102struct sysdev_class s3c2410_sysclass = {
103 set_kset_name("s3c2410-core"), 103 .name = "s3c2410-core",
104}; 104};
105 105
106static struct sys_device s3c2410_sysdev = { 106static struct sys_device s3c2410_sysdev = {
diff --git a/arch/arm/mach-s3c2412/s3c2412.c b/arch/arm/mach-s3c2412/s3c2412.c
index 4f92a1562d77..265cd3f567a3 100644
--- a/arch/arm/mach-s3c2412/s3c2412.c
+++ b/arch/arm/mach-s3c2412/s3c2412.c
@@ -196,7 +196,7 @@ void __init s3c2412_init_clocks(int xtal)
196*/ 196*/
197 197
198struct sysdev_class s3c2412_sysclass = { 198struct sysdev_class s3c2412_sysclass = {
199 set_kset_name("s3c2412-core"), 199 .name = "s3c2412-core",
200}; 200};
201 201
202static int __init s3c2412_core_init(void) 202static int __init s3c2412_core_init(void)
diff --git a/arch/arm/mach-s3c2440/mach-osiris.c b/arch/arm/mach-s3c2440/mach-osiris.c
index c326983f4a8f..78af7664988b 100644
--- a/arch/arm/mach-s3c2440/mach-osiris.c
+++ b/arch/arm/mach-s3c2440/mach-osiris.c
@@ -312,7 +312,7 @@ static int osiris_pm_resume(struct sys_device *sd)
312#endif 312#endif
313 313
314static struct sysdev_class osiris_pm_sysclass = { 314static struct sysdev_class osiris_pm_sysclass = {
315 set_kset_name("mach-osiris"), 315 .name = "mach-osiris",
316 .suspend = osiris_pm_suspend, 316 .suspend = osiris_pm_suspend,
317 .resume = osiris_pm_resume, 317 .resume = osiris_pm_resume,
318}; 318};
diff --git a/arch/arm/mach-s3c2443/s3c2443.c b/arch/arm/mach-s3c2443/s3c2443.c
index 8d8117158d23..9ce490560af9 100644
--- a/arch/arm/mach-s3c2443/s3c2443.c
+++ b/arch/arm/mach-s3c2443/s3c2443.c
@@ -43,7 +43,7 @@ static struct map_desc s3c2443_iodesc[] __initdata = {
43}; 43};
44 44
45struct sysdev_class s3c2443_sysclass = { 45struct sysdev_class s3c2443_sysclass = {
46 set_kset_name("s3c2443-core"), 46 .name = "s3c2443-core",
47}; 47};
48 48
49static struct sys_device s3c2443_sysdev = { 49static struct sys_device s3c2443_sysdev = {
diff --git a/arch/arm/mach-sa1100/irq.c b/arch/arm/mach-sa1100/irq.c
index edf3347d9c5b..3dc17d7bf38e 100644
--- a/arch/arm/mach-sa1100/irq.c
+++ b/arch/arm/mach-sa1100/irq.c
@@ -283,7 +283,7 @@ static int sa1100irq_resume(struct sys_device *dev)
283} 283}
284 284
285static struct sysdev_class sa1100irq_sysclass = { 285static struct sysdev_class sa1100irq_sysclass = {
286 set_kset_name("sa11x0-irq"), 286 .name = "sa11x0-irq",
287 .suspend = sa1100irq_suspend, 287 .suspend = sa1100irq_suspend,
288 .resume = sa1100irq_resume, 288 .resume = sa1100irq_resume,
289}; 289};
diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c
index a9de727c9327..0a5cf3a6438b 100644
--- a/arch/arm/oprofile/common.c
+++ b/arch/arm/oprofile/common.c
@@ -96,7 +96,7 @@ static int op_arm_resume(struct sys_device *dev)
96} 96}
97 97
98static struct sysdev_class oprofile_sysclass = { 98static struct sysdev_class oprofile_sysclass = {
99 set_kset_name("oprofile"), 99 .name = "oprofile",
100 .resume = op_arm_resume, 100 .resume = op_arm_resume,
101 .suspend = op_arm_suspend, 101 .suspend = op_arm_suspend,
102}; 102};
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index 6097753394ad..b2a87b8ef673 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -1455,7 +1455,7 @@ static int omap_gpio_resume(struct sys_device *dev)
1455} 1455}
1456 1456
1457static struct sysdev_class omap_gpio_sysclass = { 1457static struct sysdev_class omap_gpio_sysclass = {
1458 set_kset_name("gpio"), 1458 .name = "gpio",
1459 .suspend = omap_gpio_suspend, 1459 .suspend = omap_gpio_suspend,
1460 .resume = omap_gpio_resume, 1460 .resume = omap_gpio_resume,
1461}; 1461};
diff --git a/arch/arm/plat-s3c24xx/dma.c b/arch/arm/plat-s3c24xx/dma.c
index 29696e46ed65..aae1b9cbaf44 100644
--- a/arch/arm/plat-s3c24xx/dma.c
+++ b/arch/arm/plat-s3c24xx/dma.c
@@ -1265,7 +1265,7 @@ static int s3c2410_dma_resume(struct sys_device *dev)
1265#endif /* CONFIG_PM */ 1265#endif /* CONFIG_PM */
1266 1266
1267struct sysdev_class dma_sysclass = { 1267struct sysdev_class dma_sysclass = {
1268 set_kset_name("s3c24xx-dma"), 1268 .name = "s3c24xx-dma",
1269 .suspend = s3c2410_dma_suspend, 1269 .suspend = s3c2410_dma_suspend,
1270 .resume = s3c2410_dma_resume, 1270 .resume = s3c2410_dma_resume,
1271}; 1271};
diff --git a/arch/arm/plat-s3c24xx/s3c244x.c b/arch/arm/plat-s3c24xx/s3c244x.c
index 3444b13afac5..f197bb3a2366 100644
--- a/arch/arm/plat-s3c24xx/s3c244x.c
+++ b/arch/arm/plat-s3c24xx/s3c244x.c
@@ -151,13 +151,13 @@ static int s3c244x_resume(struct sys_device *dev)
151/* Since the S3C2442 and S3C2440 share items, put both sysclasses here */ 151/* Since the S3C2442 and S3C2440 share items, put both sysclasses here */
152 152
153struct sysdev_class s3c2440_sysclass = { 153struct sysdev_class s3c2440_sysclass = {
154 set_kset_name("s3c2440-core"), 154 .name = "s3c2440-core",
155 .suspend = s3c244x_suspend, 155 .suspend = s3c244x_suspend,
156 .resume = s3c244x_resume 156 .resume = s3c244x_resume
157}; 157};
158 158
159struct sysdev_class s3c2442_sysclass = { 159struct sysdev_class s3c2442_sysclass = {
160 set_kset_name("s3c2442-core"), 160 .name = "s3c2442-core",
161 .suspend = s3c244x_suspend, 161 .suspend = s3c244x_suspend,
162 .resume = s3c244x_resume 162 .resume = s3c244x_resume
163}; 163};
diff --git a/arch/avr32/kernel/time.c b/arch/avr32/kernel/time.c
index 7014a3571ec0..36a46c3ae308 100644
--- a/arch/avr32/kernel/time.c
+++ b/arch/avr32/kernel/time.c
@@ -214,7 +214,7 @@ void __init time_init(void)
214} 214}
215 215
216static struct sysdev_class timer_class = { 216static struct sysdev_class timer_class = {
217 set_kset_name("timer"), 217 .name = "timer",
218}; 218};
219 219
220static struct sys_device timer_device = { 220static struct sys_device timer_device = {
diff --git a/arch/cris/arch-v32/drivers/iop_fw_load.c b/arch/cris/arch-v32/drivers/iop_fw_load.c
index 11f9895ded50..f4bdc1dfa320 100644
--- a/arch/cris/arch-v32/drivers/iop_fw_load.c
+++ b/arch/cris/arch-v32/drivers/iop_fw_load.c
@@ -20,6 +20,9 @@
20 20
21#define IOP_TIMEOUT 100 21#define IOP_TIMEOUT 100
22 22
23#error "This driver is broken with regard to its driver core usage."
24#error "Please contact <greg@kroah.com> for details on how to fix it properly."
25
23static struct device iop_spu_device[2] = { 26static struct device iop_spu_device[2] = {
24 { .bus_id = "iop-spu0", }, 27 { .bus_id = "iop-spu0", },
25 { .bus_id = "iop-spu1", }, 28 { .bus_id = "iop-spu1", },
@@ -192,6 +195,13 @@ int iop_start_mpu(unsigned int start_addr)
192 195
193static int __init iop_fw_load_init(void) 196static int __init iop_fw_load_init(void)
194{ 197{
198#if 0
199 /*
200 * static struct devices can not be added directly to sysfs by ignoring
201 * the driver model infrastructure. To fix this properly, please use
202 * the platform_bus to register these devices to be able to properly
203 * use the firmware infrastructure.
204 */
195 device_initialize(&iop_spu_device[0]); 205 device_initialize(&iop_spu_device[0]);
196 kobject_set_name(&iop_spu_device[0].kobj, "iop-spu0"); 206 kobject_set_name(&iop_spu_device[0].kobj, "iop-spu0");
197 kobject_add(&iop_spu_device[0].kobj); 207 kobject_add(&iop_spu_device[0].kobj);
@@ -201,6 +211,7 @@ static int __init iop_fw_load_init(void)
201 device_initialize(&iop_mpu_device); 211 device_initialize(&iop_mpu_device);
202 kobject_set_name(&iop_mpu_device.kobj, "iop-mpu"); 212 kobject_set_name(&iop_mpu_device.kobj, "iop-mpu");
203 kobject_add(&iop_mpu_device.kobj); 213 kobject_add(&iop_mpu_device.kobj);
214#endif
204 return 0; 215 return 0;
205} 216}
206 217
diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c
index 14261fee5f4d..a2484fc1a06c 100644
--- a/arch/ia64/kernel/topology.c
+++ b/arch/ia64/kernel/topology.c
@@ -354,27 +354,27 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev)
354 if (unlikely(retval < 0)) 354 if (unlikely(retval < 0))
355 return retval; 355 return retval;
356 356
357 all_cpu_cache_info[cpu].kobj.parent = &sys_dev->kobj; 357 retval = kobject_init_and_add(&all_cpu_cache_info[cpu].kobj,
358 kobject_set_name(&all_cpu_cache_info[cpu].kobj, "%s", "cache"); 358 &cache_ktype_percpu_entry, &sys_dev->kobj,
359 all_cpu_cache_info[cpu].kobj.ktype = &cache_ktype_percpu_entry; 359 "%s", "cache");
360 retval = kobject_register(&all_cpu_cache_info[cpu].kobj);
361 360
362 for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) { 361 for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) {
363 this_object = LEAF_KOBJECT_PTR(cpu,i); 362 this_object = LEAF_KOBJECT_PTR(cpu,i);
364 this_object->kobj.parent = &all_cpu_cache_info[cpu].kobj; 363 retval = kobject_init_and_add(&(this_object->kobj),
365 kobject_set_name(&(this_object->kobj), "index%1lu", i); 364 &cache_ktype,
366 this_object->kobj.ktype = &cache_ktype; 365 &all_cpu_cache_info[cpu].kobj,
367 retval = kobject_register(&(this_object->kobj)); 366 "index%1lu", i);
368 if (unlikely(retval)) { 367 if (unlikely(retval)) {
369 for (j = 0; j < i; j++) { 368 for (j = 0; j < i; j++) {
370 kobject_unregister( 369 kobject_put(&(LEAF_KOBJECT_PTR(cpu,j)->kobj));
371 &(LEAF_KOBJECT_PTR(cpu,j)->kobj));
372 } 370 }
373 kobject_unregister(&all_cpu_cache_info[cpu].kobj); 371 kobject_put(&all_cpu_cache_info[cpu].kobj);
374 cpu_cache_sysfs_exit(cpu); 372 cpu_cache_sysfs_exit(cpu);
375 break; 373 break;
376 } 374 }
375 kobject_uevent(&(this_object->kobj), KOBJ_ADD);
377 } 376 }
377 kobject_uevent(&all_cpu_cache_info[cpu].kobj, KOBJ_ADD);
378 return retval; 378 return retval;
379} 379}
380 380
@@ -385,10 +385,10 @@ static int __cpuinit cache_remove_dev(struct sys_device * sys_dev)
385 unsigned long i; 385 unsigned long i;
386 386
387 for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) 387 for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++)
388 kobject_unregister(&(LEAF_KOBJECT_PTR(cpu,i)->kobj)); 388 kobject_put(&(LEAF_KOBJECT_PTR(cpu,i)->kobj));
389 389
390 if (all_cpu_cache_info[cpu].kobj.parent) { 390 if (all_cpu_cache_info[cpu].kobj.parent) {
391 kobject_unregister(&all_cpu_cache_info[cpu].kobj); 391 kobject_put(&all_cpu_cache_info[cpu].kobj);
392 memset(&all_cpu_cache_info[cpu].kobj, 392 memset(&all_cpu_cache_info[cpu].kobj,
393 0, 393 0,
394 sizeof(struct kobject)); 394 sizeof(struct kobject));
diff --git a/arch/mips/kernel/i8259.c b/arch/mips/kernel/i8259.c
index 471013577108..197d7977de35 100644
--- a/arch/mips/kernel/i8259.c
+++ b/arch/mips/kernel/i8259.c
@@ -238,7 +238,7 @@ static int i8259A_shutdown(struct sys_device *dev)
238} 238}
239 239
240static struct sysdev_class i8259_sysdev_class = { 240static struct sysdev_class i8259_sysdev_class = {
241 set_kset_name("i8259"), 241 .name = "i8259",
242 .resume = i8259A_resume, 242 .resume = i8259A_resume,
243 .shutdown = i8259A_shutdown, 243 .shutdown = i8259A_shutdown,
244}; 244};
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c
index c83c3e3f5178..a08862203643 100644
--- a/arch/powerpc/platforms/cell/spu_base.c
+++ b/arch/powerpc/platforms/cell/spu_base.c
@@ -459,7 +459,7 @@ static int spu_shutdown(struct sys_device *sysdev)
459} 459}
460 460
461static struct sysdev_class spu_sysdev_class = { 461static struct sysdev_class spu_sysdev_class = {
462 set_kset_name("spu"), 462 .name = "spu",
463 .shutdown = spu_shutdown, 463 .shutdown = spu_shutdown,
464}; 464};
465 465
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
index 999f5e160897..84c0d4ef76a2 100644
--- a/arch/powerpc/platforms/powermac/pic.c
+++ b/arch/powerpc/platforms/powermac/pic.c
@@ -663,7 +663,7 @@ static int pmacpic_resume(struct sys_device *sysdev)
663#endif /* CONFIG_PM && CONFIG_PPC32 */ 663#endif /* CONFIG_PM && CONFIG_PPC32 */
664 664
665static struct sysdev_class pmacpic_sysclass = { 665static struct sysdev_class pmacpic_sysclass = {
666 set_kset_name("pmac_pic"), 666 .name = "pmac_pic",
667}; 667};
668 668
669static struct sys_device device_pmacpic = { 669static struct sys_device device_pmacpic = {
diff --git a/arch/powerpc/platforms/pseries/power.c b/arch/powerpc/platforms/pseries/power.c
index 73e69023d90a..e95fc1594c84 100644
--- a/arch/powerpc/platforms/pseries/power.c
+++ b/arch/powerpc/platforms/pseries/power.c
@@ -28,13 +28,15 @@
28 28
29unsigned long rtas_poweron_auto; /* default and normal state is 0 */ 29unsigned long rtas_poweron_auto; /* default and normal state is 0 */
30 30
31static ssize_t auto_poweron_show(struct kset *kset, char *buf) 31static ssize_t auto_poweron_show(struct kobject *kobj,
32 struct kobj_attribute *attr, char *buf)
32{ 33{
33 return sprintf(buf, "%lu\n", rtas_poweron_auto); 34 return sprintf(buf, "%lu\n", rtas_poweron_auto);
34} 35}
35 36
36static ssize_t 37static ssize_t auto_poweron_store(struct kobject *kobj,
37auto_poweron_store(struct kset *kset, const char *buf, size_t n) 38 struct kobj_attribute *attr,
39 const char *buf, size_t n)
38{ 40{
39 int ret; 41 int ret;
40 unsigned long ups_restart; 42 unsigned long ups_restart;
@@ -47,17 +49,11 @@ auto_poweron_store(struct kset *kset, const char *buf, size_t n)
47 return -EINVAL; 49 return -EINVAL;
48} 50}
49 51
50static struct subsys_attribute auto_poweron_attr = { 52static struct kobj_attribute auto_poweron_attr =
51 .attr = { 53 __ATTR(auto_poweron, 0644, auto_poweron_show, auto_poweron_store);
52 .name = __stringify(auto_poweron),
53 .mode = 0644,
54 },
55 .show = auto_poweron_show,
56 .store = auto_poweron_store,
57};
58 54
59#ifndef CONFIG_PM 55#ifndef CONFIG_PM
60decl_subsys(power,NULL,NULL); 56struct kobject *power_kobj;
61 57
62static struct attribute *g[] = { 58static struct attribute *g[] = {
63 &auto_poweron_attr.attr, 59 &auto_poweron_attr.attr,
@@ -70,18 +66,16 @@ static struct attribute_group attr_group = {
70 66
71static int __init pm_init(void) 67static int __init pm_init(void)
72{ 68{
73 int error = subsystem_register(&power_subsys); 69 power_kobj = kobject_create_and_add("power", NULL);
74 if (!error) 70 if (!power_kobj)
75 error = sysfs_create_group(&power_subsys.kobj, &attr_group); 71 return -ENOMEM;
76 return error; 72 return sysfs_create_group(power_kobj, &attr_group);
77} 73}
78core_initcall(pm_init); 74core_initcall(pm_init);
79#else 75#else
80extern struct kset power_subsys;
81
82static int __init apo_pm_init(void) 76static int __init apo_pm_init(void)
83{ 77{
84 return (subsys_create_file(&power_subsys, &auto_poweron_attr)); 78 return (sysfs_create_file(power_kobj, &auto_poweron_attr));
85} 79}
86__initcall(apo_pm_init); 80__initcall(apo_pm_init);
87#endif 81#endif
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c
index 05a56e55804c..e898ff4d2b97 100644
--- a/arch/powerpc/sysdev/ipic.c
+++ b/arch/powerpc/sysdev/ipic.c
@@ -725,7 +725,7 @@ unsigned int ipic_get_irq(void)
725} 725}
726 726
727static struct sysdev_class ipic_sysclass = { 727static struct sysdev_class ipic_sysclass = {
728 set_kset_name("ipic"), 728 .name = "ipic",
729}; 729};
730 730
731static struct sys_device device_ipic = { 731static struct sys_device device_ipic = {
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index e47938899a92..212a94f5d34b 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -1584,7 +1584,7 @@ static struct sysdev_class mpic_sysclass = {
1584 .resume = mpic_resume, 1584 .resume = mpic_resume,
1585 .suspend = mpic_suspend, 1585 .suspend = mpic_suspend,
1586#endif 1586#endif
1587 set_kset_name("mpic"), 1587 .name = "mpic",
1588}; 1588};
1589 1589
1590static int mpic_init_sys(void) 1590static int mpic_init_sys(void)
diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c
index e1c0fd6dbc1a..f59444d3be75 100644
--- a/arch/powerpc/sysdev/qe_lib/qe_ic.c
+++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c
@@ -483,7 +483,7 @@ int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high)
483} 483}
484 484
485static struct sysdev_class qe_ic_sysclass = { 485static struct sysdev_class qe_ic_sysclass = {
486 set_kset_name("qe_ic"), 486 .name = "qe_ic",
487}; 487};
488 488
489static struct sys_device device_qe_ic = { 489static struct sys_device device_qe_ic = {
diff --git a/arch/ppc/syslib/ipic.c b/arch/ppc/syslib/ipic.c
index 9192777d0f78..4f163e20939e 100644
--- a/arch/ppc/syslib/ipic.c
+++ b/arch/ppc/syslib/ipic.c
@@ -614,7 +614,7 @@ int ipic_get_irq(void)
614} 614}
615 615
616static struct sysdev_class ipic_sysclass = { 616static struct sysdev_class ipic_sysclass = {
617 set_kset_name("ipic"), 617 .name = "ipic",
618}; 618};
619 619
620static struct sys_device device_ipic = { 620static struct sys_device device_ipic = {
diff --git a/arch/ppc/syslib/open_pic.c b/arch/ppc/syslib/open_pic.c
index 18ec94733293..da36522d327a 100644
--- a/arch/ppc/syslib/open_pic.c
+++ b/arch/ppc/syslib/open_pic.c
@@ -1043,7 +1043,7 @@ int openpic_resume(struct sys_device *sysdev)
1043#endif /* CONFIG_PM */ 1043#endif /* CONFIG_PM */
1044 1044
1045static struct sysdev_class openpic_sysclass = { 1045static struct sysdev_class openpic_sysclass = {
1046 set_kset_name("openpic"), 1046 .name = "openpic",
1047}; 1047};
1048 1048
1049static struct sys_device device_openpic = { 1049static struct sys_device device_openpic = {
diff --git a/arch/ppc/syslib/open_pic2.c b/arch/ppc/syslib/open_pic2.c
index d585207f9f77..449075a04798 100644
--- a/arch/ppc/syslib/open_pic2.c
+++ b/arch/ppc/syslib/open_pic2.c
@@ -666,7 +666,7 @@ int openpic2_resume(struct sys_device *sysdev)
666 666
667/* HACK ALERT */ 667/* HACK ALERT */
668static struct sysdev_class openpic2_sysclass = { 668static struct sysdev_class openpic2_sysclass = {
669 set_kset_name("openpic2"), 669 .name = "openpic2",
670}; 670};
671 671
672static struct sys_device device_openpic2 = { 672static struct sys_device device_openpic2 = {
diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c
index 5245717295b8..4b010ff814c9 100644
--- a/arch/s390/hypfs/inode.c
+++ b/arch/s390/hypfs/inode.c
@@ -490,7 +490,7 @@ static struct super_operations hypfs_s_ops = {
490 .show_options = hypfs_show_options, 490 .show_options = hypfs_show_options,
491}; 491};
492 492
493static decl_subsys(s390, NULL, NULL); 493static struct kobject *s390_kobj;
494 494
495static int __init hypfs_init(void) 495static int __init hypfs_init(void)
496{ 496{
@@ -506,17 +506,18 @@ static int __init hypfs_init(void)
506 goto fail_diag; 506 goto fail_diag;
507 } 507 }
508 } 508 }
509 kobj_set_kset_s(&s390_subsys, hypervisor_subsys); 509 s390_kobj = kobject_create_and_add("s390", hypervisor_kobj);
510 rc = subsystem_register(&s390_subsys); 510 if (!s390_kobj) {
511 if (rc) 511 rc = -ENOMEM;;
512 goto fail_sysfs; 512 goto fail_sysfs;
513 }
513 rc = register_filesystem(&hypfs_type); 514 rc = register_filesystem(&hypfs_type);
514 if (rc) 515 if (rc)
515 goto fail_filesystem; 516 goto fail_filesystem;
516 return 0; 517 return 0;
517 518
518fail_filesystem: 519fail_filesystem:
519 subsystem_unregister(&s390_subsys); 520 kobject_put(s390_kobj);
520fail_sysfs: 521fail_sysfs:
521 if (!MACHINE_IS_VM) 522 if (!MACHINE_IS_VM)
522 hypfs_diag_exit(); 523 hypfs_diag_exit();
@@ -530,7 +531,7 @@ static void __exit hypfs_exit(void)
530 if (!MACHINE_IS_VM) 531 if (!MACHINE_IS_VM)
531 hypfs_diag_exit(); 532 hypfs_diag_exit();
532 unregister_filesystem(&hypfs_type); 533 unregister_filesystem(&hypfs_type);
533 subsystem_unregister(&s390_subsys); 534 kobject_put(s390_kobj);
534} 535}
535 536
536module_init(hypfs_init) 537module_init(hypfs_init)
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index ce0856d32500..b97694fa62ec 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -162,22 +162,25 @@ EXPORT_SYMBOL_GPL(diag308);
162/* SYSFS */ 162/* SYSFS */
163 163
164#define DEFINE_IPL_ATTR_RO(_prefix, _name, _format, _value) \ 164#define DEFINE_IPL_ATTR_RO(_prefix, _name, _format, _value) \
165static ssize_t sys_##_prefix##_##_name##_show(struct kset *kset, \ 165static ssize_t sys_##_prefix##_##_name##_show(struct kobject *kobj, \
166 struct kobj_attribute *attr, \
166 char *page) \ 167 char *page) \
167{ \ 168{ \
168 return sprintf(page, _format, _value); \ 169 return sprintf(page, _format, _value); \
169} \ 170} \
170static struct subsys_attribute sys_##_prefix##_##_name##_attr = \ 171static struct kobj_attribute sys_##_prefix##_##_name##_attr = \
171 __ATTR(_name, S_IRUGO, sys_##_prefix##_##_name##_show, NULL); 172 __ATTR(_name, S_IRUGO, sys_##_prefix##_##_name##_show, NULL);
172 173
173#define DEFINE_IPL_ATTR_RW(_prefix, _name, _fmt_out, _fmt_in, _value) \ 174#define DEFINE_IPL_ATTR_RW(_prefix, _name, _fmt_out, _fmt_in, _value) \
174static ssize_t sys_##_prefix##_##_name##_show(struct kset *kset, \ 175static ssize_t sys_##_prefix##_##_name##_show(struct kobject *kobj, \
176 struct kobj_attribute *attr, \
175 char *page) \ 177 char *page) \
176{ \ 178{ \
177 return sprintf(page, _fmt_out, \ 179 return sprintf(page, _fmt_out, \
178 (unsigned long long) _value); \ 180 (unsigned long long) _value); \
179} \ 181} \
180static ssize_t sys_##_prefix##_##_name##_store(struct kset *kset, \ 182static ssize_t sys_##_prefix##_##_name##_store(struct kobject *kobj, \
183 struct kobj_attribute *attr, \
181 const char *buf, size_t len) \ 184 const char *buf, size_t len) \
182{ \ 185{ \
183 unsigned long long value; \ 186 unsigned long long value; \
@@ -186,25 +189,27 @@ static ssize_t sys_##_prefix##_##_name##_store(struct kset *kset, \
186 _value = value; \ 189 _value = value; \
187 return len; \ 190 return len; \
188} \ 191} \
189static struct subsys_attribute sys_##_prefix##_##_name##_attr = \ 192static struct kobj_attribute sys_##_prefix##_##_name##_attr = \
190 __ATTR(_name,(S_IRUGO | S_IWUSR), \ 193 __ATTR(_name,(S_IRUGO | S_IWUSR), \
191 sys_##_prefix##_##_name##_show, \ 194 sys_##_prefix##_##_name##_show, \
192 sys_##_prefix##_##_name##_store); 195 sys_##_prefix##_##_name##_store);
193 196
194#define DEFINE_IPL_ATTR_STR_RW(_prefix, _name, _fmt_out, _fmt_in, _value)\ 197#define DEFINE_IPL_ATTR_STR_RW(_prefix, _name, _fmt_out, _fmt_in, _value)\
195static ssize_t sys_##_prefix##_##_name##_show(struct kset *kset, \ 198static ssize_t sys_##_prefix##_##_name##_show(struct kobject *kobj, \
199 struct kobj_attribute *attr, \
196 char *page) \ 200 char *page) \
197{ \ 201{ \
198 return sprintf(page, _fmt_out, _value); \ 202 return sprintf(page, _fmt_out, _value); \
199} \ 203} \
200static ssize_t sys_##_prefix##_##_name##_store(struct kset *kset, \ 204static ssize_t sys_##_prefix##_##_name##_store(struct kobject *kobj, \
205 struct kobj_attribute *attr, \
201 const char *buf, size_t len) \ 206 const char *buf, size_t len) \
202{ \ 207{ \
203 if (sscanf(buf, _fmt_in, _value) != 1) \ 208 if (sscanf(buf, _fmt_in, _value) != 1) \
204 return -EINVAL; \ 209 return -EINVAL; \
205 return len; \ 210 return len; \
206} \ 211} \
207static struct subsys_attribute sys_##_prefix##_##_name##_attr = \ 212static struct kobj_attribute sys_##_prefix##_##_name##_attr = \
208 __ATTR(_name,(S_IRUGO | S_IWUSR), \ 213 __ATTR(_name,(S_IRUGO | S_IWUSR), \
209 sys_##_prefix##_##_name##_show, \ 214 sys_##_prefix##_##_name##_show, \
210 sys_##_prefix##_##_name##_store); 215 sys_##_prefix##_##_name##_store);
@@ -270,14 +275,16 @@ void __init setup_ipl_info(void)
270struct ipl_info ipl_info; 275struct ipl_info ipl_info;
271EXPORT_SYMBOL_GPL(ipl_info); 276EXPORT_SYMBOL_GPL(ipl_info);
272 277
273static ssize_t ipl_type_show(struct kset *kset, char *page) 278static ssize_t ipl_type_show(struct kobject *kobj, struct kobj_attribute *attr,
279 char *page)
274{ 280{
275 return sprintf(page, "%s\n", ipl_type_str(ipl_info.type)); 281 return sprintf(page, "%s\n", ipl_type_str(ipl_info.type));
276} 282}
277 283
278static struct subsys_attribute sys_ipl_type_attr = __ATTR_RO(ipl_type); 284static struct kobj_attribute sys_ipl_type_attr = __ATTR_RO(ipl_type);
279 285
280static ssize_t sys_ipl_device_show(struct kset *kset, char *page) 286static ssize_t sys_ipl_device_show(struct kobject *kobj,
287 struct kobj_attribute *attr, char *page)
281{ 288{
282 struct ipl_parameter_block *ipl = IPL_PARMBLOCK_START; 289 struct ipl_parameter_block *ipl = IPL_PARMBLOCK_START;
283 290
@@ -292,7 +299,7 @@ static ssize_t sys_ipl_device_show(struct kset *kset, char *page)
292 } 299 }
293} 300}
294 301
295static struct subsys_attribute sys_ipl_device_attr = 302static struct kobj_attribute sys_ipl_device_attr =
296 __ATTR(device, S_IRUGO, sys_ipl_device_show, NULL); 303 __ATTR(device, S_IRUGO, sys_ipl_device_show, NULL);
297 304
298static ssize_t ipl_parameter_read(struct kobject *kobj, struct bin_attribute *attr, 305static ssize_t ipl_parameter_read(struct kobject *kobj, struct bin_attribute *attr,
@@ -367,7 +374,8 @@ static struct attribute_group ipl_fcp_attr_group = {
367 374
368/* CCW ipl device attributes */ 375/* CCW ipl device attributes */
369 376
370static ssize_t ipl_ccw_loadparm_show(struct kset *kset, char *page) 377static ssize_t ipl_ccw_loadparm_show(struct kobject *kobj,
378 struct kobj_attribute *attr, char *page)
371{ 379{
372 char loadparm[LOADPARM_LEN + 1] = {}; 380 char loadparm[LOADPARM_LEN + 1] = {};
373 381
@@ -379,7 +387,7 @@ static ssize_t ipl_ccw_loadparm_show(struct kset *kset, char *page)
379 return sprintf(page, "%s\n", loadparm); 387 return sprintf(page, "%s\n", loadparm);
380} 388}
381 389
382static struct subsys_attribute sys_ipl_ccw_loadparm_attr = 390static struct kobj_attribute sys_ipl_ccw_loadparm_attr =
383 __ATTR(loadparm, 0444, ipl_ccw_loadparm_show, NULL); 391 __ATTR(loadparm, 0444, ipl_ccw_loadparm_show, NULL);
384 392
385static struct attribute *ipl_ccw_attrs[] = { 393static struct attribute *ipl_ccw_attrs[] = {
@@ -418,7 +426,7 @@ static struct attribute_group ipl_unknown_attr_group = {
418 .attrs = ipl_unknown_attrs, 426 .attrs = ipl_unknown_attrs,
419}; 427};
420 428
421static decl_subsys(ipl, NULL, NULL); 429static struct kset *ipl_kset;
422 430
423/* 431/*
424 * reipl section 432 * reipl section
@@ -465,7 +473,8 @@ static void reipl_get_ascii_loadparm(char *loadparm)
465 strstrip(loadparm); 473 strstrip(loadparm);
466} 474}
467 475
468static ssize_t reipl_ccw_loadparm_show(struct kset *kset, char *page) 476static ssize_t reipl_ccw_loadparm_show(struct kobject *kobj,
477 struct kobj_attribute *attr, char *page)
469{ 478{
470 char buf[LOADPARM_LEN + 1]; 479 char buf[LOADPARM_LEN + 1];
471 480
@@ -473,7 +482,8 @@ static ssize_t reipl_ccw_loadparm_show(struct kset *kset, char *page)
473 return sprintf(page, "%s\n", buf); 482 return sprintf(page, "%s\n", buf);
474} 483}
475 484
476static ssize_t reipl_ccw_loadparm_store(struct kset *kset, 485static ssize_t reipl_ccw_loadparm_store(struct kobject *kobj,
486 struct kobj_attribute *attr,
477 const char *buf, size_t len) 487 const char *buf, size_t len)
478{ 488{
479 int i, lp_len; 489 int i, lp_len;
@@ -500,7 +510,7 @@ static ssize_t reipl_ccw_loadparm_store(struct kset *kset,
500 return len; 510 return len;
501} 511}
502 512
503static struct subsys_attribute sys_reipl_ccw_loadparm_attr = 513static struct kobj_attribute sys_reipl_ccw_loadparm_attr =
504 __ATTR(loadparm, 0644, reipl_ccw_loadparm_show, 514 __ATTR(loadparm, 0644, reipl_ccw_loadparm_show,
505 reipl_ccw_loadparm_store); 515 reipl_ccw_loadparm_store);
506 516
@@ -568,13 +578,15 @@ static int reipl_set_type(enum ipl_type type)
568 return 0; 578 return 0;
569} 579}
570 580
571static ssize_t reipl_type_show(struct kset *kset, char *page) 581static ssize_t reipl_type_show(struct kobject *kobj,
582 struct kobj_attribute *attr, char *page)
572{ 583{
573 return sprintf(page, "%s\n", ipl_type_str(reipl_type)); 584 return sprintf(page, "%s\n", ipl_type_str(reipl_type));
574} 585}
575 586
576static ssize_t reipl_type_store(struct kset *kset, const char *buf, 587static ssize_t reipl_type_store(struct kobject *kobj,
577 size_t len) 588 struct kobj_attribute *attr,
589 const char *buf, size_t len)
578{ 590{
579 int rc = -EINVAL; 591 int rc = -EINVAL;
580 592
@@ -587,10 +599,10 @@ static ssize_t reipl_type_store(struct kset *kset, const char *buf,
587 return (rc != 0) ? rc : len; 599 return (rc != 0) ? rc : len;
588} 600}
589 601
590static struct subsys_attribute reipl_type_attr = 602static struct kobj_attribute reipl_type_attr =
591 __ATTR(reipl_type, 0644, reipl_type_show, reipl_type_store); 603 __ATTR(reipl_type, 0644, reipl_type_show, reipl_type_store);
592 604
593static decl_subsys(reipl, NULL, NULL); 605static struct kset *reipl_kset;
594 606
595/* 607/*
596 * dump section 608 * dump section
@@ -663,13 +675,15 @@ static int dump_set_type(enum dump_type type)
663 return 0; 675 return 0;
664} 676}
665 677
666static ssize_t dump_type_show(struct kset *kset, char *page) 678static ssize_t dump_type_show(struct kobject *kobj,
679 struct kobj_attribute *attr, char *page)
667{ 680{
668 return sprintf(page, "%s\n", dump_type_str(dump_type)); 681 return sprintf(page, "%s\n", dump_type_str(dump_type));
669} 682}
670 683
671static ssize_t dump_type_store(struct kset *kset, const char *buf, 684static ssize_t dump_type_store(struct kobject *kobj,
672 size_t len) 685 struct kobj_attribute *attr,
686 const char *buf, size_t len)
673{ 687{
674 int rc = -EINVAL; 688 int rc = -EINVAL;
675 689
@@ -682,26 +696,28 @@ static ssize_t dump_type_store(struct kset *kset, const char *buf,
682 return (rc != 0) ? rc : len; 696 return (rc != 0) ? rc : len;
683} 697}
684 698
685static struct subsys_attribute dump_type_attr = 699static struct kobj_attribute dump_type_attr =
686 __ATTR(dump_type, 0644, dump_type_show, dump_type_store); 700 __ATTR(dump_type, 0644, dump_type_show, dump_type_store);
687 701
688static decl_subsys(dump, NULL, NULL); 702static struct kset *dump_kset;
689 703
690/* 704/*
691 * Shutdown actions section 705 * Shutdown actions section
692 */ 706 */
693 707
694static decl_subsys(shutdown_actions, NULL, NULL); 708static struct kset *shutdown_actions_kset;
695 709
696/* on panic */ 710/* on panic */
697 711
698static ssize_t on_panic_show(struct kset *kset, char *page) 712static ssize_t on_panic_show(struct kobject *kobj,
713 struct kobj_attribute *attr, char *page)
699{ 714{
700 return sprintf(page, "%s\n", shutdown_action_str(on_panic_action)); 715 return sprintf(page, "%s\n", shutdown_action_str(on_panic_action));
701} 716}
702 717
703static ssize_t on_panic_store(struct kset *kset, const char *buf, 718static ssize_t on_panic_store(struct kobject *kobj,
704 size_t len) 719 struct kobj_attribute *attr,
720 const char *buf, size_t len)
705{ 721{
706 if (strncmp(buf, SHUTDOWN_REIPL_STR, strlen(SHUTDOWN_REIPL_STR)) == 0) 722 if (strncmp(buf, SHUTDOWN_REIPL_STR, strlen(SHUTDOWN_REIPL_STR)) == 0)
707 on_panic_action = SHUTDOWN_REIPL; 723 on_panic_action = SHUTDOWN_REIPL;
@@ -717,7 +733,7 @@ static ssize_t on_panic_store(struct kset *kset, const char *buf,
717 return len; 733 return len;
718} 734}
719 735
720static struct subsys_attribute on_panic_attr = 736static struct kobj_attribute on_panic_attr =
721 __ATTR(on_panic, 0644, on_panic_show, on_panic_store); 737 __ATTR(on_panic, 0644, on_panic_show, on_panic_store);
722 738
723void do_reipl(void) 739void do_reipl(void)
@@ -814,23 +830,23 @@ static int __init ipl_register_fcp_files(void)
814{ 830{
815 int rc; 831 int rc;
816 832
817 rc = sysfs_create_group(&ipl_subsys.kobj, 833 rc = sysfs_create_group(&ipl_kset->kobj,
818 &ipl_fcp_attr_group); 834 &ipl_fcp_attr_group);
819 if (rc) 835 if (rc)
820 goto out; 836 goto out;
821 rc = sysfs_create_bin_file(&ipl_subsys.kobj, 837 rc = sysfs_create_bin_file(&ipl_kset->kobj,
822 &ipl_parameter_attr); 838 &ipl_parameter_attr);
823 if (rc) 839 if (rc)
824 goto out_ipl_parm; 840 goto out_ipl_parm;
825 rc = sysfs_create_bin_file(&ipl_subsys.kobj, 841 rc = sysfs_create_bin_file(&ipl_kset->kobj,
826 &ipl_scp_data_attr); 842 &ipl_scp_data_attr);
827 if (!rc) 843 if (!rc)
828 goto out; 844 goto out;
829 845
830 sysfs_remove_bin_file(&ipl_subsys.kobj, &ipl_parameter_attr); 846 sysfs_remove_bin_file(&ipl_kset->kobj, &ipl_parameter_attr);
831 847
832out_ipl_parm: 848out_ipl_parm:
833 sysfs_remove_group(&ipl_subsys.kobj, &ipl_fcp_attr_group); 849 sysfs_remove_group(&ipl_kset->kobj, &ipl_fcp_attr_group);
834out: 850out:
835 return rc; 851 return rc;
836} 852}
@@ -839,12 +855,12 @@ static int __init ipl_init(void)
839{ 855{
840 int rc; 856 int rc;
841 857
842 rc = firmware_register(&ipl_subsys); 858 ipl_kset = kset_create_and_add("ipl", NULL, firmware_kobj);
843 if (rc) 859 if (!ipl_kset)
844 return rc; 860 return -ENOMEM;
845 switch (ipl_info.type) { 861 switch (ipl_info.type) {
846 case IPL_TYPE_CCW: 862 case IPL_TYPE_CCW:
847 rc = sysfs_create_group(&ipl_subsys.kobj, 863 rc = sysfs_create_group(&ipl_kset->kobj,
848 &ipl_ccw_attr_group); 864 &ipl_ccw_attr_group);
849 break; 865 break;
850 case IPL_TYPE_FCP: 866 case IPL_TYPE_FCP:
@@ -852,16 +868,16 @@ static int __init ipl_init(void)
852 rc = ipl_register_fcp_files(); 868 rc = ipl_register_fcp_files();
853 break; 869 break;
854 case IPL_TYPE_NSS: 870 case IPL_TYPE_NSS:
855 rc = sysfs_create_group(&ipl_subsys.kobj, 871 rc = sysfs_create_group(&ipl_kset->kobj,
856 &ipl_nss_attr_group); 872 &ipl_nss_attr_group);
857 break; 873 break;
858 default: 874 default:
859 rc = sysfs_create_group(&ipl_subsys.kobj, 875 rc = sysfs_create_group(&ipl_kset->kobj,
860 &ipl_unknown_attr_group); 876 &ipl_unknown_attr_group);
861 break; 877 break;
862 } 878 }
863 if (rc) 879 if (rc)
864 firmware_unregister(&ipl_subsys); 880 kset_unregister(ipl_kset);
865 return rc; 881 return rc;
866} 882}
867 883
@@ -883,7 +899,7 @@ static int __init reipl_nss_init(void)
883 899
884 if (!MACHINE_IS_VM) 900 if (!MACHINE_IS_VM)
885 return 0; 901 return 0;
886 rc = sysfs_create_group(&reipl_subsys.kobj, &reipl_nss_attr_group); 902 rc = sysfs_create_group(&reipl_kset->kobj, &reipl_nss_attr_group);
887 if (rc) 903 if (rc)
888 return rc; 904 return rc;
889 strncpy(reipl_nss_name, kernel_nss_name, NSS_NAME_SIZE + 1); 905 strncpy(reipl_nss_name, kernel_nss_name, NSS_NAME_SIZE + 1);
@@ -898,7 +914,7 @@ static int __init reipl_ccw_init(void)
898 reipl_block_ccw = (void *) get_zeroed_page(GFP_KERNEL); 914 reipl_block_ccw = (void *) get_zeroed_page(GFP_KERNEL);
899 if (!reipl_block_ccw) 915 if (!reipl_block_ccw)
900 return -ENOMEM; 916 return -ENOMEM;
901 rc = sysfs_create_group(&reipl_subsys.kobj, &reipl_ccw_attr_group); 917 rc = sysfs_create_group(&reipl_kset->kobj, &reipl_ccw_attr_group);
902 if (rc) { 918 if (rc) {
903 free_page((unsigned long)reipl_block_ccw); 919 free_page((unsigned long)reipl_block_ccw);
904 return rc; 920 return rc;
@@ -936,7 +952,7 @@ static int __init reipl_fcp_init(void)
936 reipl_block_fcp = (void *) get_zeroed_page(GFP_KERNEL); 952 reipl_block_fcp = (void *) get_zeroed_page(GFP_KERNEL);
937 if (!reipl_block_fcp) 953 if (!reipl_block_fcp)
938 return -ENOMEM; 954 return -ENOMEM;
939 rc = sysfs_create_group(&reipl_subsys.kobj, &reipl_fcp_attr_group); 955 rc = sysfs_create_group(&reipl_kset->kobj, &reipl_fcp_attr_group);
940 if (rc) { 956 if (rc) {
941 free_page((unsigned long)reipl_block_fcp); 957 free_page((unsigned long)reipl_block_fcp);
942 return rc; 958 return rc;
@@ -958,12 +974,12 @@ static int __init reipl_init(void)
958{ 974{
959 int rc; 975 int rc;
960 976
961 rc = firmware_register(&reipl_subsys); 977 reipl_kset = kset_create_and_add("reipl", NULL, firmware_kobj);
962 if (rc) 978 if (!reipl_kset)
963 return rc; 979 return -ENOMEM;
964 rc = subsys_create_file(&reipl_subsys, &reipl_type_attr); 980 rc = sysfs_create_file(&reipl_kset->kobj, &reipl_type_attr.attr);
965 if (rc) { 981 if (rc) {
966 firmware_unregister(&reipl_subsys); 982 kset_unregister(reipl_kset);
967 return rc; 983 return rc;
968 } 984 }
969 rc = reipl_ccw_init(); 985 rc = reipl_ccw_init();
@@ -988,7 +1004,7 @@ static int __init dump_ccw_init(void)
988 dump_block_ccw = (void *) get_zeroed_page(GFP_KERNEL); 1004 dump_block_ccw = (void *) get_zeroed_page(GFP_KERNEL);
989 if (!dump_block_ccw) 1005 if (!dump_block_ccw)
990 return -ENOMEM; 1006 return -ENOMEM;
991 rc = sysfs_create_group(&dump_subsys.kobj, &dump_ccw_attr_group); 1007 rc = sysfs_create_group(&dump_kset->kobj, &dump_ccw_attr_group);
992 if (rc) { 1008 if (rc) {
993 free_page((unsigned long)dump_block_ccw); 1009 free_page((unsigned long)dump_block_ccw);
994 return rc; 1010 return rc;
@@ -1012,7 +1028,7 @@ static int __init dump_fcp_init(void)
1012 dump_block_fcp = (void *) get_zeroed_page(GFP_KERNEL); 1028 dump_block_fcp = (void *) get_zeroed_page(GFP_KERNEL);
1013 if (!dump_block_fcp) 1029 if (!dump_block_fcp)
1014 return -ENOMEM; 1030 return -ENOMEM;
1015 rc = sysfs_create_group(&dump_subsys.kobj, &dump_fcp_attr_group); 1031 rc = sysfs_create_group(&dump_kset->kobj, &dump_fcp_attr_group);
1016 if (rc) { 1032 if (rc) {
1017 free_page((unsigned long)dump_block_fcp); 1033 free_page((unsigned long)dump_block_fcp);
1018 return rc; 1034 return rc;
@@ -1047,12 +1063,12 @@ static int __init dump_init(void)
1047{ 1063{
1048 int rc; 1064 int rc;
1049 1065
1050 rc = firmware_register(&dump_subsys); 1066 dump_kset = kset_create_and_add("dump", NULL, firmware_kobj);
1051 if (rc) 1067 if (!dump_kset)
1052 return rc; 1068 return -ENOMEM;
1053 rc = subsys_create_file(&dump_subsys, &dump_type_attr); 1069 rc = sysfs_create_file(&dump_kset->kobj, &dump_type_attr);
1054 if (rc) { 1070 if (rc) {
1055 firmware_unregister(&dump_subsys); 1071 kset_unregister(dump_kset);
1056 return rc; 1072 return rc;
1057 } 1073 }
1058 rc = dump_ccw_init(); 1074 rc = dump_ccw_init();
@@ -1069,12 +1085,13 @@ static int __init shutdown_actions_init(void)
1069{ 1085{
1070 int rc; 1086 int rc;
1071 1087
1072 rc = firmware_register(&shutdown_actions_subsys); 1088 shutdown_actions_kset = kset_create_and_add("shutdown_actions", NULL,
1073 if (rc) 1089 firmware_kobj);
1074 return rc; 1090 if (!shutdown_actions_kset)
1075 rc = subsys_create_file(&shutdown_actions_subsys, &on_panic_attr); 1091 return -ENOMEM;
1092 rc = sysfs_create_file(&shutdown_actions_kset->kobj, &on_panic_attr);
1076 if (rc) { 1093 if (rc) {
1077 firmware_unregister(&shutdown_actions_subsys); 1094 kset_unregister(shutdown_actions_kset);
1078 return rc; 1095 return rc;
1079 } 1096 }
1080 atomic_notifier_chain_register(&panic_notifier_list, 1097 atomic_notifier_chain_register(&panic_notifier_list,
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index 22b800ce2126..3bbac1293be4 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -1145,7 +1145,7 @@ static void etr_work_fn(struct work_struct *work)
1145 * Sysfs interface functions 1145 * Sysfs interface functions
1146 */ 1146 */
1147static struct sysdev_class etr_sysclass = { 1147static struct sysdev_class etr_sysclass = {
1148 set_kset_name("etr") 1148 .name = "etr",
1149}; 1149};
1150 1150
1151static struct sys_device etr_port0_dev = { 1151static struct sys_device etr_port0_dev = {
diff --git a/arch/sh/drivers/dma/dma-sysfs.c b/arch/sh/drivers/dma/dma-sysfs.c
index eebcd4768bbf..51b57c0d1a3c 100644
--- a/arch/sh/drivers/dma/dma-sysfs.c
+++ b/arch/sh/drivers/dma/dma-sysfs.c
@@ -19,7 +19,7 @@
19#include <asm/dma.h> 19#include <asm/dma.h>
20 20
21static struct sysdev_class dma_sysclass = { 21static struct sysdev_class dma_sysclass = {
22 set_kset_name("dma"), 22 .name = "dma",
23}; 23};
24EXPORT_SYMBOL(dma_sysclass); 24EXPORT_SYMBOL(dma_sysclass);
25 25
diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c
index b22a78c807e6..3008c00eea6b 100644
--- a/arch/sh/kernel/cpu/sh4/sq.c
+++ b/arch/sh/kernel/cpu/sh4/sq.c
@@ -341,17 +341,18 @@ static int __devinit sq_sysdev_add(struct sys_device *sysdev)
341{ 341{
342 unsigned int cpu = sysdev->id; 342 unsigned int cpu = sysdev->id;
343 struct kobject *kobj; 343 struct kobject *kobj;
344 int error;
344 345
345 sq_kobject[cpu] = kzalloc(sizeof(struct kobject), GFP_KERNEL); 346 sq_kobject[cpu] = kzalloc(sizeof(struct kobject), GFP_KERNEL);
346 if (unlikely(!sq_kobject[cpu])) 347 if (unlikely(!sq_kobject[cpu]))
347 return -ENOMEM; 348 return -ENOMEM;
348 349
349 kobj = sq_kobject[cpu]; 350 kobj = sq_kobject[cpu];
350 kobj->parent = &sysdev->kobj; 351 error = kobject_init_and_add(kobj, &ktype_percpu_entry, &sysdev->kobj,
351 kobject_set_name(kobj, "%s", "sq"); 352 "%s", "sq");
352 kobj->ktype = &ktype_percpu_entry; 353 if (!error)
353 354 kobject_uevent(kobj, KOBJ_ADD);
354 return kobject_register(kobj); 355 return error;
355} 356}
356 357
357static int __devexit sq_sysdev_remove(struct sys_device *sysdev) 358static int __devexit sq_sysdev_remove(struct sys_device *sysdev)
@@ -359,7 +360,7 @@ static int __devexit sq_sysdev_remove(struct sys_device *sysdev)
359 unsigned int cpu = sysdev->id; 360 unsigned int cpu = sysdev->id;
360 struct kobject *kobj = sq_kobject[cpu]; 361 struct kobject *kobj = sq_kobject[cpu];
361 362
362 kobject_unregister(kobj); 363 kobject_put(kobj);
363 return 0; 364 return 0;
364} 365}
365 366
diff --git a/arch/sh/kernel/time.c b/arch/sh/kernel/time.c
index a3a67d151e52..2bc04bfee738 100644
--- a/arch/sh/kernel/time.c
+++ b/arch/sh/kernel/time.c
@@ -174,7 +174,7 @@ int timer_resume(struct sys_device *dev)
174#endif 174#endif
175 175
176static struct sysdev_class timer_sysclass = { 176static struct sysdev_class timer_sysclass = {
177 set_kset_name("timer"), 177 .name = "timer",
178 .suspend = timer_suspend, 178 .suspend = timer_suspend,
179 .resume = timer_resume, 179 .resume = timer_resume,
180}; 180};
diff --git a/arch/x86/kernel/apic_32.c b/arch/x86/kernel/apic_32.c
index edb5108e5d0e..a56c782653be 100644
--- a/arch/x86/kernel/apic_32.c
+++ b/arch/x86/kernel/apic_32.c
@@ -1530,7 +1530,7 @@ static int lapic_resume(struct sys_device *dev)
1530 */ 1530 */
1531 1531
1532static struct sysdev_class lapic_sysclass = { 1532static struct sysdev_class lapic_sysclass = {
1533 set_kset_name("lapic"), 1533 .name = "lapic",
1534 .resume = lapic_resume, 1534 .resume = lapic_resume,
1535 .suspend = lapic_suspend, 1535 .suspend = lapic_suspend,
1536}; 1536};
diff --git a/arch/x86/kernel/apic_64.c b/arch/x86/kernel/apic_64.c
index f28ccb588fba..fa6cdee6d303 100644
--- a/arch/x86/kernel/apic_64.c
+++ b/arch/x86/kernel/apic_64.c
@@ -639,7 +639,7 @@ static int lapic_resume(struct sys_device *dev)
639} 639}
640 640
641static struct sysdev_class lapic_sysclass = { 641static struct sysdev_class lapic_sysclass = {
642 set_kset_name("lapic"), 642 .name = "lapic",
643 .resume = lapic_resume, 643 .resume = lapic_resume,
644 .suspend = lapic_suspend, 644 .suspend = lapic_suspend,
645}; 645};
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c
index 9f530ff43c21..8b4507b8469b 100644
--- a/arch/x86/kernel/cpu/intel_cacheinfo.c
+++ b/arch/x86/kernel/cpu/intel_cacheinfo.c
@@ -733,10 +733,8 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev)
733 if (unlikely(retval < 0)) 733 if (unlikely(retval < 0))
734 return retval; 734 return retval;
735 735
736 cache_kobject[cpu]->parent = &sys_dev->kobj; 736 retval = kobject_init_and_add(cache_kobject[cpu], &ktype_percpu_entry,
737 kobject_set_name(cache_kobject[cpu], "%s", "cache"); 737 &sys_dev->kobj, "%s", "cache");
738 cache_kobject[cpu]->ktype = &ktype_percpu_entry;
739 retval = kobject_register(cache_kobject[cpu]);
740 if (retval < 0) { 738 if (retval < 0) {
741 cpuid4_cache_sysfs_exit(cpu); 739 cpuid4_cache_sysfs_exit(cpu);
742 return retval; 740 return retval;
@@ -746,23 +744,23 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev)
746 this_object = INDEX_KOBJECT_PTR(cpu,i); 744 this_object = INDEX_KOBJECT_PTR(cpu,i);
747 this_object->cpu = cpu; 745 this_object->cpu = cpu;
748 this_object->index = i; 746 this_object->index = i;
749 this_object->kobj.parent = cache_kobject[cpu]; 747 retval = kobject_init_and_add(&(this_object->kobj),
750 kobject_set_name(&(this_object->kobj), "index%1lu", i); 748 &ktype_cache, cache_kobject[cpu],
751 this_object->kobj.ktype = &ktype_cache; 749 "index%1lu", i);
752 retval = kobject_register(&(this_object->kobj));
753 if (unlikely(retval)) { 750 if (unlikely(retval)) {
754 for (j = 0; j < i; j++) { 751 for (j = 0; j < i; j++) {
755 kobject_unregister( 752 kobject_put(&(INDEX_KOBJECT_PTR(cpu,j)->kobj));
756 &(INDEX_KOBJECT_PTR(cpu,j)->kobj));
757 } 753 }
758 kobject_unregister(cache_kobject[cpu]); 754 kobject_put(cache_kobject[cpu]);
759 cpuid4_cache_sysfs_exit(cpu); 755 cpuid4_cache_sysfs_exit(cpu);
760 break; 756 break;
761 } 757 }
758 kobject_uevent(&(this_object->kobj), KOBJ_ADD);
762 } 759 }
763 if (!retval) 760 if (!retval)
764 cpu_set(cpu, cache_dev_map); 761 cpu_set(cpu, cache_dev_map);
765 762
763 kobject_uevent(cache_kobject[cpu], KOBJ_ADD);
766 return retval; 764 return retval;
767} 765}
768 766
@@ -778,8 +776,8 @@ static void __cpuinit cache_remove_dev(struct sys_device * sys_dev)
778 cpu_clear(cpu, cache_dev_map); 776 cpu_clear(cpu, cache_dev_map);
779 777
780 for (i = 0; i < num_cache_leaves; i++) 778 for (i = 0; i < num_cache_leaves; i++)
781 kobject_unregister(&(INDEX_KOBJECT_PTR(cpu,i)->kobj)); 779 kobject_put(&(INDEX_KOBJECT_PTR(cpu,i)->kobj));
782 kobject_unregister(cache_kobject[cpu]); 780 kobject_put(cache_kobject[cpu]);
783 cpuid4_cache_sysfs_exit(cpu); 781 cpuid4_cache_sysfs_exit(cpu);
784} 782}
785 783
diff --git a/arch/x86/kernel/cpu/mcheck/mce_64.c b/arch/x86/kernel/cpu/mcheck/mce_64.c
index 4b21d29fb5aa..242e8668dbeb 100644
--- a/arch/x86/kernel/cpu/mcheck/mce_64.c
+++ b/arch/x86/kernel/cpu/mcheck/mce_64.c
@@ -745,7 +745,7 @@ static void mce_restart(void)
745 745
746static struct sysdev_class mce_sysclass = { 746static struct sysdev_class mce_sysclass = {
747 .resume = mce_resume, 747 .resume = mce_resume,
748 set_kset_name("machinecheck"), 748 .name = "machinecheck",
749}; 749};
750 750
751DEFINE_PER_CPU(struct sys_device, device_mce); 751DEFINE_PER_CPU(struct sys_device, device_mce);
diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd_64.c b/arch/x86/kernel/cpu/mcheck/mce_amd_64.c
index 752fb16a817d..753588755fee 100644
--- a/arch/x86/kernel/cpu/mcheck/mce_amd_64.c
+++ b/arch/x86/kernel/cpu/mcheck/mce_amd_64.c
@@ -65,7 +65,7 @@ static struct threshold_block threshold_defaults = {
65}; 65};
66 66
67struct threshold_bank { 67struct threshold_bank {
68 struct kobject kobj; 68 struct kobject *kobj;
69 struct threshold_block *blocks; 69 struct threshold_block *blocks;
70 cpumask_t cpus; 70 cpumask_t cpus;
71}; 71};
@@ -432,10 +432,9 @@ static __cpuinit int allocate_threshold_blocks(unsigned int cpu,
432 else 432 else
433 per_cpu(threshold_banks, cpu)[bank]->blocks = b; 433 per_cpu(threshold_banks, cpu)[bank]->blocks = b;
434 434
435 kobject_set_name(&b->kobj, "misc%i", block); 435 err = kobject_init_and_add(&b->kobj, &threshold_ktype,
436 b->kobj.parent = &per_cpu(threshold_banks, cpu)[bank]->kobj; 436 per_cpu(threshold_banks, cpu)[bank]->kobj,
437 b->kobj.ktype = &threshold_ktype; 437 "misc%i", block);
438 err = kobject_register(&b->kobj);
439 if (err) 438 if (err)
440 goto out_free; 439 goto out_free;
441recurse: 440recurse:
@@ -451,11 +450,13 @@ recurse:
451 if (err) 450 if (err)
452 goto out_free; 451 goto out_free;
453 452
453 kobject_uevent(&b->kobj, KOBJ_ADD);
454
454 return err; 455 return err;
455 456
456out_free: 457out_free:
457 if (b) { 458 if (b) {
458 kobject_unregister(&b->kobj); 459 kobject_put(&b->kobj);
459 kfree(b); 460 kfree(b);
460 } 461 }
461 return err; 462 return err;
@@ -489,7 +490,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank)
489 goto out; 490 goto out;
490 491
491 err = sysfs_create_link(&per_cpu(device_mce, cpu).kobj, 492 err = sysfs_create_link(&per_cpu(device_mce, cpu).kobj,
492 &b->kobj, name); 493 b->kobj, name);
493 if (err) 494 if (err)
494 goto out; 495 goto out;
495 496
@@ -505,16 +506,15 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank)
505 goto out; 506 goto out;
506 } 507 }
507 508
508 kobject_set_name(&b->kobj, "threshold_bank%i", bank); 509 b->kobj = kobject_create_and_add(name, &per_cpu(device_mce, cpu).kobj);
509 b->kobj.parent = &per_cpu(device_mce, cpu).kobj; 510 if (!b->kobj)
511 goto out_free;
512
510#ifndef CONFIG_SMP 513#ifndef CONFIG_SMP
511 b->cpus = CPU_MASK_ALL; 514 b->cpus = CPU_MASK_ALL;
512#else 515#else
513 b->cpus = per_cpu(cpu_core_map, cpu); 516 b->cpus = per_cpu(cpu_core_map, cpu);
514#endif 517#endif
515 err = kobject_register(&b->kobj);
516 if (err)
517 goto out_free;
518 518
519 per_cpu(threshold_banks, cpu)[bank] = b; 519 per_cpu(threshold_banks, cpu)[bank] = b;
520 520
@@ -531,7 +531,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank)
531 continue; 531 continue;
532 532
533 err = sysfs_create_link(&per_cpu(device_mce, i).kobj, 533 err = sysfs_create_link(&per_cpu(device_mce, i).kobj,
534 &b->kobj, name); 534 b->kobj, name);
535 if (err) 535 if (err)
536 goto out; 536 goto out;
537 537
@@ -581,7 +581,7 @@ static void deallocate_threshold_block(unsigned int cpu,
581 return; 581 return;
582 582
583 list_for_each_entry_safe(pos, tmp, &head->blocks->miscj, miscj) { 583 list_for_each_entry_safe(pos, tmp, &head->blocks->miscj, miscj) {
584 kobject_unregister(&pos->kobj); 584 kobject_put(&pos->kobj);
585 list_del(&pos->miscj); 585 list_del(&pos->miscj);
586 kfree(pos); 586 kfree(pos);
587 } 587 }
@@ -627,7 +627,7 @@ static void threshold_remove_bank(unsigned int cpu, int bank)
627 deallocate_threshold_block(cpu, bank); 627 deallocate_threshold_block(cpu, bank);
628 628
629free_out: 629free_out:
630 kobject_unregister(&b->kobj); 630 kobject_put(b->kobj);
631 kfree(b); 631 kfree(b);
632 per_cpu(threshold_banks, cpu)[bank] = NULL; 632 per_cpu(threshold_banks, cpu)[bank] = NULL;
633} 633}
diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c
index 05c9936a16cc..d387c770c518 100644
--- a/arch/x86/kernel/cpuid.c
+++ b/arch/x86/kernel/cpuid.c
@@ -157,15 +157,15 @@ static int __cpuinit cpuid_class_cpu_callback(struct notifier_block *nfb,
157 157
158 switch (action) { 158 switch (action) {
159 case CPU_UP_PREPARE: 159 case CPU_UP_PREPARE:
160 case CPU_UP_PREPARE_FROZEN:
161 err = cpuid_device_create(cpu); 160 err = cpuid_device_create(cpu);
162 break; 161 break;
163 case CPU_UP_CANCELED: 162 case CPU_UP_CANCELED:
164 case CPU_UP_CANCELED_FROZEN:
165 case CPU_DEAD: 163 case CPU_DEAD:
166 case CPU_DEAD_FROZEN:
167 cpuid_device_destroy(cpu); 164 cpuid_device_destroy(cpu);
168 break; 165 break;
166 case CPU_UP_CANCELED_FROZEN:
167 destroy_suspended_device(cpuid_class, MKDEV(CPUID_MAJOR, cpu));
168 break;
169 } 169 }
170 return err ? NOTIFY_BAD : NOTIFY_OK; 170 return err ? NOTIFY_BAD : NOTIFY_OK;
171} 171}
diff --git a/arch/x86/kernel/i8237.c b/arch/x86/kernel/i8237.c
index 29313832df0c..dbd6c1d1b638 100644
--- a/arch/x86/kernel/i8237.c
+++ b/arch/x86/kernel/i8237.c
@@ -51,7 +51,7 @@ static int i8237A_suspend(struct sys_device *dev, pm_message_t state)
51} 51}
52 52
53static struct sysdev_class i8237_sysdev_class = { 53static struct sysdev_class i8237_sysdev_class = {
54 set_kset_name("i8237"), 54 .name = "i8237",
55 .suspend = i8237A_suspend, 55 .suspend = i8237A_suspend,
56 .resume = i8237A_resume, 56 .resume = i8237A_resume,
57}; 57};
diff --git a/arch/x86/kernel/i8259_32.c b/arch/x86/kernel/i8259_32.c
index f634fc715c99..5f3496d01984 100644
--- a/arch/x86/kernel/i8259_32.c
+++ b/arch/x86/kernel/i8259_32.c
@@ -258,7 +258,7 @@ static int i8259A_shutdown(struct sys_device *dev)
258} 258}
259 259
260static struct sysdev_class i8259_sysdev_class = { 260static struct sysdev_class i8259_sysdev_class = {
261 set_kset_name("i8259"), 261 .name = "i8259",
262 .suspend = i8259A_suspend, 262 .suspend = i8259A_suspend,
263 .resume = i8259A_resume, 263 .resume = i8259A_resume,
264 .shutdown = i8259A_shutdown, 264 .shutdown = i8259A_shutdown,
diff --git a/arch/x86/kernel/i8259_64.c b/arch/x86/kernel/i8259_64.c
index 3f27ea0b9816..ba6d57286f56 100644
--- a/arch/x86/kernel/i8259_64.c
+++ b/arch/x86/kernel/i8259_64.c
@@ -370,7 +370,7 @@ static int i8259A_shutdown(struct sys_device *dev)
370} 370}
371 371
372static struct sysdev_class i8259_sysdev_class = { 372static struct sysdev_class i8259_sysdev_class = {
373 set_kset_name("i8259"), 373 .name = "i8259",
374 .suspend = i8259A_suspend, 374 .suspend = i8259A_suspend,
375 .resume = i8259A_resume, 375 .resume = i8259A_resume,
376 .shutdown = i8259A_shutdown, 376 .shutdown = i8259A_shutdown,
diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c
index a6b1490e00c4..ab77f1905469 100644
--- a/arch/x86/kernel/io_apic_32.c
+++ b/arch/x86/kernel/io_apic_32.c
@@ -2401,7 +2401,7 @@ static int ioapic_resume(struct sys_device *dev)
2401} 2401}
2402 2402
2403static struct sysdev_class ioapic_sysdev_class = { 2403static struct sysdev_class ioapic_sysdev_class = {
2404 set_kset_name("ioapic"), 2404 .name = "ioapic",
2405 .suspend = ioapic_suspend, 2405 .suspend = ioapic_suspend,
2406 .resume = ioapic_resume, 2406 .resume = ioapic_resume,
2407}; 2407};
diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c
index cbac1670c7c3..23a3ac06a23e 100644
--- a/arch/x86/kernel/io_apic_64.c
+++ b/arch/x86/kernel/io_apic_64.c
@@ -1850,7 +1850,7 @@ static int ioapic_resume(struct sys_device *dev)
1850} 1850}
1851 1851
1852static struct sysdev_class ioapic_sysdev_class = { 1852static struct sysdev_class ioapic_sysdev_class = {
1853 set_kset_name("ioapic"), 1853 .name = "ioapic",
1854 .suspend = ioapic_suspend, 1854 .suspend = ioapic_suspend,
1855 .resume = ioapic_resume, 1855 .resume = ioapic_resume,
1856}; 1856};
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
index ee6eba4ecfea..21f6e3c0be18 100644
--- a/arch/x86/kernel/msr.c
+++ b/arch/x86/kernel/msr.c
@@ -155,15 +155,15 @@ static int __cpuinit msr_class_cpu_callback(struct notifier_block *nfb,
155 155
156 switch (action) { 156 switch (action) {
157 case CPU_UP_PREPARE: 157 case CPU_UP_PREPARE:
158 case CPU_UP_PREPARE_FROZEN:
159 err = msr_device_create(cpu); 158 err = msr_device_create(cpu);
160 break; 159 break;
161 case CPU_UP_CANCELED: 160 case CPU_UP_CANCELED:
162 case CPU_UP_CANCELED_FROZEN:
163 case CPU_DEAD: 161 case CPU_DEAD:
164 case CPU_DEAD_FROZEN:
165 msr_device_destroy(cpu); 162 msr_device_destroy(cpu);
166 break; 163 break;
164 case CPU_UP_CANCELED_FROZEN:
165 destroy_suspended_device(msr_class, MKDEV(MSR_MAJOR, cpu));
166 break;
167 } 167 }
168 return err ? NOTIFY_BAD : NOTIFY_OK; 168 return err ? NOTIFY_BAD : NOTIFY_OK;
169} 169}
diff --git a/arch/x86/kernel/nmi_32.c b/arch/x86/kernel/nmi_32.c
index 852db2906921..4f4bfd3a88b6 100644
--- a/arch/x86/kernel/nmi_32.c
+++ b/arch/x86/kernel/nmi_32.c
@@ -176,7 +176,7 @@ static int lapic_nmi_resume(struct sys_device *dev)
176 176
177 177
178static struct sysdev_class nmi_sysclass = { 178static struct sysdev_class nmi_sysclass = {
179 set_kset_name("lapic_nmi"), 179 .name = "lapic_nmi",
180 .resume = lapic_nmi_resume, 180 .resume = lapic_nmi_resume,
181 .suspend = lapic_nmi_suspend, 181 .suspend = lapic_nmi_suspend,
182}; 182};
diff --git a/arch/x86/kernel/nmi_64.c b/arch/x86/kernel/nmi_64.c
index 4253c4e8849c..c3d1476b6a11 100644
--- a/arch/x86/kernel/nmi_64.c
+++ b/arch/x86/kernel/nmi_64.c
@@ -211,7 +211,7 @@ static int lapic_nmi_resume(struct sys_device *dev)
211} 211}
212 212
213static struct sysdev_class nmi_sysclass = { 213static struct sysdev_class nmi_sysclass = {
214 set_kset_name("lapic_nmi"), 214 .name = "lapic_nmi",
215 .resume = lapic_nmi_resume, 215 .resume = lapic_nmi_resume,
216 .suspend = lapic_nmi_suspend, 216 .suspend = lapic_nmi_suspend,
217}; 217};
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
index 944bbcdd2b8d..c8ab79ef4276 100644
--- a/arch/x86/oprofile/nmi_int.c
+++ b/arch/x86/oprofile/nmi_int.c
@@ -51,7 +51,7 @@ static int nmi_resume(struct sys_device *dev)
51 51
52 52
53static struct sysdev_class oprofile_sysclass = { 53static struct sysdev_class oprofile_sysclass = {
54 set_kset_name("oprofile"), 54 .name = "oprofile",
55 .resume = nmi_resume, 55 .resume = nmi_resume,
56 .suspend = nmi_suspend, 56 .suspend = nmi_suspend,
57}; 57};