| /* | 
 |  *  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); | 
 | 	strncpy(dev->bus_id, name, min(strlen(name), (size_t)BUS_ID_SIZE)); | 
 | 	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); |