|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCHv2] xen: remove DEFINE_XENBUS_DRIVER() macro
On Wed, Sep 10, 2014 at 01:07:49PM +0100, David Vrabel wrote:
> The DEFINE_XENBUS_DRIVER() macro looks a bit weird and causes sparse
> errors.
.. but it is also useful for downstream distros to bolt on Xen patches.
Is this urgent? Could it wait until Novell/SuSE has switched over
to using pvops and then this can go in?
>
> Replace the uses with standard structure definitions instead. This is
> similar to pci and usb device registration.
>
> Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
> ---
> Changes in v2:
> - default name to first ID.
> ---
> drivers/block/xen-blkback/xenbus.c | 11 +++--------
> drivers/block/xen-blkfront.c | 5 +++--
> drivers/char/tpm/xen-tpmfront.c | 13 +++++++------
> drivers/input/misc/xen-kbdfront.c | 5 +++--
> drivers/net/xen-netback/xenbus.c | 10 +++-------
> drivers/net/xen-netfront.c | 16 ++++++++--------
> drivers/pci/xen-pcifront.c | 6 ++++--
> drivers/tty/hvc/hvc_xen.c | 9 ++++-----
> drivers/video/fbdev/xen-fbfront.c | 5 +++--
> drivers/xen/xen-pciback/xenbus.c | 6 ++++--
> drivers/xen/xenbus/xenbus_probe.c | 6 +++++-
> drivers/xen/xenbus/xenbus_probe.h | 4 +++-
> drivers/xen/xenbus/xenbus_probe_backend.c | 8 +++++---
> drivers/xen/xenbus/xenbus_probe_frontend.c | 8 +++++---
> include/xen/xenbus.h | 21 ++++++++++++---------
> 15 files changed, 72 insertions(+), 61 deletions(-)
>
> diff --git a/drivers/block/xen-blkback/xenbus.c
> b/drivers/block/xen-blkback/xenbus.c
> index 3a8b810..0b13b1c 100644
> --- a/drivers/block/xen-blkback/xenbus.c
> +++ b/drivers/block/xen-blkback/xenbus.c
> @@ -907,22 +907,17 @@ static int connect_ring(struct backend_info *be)
> return 0;
> }
>
> -
> -/* ** Driver Registration ** */
> -
> -
> static const struct xenbus_device_id xen_blkbk_ids[] = {
> { "vbd" },
> { "" }
> };
>
> -
> -static DEFINE_XENBUS_DRIVER(xen_blkbk, ,
> +static struct xenbus_driver xen_blkbk_driver = {
> + .ids = xen_blkbk_ids,
> .probe = xen_blkbk_probe,
> .remove = xen_blkbk_remove,
> .otherend_changed = frontend_changed
> -);
> -
> +};
>
> int xen_blkif_xenbus_init(void)
> {
> diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
> index 5deb235..37af03e 100644
> --- a/drivers/block/xen-blkfront.c
> +++ b/drivers/block/xen-blkfront.c
> @@ -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,
> .remove = blkfront_remove,
> .resume = blkfront_resume,
> .otherend_changed = blkback_changed,
> .is_ready = blkfront_is_ready,
> -);
> +};
>
> static int __init xlblk_init(void)
> {
> diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
> index 2064b45..441b44e 100644
> --- a/drivers/char/tpm/xen-tpmfront.c
> +++ b/drivers/char/tpm/xen-tpmfront.c
> @@ -367,12 +367,13 @@ static const struct xenbus_device_id tpmfront_ids[] = {
> };
> MODULE_ALIAS("xen:vtpm");
>
> -static DEFINE_XENBUS_DRIVER(tpmfront, ,
> - .probe = tpmfront_probe,
> - .remove = tpmfront_remove,
> - .resume = tpmfront_resume,
> - .otherend_changed = backend_changed,
> - );
> +static struct xenbus_driver tpmfront_driver = {
> + .ids = tpmfront_ids,
> + .probe = tpmfront_probe,
> + .remove = tpmfront_remove,
> + .resume = tpmfront_resume,
> + .otherend_changed = backend_changed,
> +};
>
> static int __init xen_tpmfront_init(void)
> {
> diff --git a/drivers/input/misc/xen-kbdfront.c
> b/drivers/input/misc/xen-kbdfront.c
> index fbfdc10..1af28b0 100644
> --- a/drivers/input/misc/xen-kbdfront.c
> +++ b/drivers/input/misc/xen-kbdfront.c
> @@ -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,
> .remove = xenkbd_remove,
> .resume = xenkbd_resume,
> .otherend_changed = xenkbd_backend_changed,
> -);
> +};
>
> static int __init xenkbd_init(void)
> {
> diff --git a/drivers/net/xen-netback/xenbus.c
> b/drivers/net/xen-netback/xenbus.c
> index 9c47b89..8079c31 100644
> --- a/drivers/net/xen-netback/xenbus.c
> +++ b/drivers/net/xen-netback/xenbus.c
> @@ -937,22 +937,18 @@ static int read_xenbus_vif_flags(struct backend_info
> *be)
> return 0;
> }
>
> -
> -/* ** Driver Registration ** */
> -
> -
> static const struct xenbus_device_id netback_ids[] = {
> { "vif" },
> { "" }
> };
>
> -
> -static DEFINE_XENBUS_DRIVER(netback, ,
> +static struct xenbus_driver netback_driver = {
> + .ids = netback_ids,
> .probe = netback_probe,
> .remove = netback_remove,
> .uevent = netback_uevent,
> .otherend_changed = frontend_changed,
> -);
> +};
>
> int xenvif_xenbus_init(void)
> {
> diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
> index ca82f54..fa67144 100644
> --- a/drivers/net/xen-netfront.c
> +++ b/drivers/net/xen-netfront.c
> @@ -2300,12 +2300,6 @@ static void xennet_sysfs_delif(struct net_device
> *netdev)
>
> #endif /* CONFIG_SYSFS */
>
> -static const struct xenbus_device_id netfront_ids[] = {
> - { "vif" },
> - { "" }
> -};
> -
> -
> static int xennet_remove(struct xenbus_device *dev)
> {
> struct netfront_info *info = dev_get_drvdata(&dev->dev);
> @@ -2338,12 +2332,18 @@ static int xennet_remove(struct xenbus_device *dev)
> 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,
> .remove = xennet_remove,
> .resume = netfront_resume,
> .otherend_changed = netback_changed,
> -);
> +};
>
> static int __init netif_init(void)
> {
> diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
> index 53df39a..116ca37 100644
> --- a/drivers/pci/xen-pcifront.c
> +++ b/drivers/pci/xen-pcifront.c
> @@ -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,
> .remove = pcifront_xenbus_remove,
> .otherend_changed = pcifront_backend_changed,
> -);
> +};
>
> static int __init pcifront_init(void)
> {
> diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
> index 2dc2831..c3d8af9 100644
> --- a/drivers/tty/hvc/hvc_xen.c
> +++ b/drivers/tty/hvc/hvc_xen.c
> @@ -347,8 +347,6 @@ static int xen_console_remove(struct xencons_info *info)
> }
>
> #ifdef CONFIG_HVC_XEN_FRONTEND
> -static struct xenbus_driver xencons_driver;
> -
> static int xencons_remove(struct xenbus_device *dev)
> {
> return xen_console_remove(dev_get_drvdata(&dev->dev));
> @@ -502,13 +500,14 @@ static const struct xenbus_device_id xencons_ids[] = {
> { "" }
> };
>
> -
> -static DEFINE_XENBUS_DRIVER(xencons, "xenconsole",
> +static struct xenbus_driver xencons_driver = {
> + .name = "xenconsole",
> + .ids = xencons_ids,
> .probe = xencons_probe,
> .remove = xencons_remove,
> .resume = xencons_resume,
> .otherend_changed = xencons_backend_changed,
> -);
> +};
> #endif /* CONFIG_HVC_XEN_FRONTEND */
>
> static int __init xen_hvc_init(void)
> diff --git a/drivers/video/fbdev/xen-fbfront.c
> b/drivers/video/fbdev/xen-fbfront.c
> index 901014b..09dc447 100644
> --- a/drivers/video/fbdev/xen-fbfront.c
> +++ b/drivers/video/fbdev/xen-fbfront.c
> @@ -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,
> .remove = xenfb_remove,
> .resume = xenfb_resume,
> .otherend_changed = xenfb_backend_changed,
> -);
> +};
>
> static int __init xenfb_init(void)
> {
> diff --git a/drivers/xen/xen-pciback/xenbus.c
> b/drivers/xen/xen-pciback/xenbus.c
> index c214daa..ad8d30c 100644
> --- a/drivers/xen/xen-pciback/xenbus.c
> +++ b/drivers/xen/xen-pciback/xenbus.c
> @@ -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,
> .remove = xen_pcibk_xenbus_remove,
> .otherend_changed = xen_pcibk_frontend_changed,
> -);
> +};
>
> const struct xen_pcibk_backend *__read_mostly xen_pcibk_backend;
>
> diff --git a/drivers/xen/xenbus/xenbus_probe.c
> b/drivers/xen/xenbus/xenbus_probe.c
> index 3c0a74b..564b315 100644
> --- a/drivers/xen/xenbus/xenbus_probe.c
> +++ b/drivers/xen/xenbus/xenbus_probe.c
> @@ -297,9 +297,13 @@ void xenbus_dev_shutdown(struct device *_dev)
> EXPORT_SYMBOL_GPL(xenbus_dev_shutdown);
>
> 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.owner = owner;
> + drv->driver.mod_name = mod_name;
>
> return driver_register(&drv->driver);
> }
> diff --git a/drivers/xen/xenbus/xenbus_probe.h
> b/drivers/xen/xenbus/xenbus_probe.h
> index 1085ec2..c9ec7ca 100644
> --- a/drivers/xen/xenbus/xenbus_probe.h
> +++ b/drivers/xen/xenbus/xenbus_probe.h
> @@ -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_remove(struct device *_dev);
> 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,
> const char *type,
> const char *nodename);
> diff --git a/drivers/xen/xenbus/xenbus_probe_backend.c
> b/drivers/xen/xenbus/xenbus_probe_backend.c
> index 5125dce..04f7f85 100644
> --- a/drivers/xen/xenbus/xenbus_probe_backend.c
> +++ b/drivers/xen/xenbus/xenbus_probe_backend.c
> @@ -234,13 +234,15 @@ int xenbus_dev_is_online(struct xenbus_device *dev)
> }
> 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;
>
> - 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,
> unsigned long event,
> diff --git a/drivers/xen/xenbus/xenbus_probe_frontend.c
> b/drivers/xen/xenbus/xenbus_probe_frontend.c
> index cb385c1..bcb53bd 100644
> --- a/drivers/xen/xenbus/xenbus_probe_frontend.c
> +++ b/drivers/xen/xenbus/xenbus_probe_frontend.c
> @@ -317,13 +317,15 @@ static void wait_for_devices(struct xenbus_driver
> *xendrv)
> 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;
>
> 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)
> return ret;
>
> @@ -332,7 +334,7 @@ int xenbus_register_frontend(struct xenbus_driver *drv)
>
> return 0;
> }
> -EXPORT_SYMBOL_GPL(xenbus_register_frontend);
> +EXPORT_SYMBOL_GPL(__xenbus_register_frontend);
>
> static DECLARE_WAIT_QUEUE_HEAD(backend_state_wq);
> static int backend_state;
> diff --git a/include/xen/xenbus.h b/include/xen/xenbus.h
> index 0324c6d..b78f21c 100644
> --- a/include/xen/xenbus.h
> +++ b/include/xen/xenbus.h
> @@ -86,6 +86,7 @@ struct xenbus_device_id
>
> /* A xenbus driver. */
> struct xenbus_driver {
> + const char *name; /* defaults to ids[0].devicetype */
> const struct xenbus_device_id *ids;
> int (*probe)(struct xenbus_device *dev,
> const struct xenbus_device_id *id);
> @@ -100,20 +101,22 @@ struct xenbus_driver {
> 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)
> {
> return container_of(drv, struct xenbus_driver, driver);
> }
>
> -int __must_check xenbus_register_frontend(struct xenbus_driver *);
> -int __must_check xenbus_register_backend(struct xenbus_driver *);
> +int __must_check __xenbus_register_frontend(struct xenbus_driver *drv,
> + 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);
>
> --
> 1.7.10.4
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |