All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: David Vrabel <david.vrabel@citrix.com>
Cc: xen-devel@lists.xenproject.org,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Jan Beulich <jbeulich@suse.com>
Subject: Re: [PATCHv2] xen: remove DEFINE_XENBUS_DRIVER() macro
Date: Wed, 10 Sep 2014 12:00:43 -0400	[thread overview]
Message-ID: <20140910160043.GH12893@laptop.dumpdata.com> (raw)
In-Reply-To: <1410350869-21277-1-git-send-email-david.vrabel@citrix.com>

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@citrix.com>
> ---
> 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
> 

  reply	other threads:[~2014-09-10 16:00 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-10 12:07 [PATCHv2] xen: remove DEFINE_XENBUS_DRIVER() macro David Vrabel
2014-09-10 16:00 ` Konrad Rzeszutek Wilk [this message]
2014-09-10 16:25   ` David Vrabel
2014-09-10 16:44     ` Konrad Rzeszutek Wilk
2014-09-11  9:44       ` David Vrabel
2014-09-11  3:59     ` Jürgen Groß

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140910160043.GH12893@laptop.dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=david.vrabel@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.