xen: remove DEFINE_XENBUS_DRIVER() macro

The DEFINE_XENBUS_DRIVER() macro looks a bit weird and causes sparse
errors.

Replace the uses with standard structure definitions instead.  This is
similar to pci and usb device registration.

Signed-off-by: David Vrabel <david.vrabel@citrix.com>
This commit is contained in:
David Vrabel 2014-09-08 17:30:41 +01:00
parent 305559f165
commit 95afae4814
17 changed files with 78 additions and 65 deletions

View file

@ -907,22 +907,17 @@ static int connect_ring(struct backend_info *be)
return 0; return 0;
} }
/* ** Driver Registration ** */
static const struct xenbus_device_id xen_blkbk_ids[] = { static const struct xenbus_device_id xen_blkbk_ids[] = {
{ "vbd" }, { "vbd" },
{ "" } { "" }
}; };
static struct xenbus_driver xen_blkbk_driver = {
static DEFINE_XENBUS_DRIVER(xen_blkbk, , .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)
{ {

View file

@ -2055,13 +2055,14 @@ static const struct xenbus_device_id blkfront_ids[] = {
{ "" } { "" }
}; };
static DEFINE_XENBUS_DRIVER(blkfront, , static struct xenbus_driver blkfront_driver = {
.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)
{ {

View file

@ -367,12 +367,13 @@ static const struct xenbus_device_id tpmfront_ids[] = {
}; };
MODULE_ALIAS("xen:vtpm"); MODULE_ALIAS("xen:vtpm");
static DEFINE_XENBUS_DRIVER(tpmfront, , static struct xenbus_driver tpmfront_driver = {
.probe = tpmfront_probe, .ids = tpmfront_ids,
.remove = tpmfront_remove, .probe = tpmfront_probe,
.resume = tpmfront_resume, .remove = tpmfront_remove,
.otherend_changed = backend_changed, .resume = tpmfront_resume,
); .otherend_changed = backend_changed,
};
static int __init xen_tpmfront_init(void) static int __init xen_tpmfront_init(void)
{ {

View file

@ -365,12 +365,13 @@ static const struct xenbus_device_id xenkbd_ids[] = {
{ "" } { "" }
}; };
static DEFINE_XENBUS_DRIVER(xenkbd, , static struct xenbus_driver xenkbd_driver = {
.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)
{ {

View file

@ -937,22 +937,18 @@ static int read_xenbus_vif_flags(struct backend_info *be)
return 0; return 0;
} }
/* ** Driver Registration ** */
static const struct xenbus_device_id netback_ids[] = { static const struct xenbus_device_id netback_ids[] = {
{ "vif" }, { "vif" },
{ "" } { "" }
}; };
static struct xenbus_driver netback_driver = {
static DEFINE_XENBUS_DRIVER(netback, , .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)
{ {

View file

@ -2300,12 +2300,6 @@ static void xennet_sysfs_delif(struct net_device *netdev)
#endif /* CONFIG_SYSFS */ #endif /* CONFIG_SYSFS */
static const struct xenbus_device_id netfront_ids[] = {
{ "vif" },
{ "" }
};
static int xennet_remove(struct xenbus_device *dev) static int xennet_remove(struct xenbus_device *dev)
{ {
struct netfront_info *info = dev_get_drvdata(&dev->dev); struct netfront_info *info = dev_get_drvdata(&dev->dev);
@ -2338,12 +2332,18 @@ static int xennet_remove(struct xenbus_device *dev)
return 0; return 0;
} }
static DEFINE_XENBUS_DRIVER(netfront, , static const struct xenbus_device_id netfront_ids[] = {
{ "vif" },
{ "" }
};
static struct xenbus_driver netfront_driver = {
.ids = netfront_ids,
.probe = netfront_probe, .probe = netfront_probe,
.remove = xennet_remove, .remove = 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)
{ {

View file

@ -1136,11 +1136,13 @@ static const struct xenbus_device_id xenpci_ids[] = {
{""}, {""},
}; };
static DEFINE_XENBUS_DRIVER(xenpci, "pcifront", static struct xenbus_driver xenpci_driver = {
.name = "pcifront",
.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)
{ {

View file

@ -998,11 +998,12 @@ static const struct xenbus_device_id scsifront_ids[] = {
{ "" } { "" }
}; };
static DEFINE_XENBUS_DRIVER(scsifront, , static struct xenbus_driver scsifront_driver = {
.ids = scsifront_ids,
.probe = scsifront_probe, .probe = scsifront_probe,
.remove = scsifront_remove, .remove = scsifront_remove,
.otherend_changed = scsifront_backend_changed, .otherend_changed = scsifront_backend_changed,
); };
static int __init scsifront_init(void) static int __init scsifront_init(void)
{ {

View file

@ -347,8 +347,6 @@ static int xen_console_remove(struct xencons_info *info)
} }
#ifdef CONFIG_HVC_XEN_FRONTEND #ifdef CONFIG_HVC_XEN_FRONTEND
static struct xenbus_driver xencons_driver;
static int xencons_remove(struct xenbus_device *dev) static int xencons_remove(struct xenbus_device *dev)
{ {
return xen_console_remove(dev_get_drvdata(&dev->dev)); return xen_console_remove(dev_get_drvdata(&dev->dev));
@ -502,13 +500,14 @@ static const struct xenbus_device_id xencons_ids[] = {
{ "" } { "" }
}; };
static struct xenbus_driver xencons_driver = {
static DEFINE_XENBUS_DRIVER(xencons, "xenconsole", .name = "xenconsole",
.ids = xencons_ids,
.probe = xencons_probe, .probe = xencons_probe,
.remove = xencons_remove, .remove = xencons_remove,
.resume = xencons_resume, .resume = xencons_resume,
.otherend_changed = xencons_backend_changed, .otherend_changed = xencons_backend_changed,
); };
#endif /* CONFIG_HVC_XEN_FRONTEND */ #endif /* CONFIG_HVC_XEN_FRONTEND */
static int __init xen_hvc_init(void) static int __init xen_hvc_init(void)

View file

@ -684,12 +684,13 @@ static const struct xenbus_device_id xenfb_ids[] = {
{ "" } { "" }
}; };
static DEFINE_XENBUS_DRIVER(xenfb, , static struct xenbus_driver xenfb_driver = {
.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)
{ {

View file

@ -719,11 +719,13 @@ static const struct xenbus_device_id xen_pcibk_ids[] = {
{""}, {""},
}; };
static DEFINE_XENBUS_DRIVER(xen_pcibk, DRV_NAME, static struct xenbus_driver xen_pcibk_driver = {
.name = DRV_NAME,
.ids = xen_pcibk_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;

View file

@ -2056,11 +2056,12 @@ static const struct xenbus_device_id scsiback_ids[] = {
{ "" } { "" }
}; };
static DEFINE_XENBUS_DRIVER(scsiback, , static struct xenbus_driver scsiback_driver = {
.ids = scsiback_ids,
.probe = scsiback_probe, .probe = scsiback_probe,
.remove = scsiback_remove, .remove = scsiback_remove,
.otherend_changed = scsiback_frontend_changed .otherend_changed = scsiback_frontend_changed
); };
static void scsiback_init_pend(void *p) static void scsiback_init_pend(void *p)
{ {

View file

@ -297,9 +297,13 @@ 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->name : drv->ids[0].devicetype;
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);
} }

View file

@ -60,7 +60,9 @@ 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);

View file

@ -234,13 +234,15 @@ 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,

View file

@ -317,13 +317,15 @@ 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;
@ -332,7 +334,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;

View file

@ -86,6 +86,7 @@ struct xenbus_device_id
/* A xenbus driver. */ /* A xenbus driver. */
struct xenbus_driver { struct xenbus_driver {
const char *name; /* defaults to ids[0].devicetype */
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);
@ -100,20 +101,22 @@ struct xenbus_driver {
int (*is_ready)(struct xenbus_device *dev); int (*is_ready)(struct xenbus_device *dev);
}; };
#define DEFINE_XENBUS_DRIVER(var, drvname, methods...) \
struct xenbus_driver var ## _driver = { \
.driver.name = drvname + 0 ?: var ## _ids->devicetype, \
.driver.owner = THIS_MODULE, \
.ids = var ## _ids, ## methods \
}
static inline struct xenbus_driver *to_xenbus_driver(struct device_driver *drv) static inline struct xenbus_driver *to_xenbus_driver(struct device_driver *drv)
{ {
return container_of(drv, struct xenbus_driver, driver); return container_of(drv, struct xenbus_driver, driver);
} }
int __must_check xenbus_register_frontend(struct xenbus_driver *); int __must_check __xenbus_register_frontend(struct xenbus_driver *drv,
int __must_check xenbus_register_backend(struct xenbus_driver *); struct module *owner,
const char *mod_name);
int __must_check __xenbus_register_backend(struct xenbus_driver *drv,
struct module *owner,
const char *mod_name);
#define xenbus_register_frontend(drv) \
__xenbus_register_frontend(drv, THIS_MODULE, KBUILD_MODNAME);
#define xenbus_register_backend(drv) \
__xenbus_register_backend(drv, THIS_MODULE, KBUILD_MODNAME);
void xenbus_unregister_driver(struct xenbus_driver *drv); void xenbus_unregister_driver(struct xenbus_driver *drv);