mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
s390/iucv: Provide iucv_alloc_device() / iucv_release_device()
Provide iucv_alloc_device() and iucv_release_device() helper functions, which can be used to deduplicate more or less identical IUCV device allocation and release code in four different drivers. Suggested-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Alexandra Winter <wintera@linux.ibm.com> Link: https://lore.kernel.org/r/20240506194454.1160315-2-hca@linux.ibm.com Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
This commit is contained in:
parent
1084562ec8
commit
4452e8ef8c
@ -84,6 +84,12 @@ struct iucv_array {
|
||||
extern const struct bus_type iucv_bus;
|
||||
extern struct device *iucv_root;
|
||||
|
||||
struct device_driver;
|
||||
|
||||
struct device *iucv_alloc_device(const struct attribute_group **attrs,
|
||||
struct device_driver *driver, void *priv,
|
||||
const char *fmt, ...) __printf(4, 5);
|
||||
|
||||
/*
|
||||
* struct iucv_path
|
||||
* pathid: 16 bit path identification
|
||||
|
@ -76,6 +76,41 @@ EXPORT_SYMBOL(iucv_bus);
|
||||
struct device *iucv_root;
|
||||
EXPORT_SYMBOL(iucv_root);
|
||||
|
||||
static void iucv_release_device(struct device *device)
|
||||
{
|
||||
kfree(device);
|
||||
}
|
||||
|
||||
struct device *iucv_alloc_device(const struct attribute_group **attrs,
|
||||
struct device_driver *driver,
|
||||
void *priv, const char *fmt, ...)
|
||||
{
|
||||
struct device *dev;
|
||||
va_list vargs;
|
||||
int rc;
|
||||
|
||||
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
if (!dev)
|
||||
goto out_error;
|
||||
va_start(vargs, fmt);
|
||||
rc = dev_set_name(dev, fmt, vargs);
|
||||
va_end(vargs);
|
||||
if (rc)
|
||||
goto out_error;
|
||||
dev->bus = &iucv_bus;
|
||||
dev->parent = iucv_root;
|
||||
dev->driver = driver;
|
||||
dev->groups = attrs;
|
||||
dev->release = iucv_release_device;
|
||||
dev_set_drvdata(dev, priv);
|
||||
return dev;
|
||||
|
||||
out_error:
|
||||
kfree(dev);
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(iucv_alloc_device);
|
||||
|
||||
static int iucv_available;
|
||||
|
||||
/* General IUCV interrupt structure */
|
||||
|
Loading…
Reference in New Issue
Block a user