Commit 73db144b authored by Jan Beulich's avatar Jan Beulich Committed by Konrad Rzeszutek Wilk

Xen: consolidate and simplify struct xenbus_driver instantiation

The 'name', 'owner', and 'mod_name' members are redundant with the
identically named fields in the 'driver' sub-structure. Rather than
switching each instance to specify these fields explicitly, introduce
a macro to simplify this.

Eliminate further redundancy by allowing the drvname argument to
DEFINE_XENBUS_DRIVER() to be blank (in which case the first entry from
the ID table will be used for .driver.name).

Also eliminate the questionable xenbus_register_{back,front}end()
wrappers - their sole remaining purpose was the checking of the
'owner' field, proper setting of which shouldn't be an issue anymore
when the macro gets used.

v2: Restore DRV_NAME for the driver name in xen-pciback.
Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: David S. Miller <davem@davemloft.net>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent 2e163414
...@@ -787,17 +787,14 @@ static const struct xenbus_device_id xen_blkbk_ids[] = { ...@@ -787,17 +787,14 @@ static const struct xenbus_device_id xen_blkbk_ids[] = {
}; };
static struct xenbus_driver xen_blkbk = { static DEFINE_XENBUS_DRIVER(xen_blkbk, ,
.name = "vbd",
.owner = THIS_MODULE,
.ids = xen_blkbk_ids,
.probe = xen_blkbk_probe, .probe = xen_blkbk_probe,
.remove = xen_blkbk_remove, .remove = xen_blkbk_remove,
.otherend_changed = frontend_changed .otherend_changed = frontend_changed
}; );
int xen_blkif_xenbus_init(void) int xen_blkif_xenbus_init(void)
{ {
return xenbus_register_backend(&xen_blkbk); return xenbus_register_backend(&xen_blkbk_driver);
} }
...@@ -1437,16 +1437,13 @@ static const struct xenbus_device_id blkfront_ids[] = { ...@@ -1437,16 +1437,13 @@ static const struct xenbus_device_id blkfront_ids[] = {
{ "" } { "" }
}; };
static struct xenbus_driver blkfront = { static DEFINE_XENBUS_DRIVER(blkfront, ,
.name = "vbd",
.owner = THIS_MODULE,
.ids = blkfront_ids,
.probe = blkfront_probe, .probe = blkfront_probe,
.remove = blkfront_remove, .remove = blkfront_remove,
.resume = blkfront_resume, .resume = blkfront_resume,
.otherend_changed = blkback_changed, .otherend_changed = blkback_changed,
.is_ready = blkfront_is_ready, .is_ready = blkfront_is_ready,
}; );
static int __init xlblk_init(void) static int __init xlblk_init(void)
{ {
...@@ -1461,7 +1458,7 @@ static int __init xlblk_init(void) ...@@ -1461,7 +1458,7 @@ static int __init xlblk_init(void)
return -ENODEV; return -ENODEV;
} }
ret = xenbus_register_frontend(&blkfront); ret = xenbus_register_frontend(&blkfront_driver);
if (ret) { if (ret) {
unregister_blkdev(XENVBD_MAJOR, DEV_NAME); unregister_blkdev(XENVBD_MAJOR, DEV_NAME);
return ret; return ret;
...@@ -1474,7 +1471,7 @@ module_init(xlblk_init); ...@@ -1474,7 +1471,7 @@ module_init(xlblk_init);
static void __exit xlblk_exit(void) static void __exit xlblk_exit(void)
{ {
return xenbus_unregister_driver(&blkfront); return xenbus_unregister_driver(&blkfront_driver);
} }
module_exit(xlblk_exit); module_exit(xlblk_exit);
......
...@@ -361,15 +361,12 @@ static const struct xenbus_device_id xenkbd_ids[] = { ...@@ -361,15 +361,12 @@ static const struct xenbus_device_id xenkbd_ids[] = {
{ "" } { "" }
}; };
static struct xenbus_driver xenkbd_driver = { static DEFINE_XENBUS_DRIVER(xenkbd, ,
.name = "vkbd",
.owner = THIS_MODULE,
.ids = xenkbd_ids,
.probe = xenkbd_probe, .probe = xenkbd_probe,
.remove = xenkbd_remove, .remove = xenkbd_remove,
.resume = xenkbd_resume, .resume = xenkbd_resume,
.otherend_changed = xenkbd_backend_changed, .otherend_changed = xenkbd_backend_changed,
}; );
static int __init xenkbd_init(void) static int __init xenkbd_init(void)
{ {
......
...@@ -474,17 +474,14 @@ static const struct xenbus_device_id netback_ids[] = { ...@@ -474,17 +474,14 @@ static const struct xenbus_device_id netback_ids[] = {
}; };
static struct xenbus_driver netback = { static DEFINE_XENBUS_DRIVER(netback, ,
.name = "vif",
.owner = THIS_MODULE,
.ids = netback_ids,
.probe = netback_probe, .probe = netback_probe,
.remove = netback_remove, .remove = netback_remove,
.uevent = netback_uevent, .uevent = netback_uevent,
.otherend_changed = frontend_changed, .otherend_changed = frontend_changed,
}; );
int xenvif_xenbus_init(void) int xenvif_xenbus_init(void)
{ {
return xenbus_register_backend(&netback); return xenbus_register_backend(&netback_driver);
} }
...@@ -1910,7 +1910,7 @@ static void xennet_sysfs_delif(struct net_device *netdev) ...@@ -1910,7 +1910,7 @@ static void xennet_sysfs_delif(struct net_device *netdev)
#endif /* CONFIG_SYSFS */ #endif /* CONFIG_SYSFS */
static struct xenbus_device_id netfront_ids[] = { static const struct xenbus_device_id netfront_ids[] = {
{ "vif" }, { "vif" },
{ "" } { "" }
}; };
...@@ -1937,15 +1937,12 @@ static int __devexit xennet_remove(struct xenbus_device *dev) ...@@ -1937,15 +1937,12 @@ static int __devexit xennet_remove(struct xenbus_device *dev)
return 0; return 0;
} }
static struct xenbus_driver netfront_driver = { static DEFINE_XENBUS_DRIVER(netfront, ,
.name = "vif",
.owner = THIS_MODULE,
.ids = netfront_ids,
.probe = netfront_probe, .probe = netfront_probe,
.remove = __devexit_p(xennet_remove), .remove = __devexit_p(xennet_remove),
.resume = netfront_resume, .resume = netfront_resume,
.otherend_changed = netback_changed, .otherend_changed = netback_changed,
}; );
static int __init netif_init(void) static int __init netif_init(void)
{ {
......
...@@ -1126,14 +1126,11 @@ static const struct xenbus_device_id xenpci_ids[] = { ...@@ -1126,14 +1126,11 @@ static const struct xenbus_device_id xenpci_ids[] = {
{""}, {""},
}; };
static struct xenbus_driver xenbus_pcifront_driver = { static DEFINE_XENBUS_DRIVER(xenpci, "pcifront",
.name = "pcifront",
.owner = THIS_MODULE,
.ids = xenpci_ids,
.probe = pcifront_xenbus_probe, .probe = pcifront_xenbus_probe,
.remove = pcifront_xenbus_remove, .remove = pcifront_xenbus_remove,
.otherend_changed = pcifront_backend_changed, .otherend_changed = pcifront_backend_changed,
}; );
static int __init pcifront_init(void) static int __init pcifront_init(void)
{ {
...@@ -1142,12 +1139,12 @@ static int __init pcifront_init(void) ...@@ -1142,12 +1139,12 @@ static int __init pcifront_init(void)
pci_frontend_registrar(1 /* enable */); pci_frontend_registrar(1 /* enable */);
return xenbus_register_frontend(&xenbus_pcifront_driver); return xenbus_register_frontend(&xenpci_driver);
} }
static void __exit pcifront_cleanup(void) static void __exit pcifront_cleanup(void)
{ {
xenbus_unregister_driver(&xenbus_pcifront_driver); xenbus_unregister_driver(&xenpci_driver);
pci_frontend_registrar(0 /* disable */); pci_frontend_registrar(0 /* disable */);
} }
module_init(pcifront_init); module_init(pcifront_init);
......
...@@ -671,20 +671,17 @@ static void xenfb_backend_changed(struct xenbus_device *dev, ...@@ -671,20 +671,17 @@ static void xenfb_backend_changed(struct xenbus_device *dev,
} }
} }
static struct xenbus_device_id xenfb_ids[] = { static const struct xenbus_device_id xenfb_ids[] = {
{ "vfb" }, { "vfb" },
{ "" } { "" }
}; };
static struct xenbus_driver xenfb_driver = { static DEFINE_XENBUS_DRIVER(xenfb, ,
.name = "vfb",
.owner = THIS_MODULE,
.ids = xenfb_ids,
.probe = xenfb_probe, .probe = xenfb_probe,
.remove = xenfb_remove, .remove = xenfb_remove,
.resume = xenfb_resume, .resume = xenfb_resume,
.otherend_changed = xenfb_backend_changed, .otherend_changed = xenfb_backend_changed,
}; );
static int __init xenfb_init(void) static int __init xenfb_init(void)
{ {
......
...@@ -707,19 +707,16 @@ static int xen_pcibk_xenbus_remove(struct xenbus_device *dev) ...@@ -707,19 +707,16 @@ static int xen_pcibk_xenbus_remove(struct xenbus_device *dev)
return 0; return 0;
} }
static const struct xenbus_device_id xenpci_ids[] = { static const struct xenbus_device_id xen_pcibk_ids[] = {
{"pci"}, {"pci"},
{""}, {""},
}; };
static struct xenbus_driver xenbus_xen_pcibk_driver = { static DEFINE_XENBUS_DRIVER(xen_pcibk, DRV_NAME,
.name = DRV_NAME,
.owner = THIS_MODULE,
.ids = xenpci_ids,
.probe = xen_pcibk_xenbus_probe, .probe = xen_pcibk_xenbus_probe,
.remove = xen_pcibk_xenbus_remove, .remove = xen_pcibk_xenbus_remove,
.otherend_changed = xen_pcibk_frontend_changed, .otherend_changed = xen_pcibk_frontend_changed,
}; );
const struct xen_pcibk_backend *__read_mostly xen_pcibk_backend; const struct xen_pcibk_backend *__read_mostly xen_pcibk_backend;
...@@ -735,11 +732,11 @@ int __init xen_pcibk_xenbus_register(void) ...@@ -735,11 +732,11 @@ int __init xen_pcibk_xenbus_register(void)
if (passthrough) if (passthrough)
xen_pcibk_backend = &xen_pcibk_passthrough_backend; xen_pcibk_backend = &xen_pcibk_passthrough_backend;
pr_info(DRV_NAME ": backend is %s\n", xen_pcibk_backend->name); pr_info(DRV_NAME ": backend is %s\n", xen_pcibk_backend->name);
return xenbus_register_backend(&xenbus_xen_pcibk_driver); return xenbus_register_backend(&xen_pcibk_driver);
} }
void __exit xen_pcibk_xenbus_unregister(void) void __exit xen_pcibk_xenbus_unregister(void)
{ {
destroy_workqueue(xen_pcibk_wq); destroy_workqueue(xen_pcibk_wq);
xenbus_unregister_driver(&xenbus_xen_pcibk_driver); xenbus_unregister_driver(&xen_pcibk_driver);
} }
...@@ -291,14 +291,9 @@ void xenbus_dev_shutdown(struct device *_dev) ...@@ -291,14 +291,9 @@ void xenbus_dev_shutdown(struct device *_dev)
EXPORT_SYMBOL_GPL(xenbus_dev_shutdown); EXPORT_SYMBOL_GPL(xenbus_dev_shutdown);
int xenbus_register_driver_common(struct xenbus_driver *drv, int xenbus_register_driver_common(struct xenbus_driver *drv,
struct xen_bus_type *bus, struct xen_bus_type *bus)
struct module *owner,
const char *mod_name)
{ {
drv->driver.name = drv->name;
drv->driver.bus = &bus->bus; drv->driver.bus = &bus->bus;
drv->driver.owner = owner;
drv->driver.mod_name = mod_name;
return driver_register(&drv->driver); return driver_register(&drv->driver);
} }
......
...@@ -53,9 +53,7 @@ extern int xenbus_match(struct device *_dev, struct device_driver *_drv); ...@@ -53,9 +53,7 @@ extern int xenbus_match(struct device *_dev, struct device_driver *_drv);
extern int xenbus_dev_probe(struct device *_dev); extern int xenbus_dev_probe(struct device *_dev);
extern int xenbus_dev_remove(struct device *_dev); extern int xenbus_dev_remove(struct device *_dev);
extern int xenbus_register_driver_common(struct xenbus_driver *drv, extern int xenbus_register_driver_common(struct xenbus_driver *drv,
struct xen_bus_type *bus, struct xen_bus_type *bus);
struct module *owner,
const char *mod_name);
extern int xenbus_probe_node(struct xen_bus_type *bus, extern int xenbus_probe_node(struct xen_bus_type *bus,
const char *type, const char *type,
const char *nodename); const char *nodename);
......
...@@ -232,15 +232,13 @@ int xenbus_dev_is_online(struct xenbus_device *dev) ...@@ -232,15 +232,13 @@ int xenbus_dev_is_online(struct xenbus_device *dev)
} }
EXPORT_SYMBOL_GPL(xenbus_dev_is_online); EXPORT_SYMBOL_GPL(xenbus_dev_is_online);
int __xenbus_register_backend(struct xenbus_driver *drv, int xenbus_register_backend(struct xenbus_driver *drv)
struct module *owner, const char *mod_name)
{ {
drv->read_otherend_details = read_frontend_details; drv->read_otherend_details = read_frontend_details;
return xenbus_register_driver_common(drv, &xenbus_backend, return xenbus_register_driver_common(drv, &xenbus_backend);
owner, mod_name);
} }
EXPORT_SYMBOL_GPL(__xenbus_register_backend); EXPORT_SYMBOL_GPL(xenbus_register_backend);
static int backend_probe_and_watch(struct notifier_block *notifier, static int backend_probe_and_watch(struct notifier_block *notifier,
unsigned long event, unsigned long event,
......
...@@ -230,15 +230,13 @@ static void wait_for_devices(struct xenbus_driver *xendrv) ...@@ -230,15 +230,13 @@ static void wait_for_devices(struct xenbus_driver *xendrv)
print_device_status); print_device_status);
} }
int __xenbus_register_frontend(struct xenbus_driver *drv, int xenbus_register_frontend(struct xenbus_driver *drv)
struct module *owner, const char *mod_name)
{ {
int ret; int ret;
drv->read_otherend_details = read_backend_details; drv->read_otherend_details = read_backend_details;
ret = xenbus_register_driver_common(drv, &xenbus_frontend, ret = xenbus_register_driver_common(drv, &xenbus_frontend);
owner, mod_name);
if (ret) if (ret)
return ret; return ret;
...@@ -247,7 +245,7 @@ int __xenbus_register_frontend(struct xenbus_driver *drv, ...@@ -247,7 +245,7 @@ int __xenbus_register_frontend(struct xenbus_driver *drv,
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(__xenbus_register_frontend); EXPORT_SYMBOL_GPL(xenbus_register_frontend);
static DECLARE_WAIT_QUEUE_HEAD(backend_state_wq); static DECLARE_WAIT_QUEUE_HEAD(backend_state_wq);
static int backend_state; static int backend_state;
......
...@@ -85,8 +85,6 @@ struct xenbus_device_id ...@@ -85,8 +85,6 @@ struct xenbus_device_id
/* A xenbus driver. */ /* A xenbus driver. */
struct xenbus_driver { struct xenbus_driver {
char *name;
struct module *owner;
const struct xenbus_device_id *ids; const struct xenbus_device_id *ids;
int (*probe)(struct xenbus_device *dev, int (*probe)(struct xenbus_device *dev,
const struct xenbus_device_id *id); const struct xenbus_device_id *id);
...@@ -101,31 +99,20 @@ struct xenbus_driver { ...@@ -101,31 +99,20 @@ struct xenbus_driver {
int (*is_ready)(struct xenbus_device *dev); int (*is_ready)(struct xenbus_device *dev);
}; };
static inline struct xenbus_driver *to_xenbus_driver(struct device_driver *drv) #define DEFINE_XENBUS_DRIVER(var, drvname, methods...) \
{ struct xenbus_driver var ## _driver = { \
return container_of(drv, struct xenbus_driver, driver); .driver.name = drvname + 0 ?: var ## _ids->devicetype, \
.driver.owner = THIS_MODULE, \
.ids = var ## _ids, ## methods \
} }
int __must_check __xenbus_register_frontend(struct xenbus_driver *drv, static inline struct xenbus_driver *to_xenbus_driver(struct device_driver *drv)
struct module *owner,
const char *mod_name);
static inline int __must_check
xenbus_register_frontend(struct xenbus_driver *drv)
{ {
WARN_ON(drv->owner != THIS_MODULE); return container_of(drv, struct xenbus_driver, driver);
return __xenbus_register_frontend(drv, THIS_MODULE, KBUILD_MODNAME);
} }
int __must_check __xenbus_register_backend(struct xenbus_driver *drv, int __must_check xenbus_register_frontend(struct xenbus_driver *);
struct module *owner, int __must_check xenbus_register_backend(struct xenbus_driver *);
const char *mod_name);
static inline int __must_check
xenbus_register_backend(struct xenbus_driver *drv)
{
WARN_ON(drv->owner != THIS_MODULE);
return __xenbus_register_backend(drv, THIS_MODULE, KBUILD_MODNAME);
}
void xenbus_unregister_driver(struct xenbus_driver *drv); void xenbus_unregister_driver(struct xenbus_driver *drv);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment