Jan Beulich
2011-Sep-19 16:42 UTC
[Xen-devel] [PATCH] xen/pciback: miscellaneous adjustments
This is a minor bugfix and a set of small cleanups; as it is not clear whether this needs splitting into pieces (and if so, at what granularity), I''m submitting this as a single combined patch as a first try (I''d hope it doesn''t need to be one patch per description line below): - add a missing return statement to an error path in kill_domain_by_device() - use pci_is_enabled() rather than raw atomic_read() - use resource_size() rather than open coding it - remove a bogus attempt to zero-terminate an already zero-terminated string - #define DRV_NAME once uniformly in the shared local header - make DRIVER_ATTR() variables static - eliminate a pointless use of list_for_each_entry_safe() - add MODULE_ALIAS() - a little bit of constification - adjust a few messages - remove stray semicolons from inline function definitions Signed-off-by: Jan Beulich <jbeulich@suse.com> --- drivers/xen/xen-pciback/conf_space.c | 1 drivers/xen/xen-pciback/conf_space_header.c | 5 +--- drivers/xen/xen-pciback/conf_space_quirks.c | 3 -- drivers/xen/xen-pciback/passthrough.c | 2 - drivers/xen/xen-pciback/pci_stub.c | 31 +++++++++++----------------- drivers/xen/xen-pciback/pciback.h | 30 +++++++++++++++++---------- drivers/xen/xen-pciback/pciback_ops.c | 1 drivers/xen/xen-pciback/vpci.c | 9 +++----- drivers/xen/xen-pciback/xenbus.c | 5 +--- 9 files changed, 42 insertions(+), 45 deletions(-) --- 3.1-rc6/drivers/xen/xen-pciback/conf_space.c +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/conf_space.c @@ -15,7 +15,6 @@ #include "conf_space.h" #include "conf_space_quirks.h" -#define DRV_NAME "xen-pciback" static int permissive; module_param(permissive, bool, 0644); --- 3.1-rc6/drivers/xen/xen-pciback/conf_space_header.c +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/conf_space_header.c @@ -15,7 +15,6 @@ struct pci_bar_info { int which; }; -#define DRV_NAME "xen-pciback" #define is_enable_cmd(value) ((value)&(PCI_COMMAND_MEMORY|PCI_COMMAND_IO)) #define is_master_cmd(value) ((value)&PCI_COMMAND_MASTER) @@ -25,7 +24,7 @@ static int command_read(struct pci_dev * int ret; ret = xen_pcibk_read_config_word(dev, offset, value, data); - if (!atomic_read(&dev->enable_cnt)) + if (!pci_is_enabled(dev)) return ret; for (i = 0; i < PCI_ROM_RESOURCE; i++) { @@ -187,7 +186,7 @@ static inline void read_dev_bar(struct p bar_info->val = res[pos].start | (res[pos].flags & PCI_REGION_FLAG_MASK); - bar_info->len_val = res[pos].end - res[pos].start + 1; + bar_info->len_val = resource_size(res + pos); } static void *bar_init(struct pci_dev *dev, int offset) --- 3.1-rc6/drivers/xen/xen-pciback/conf_space_quirks.c +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/conf_space_quirks.c @@ -12,7 +12,6 @@ #include "conf_space_quirks.h" LIST_HEAD(xen_pcibk_quirks); -#define DRV_NAME "xen-pciback" static inline const struct pci_device_id * match_one_device(const struct pci_device_id *id, const struct pci_dev *dev) { @@ -36,7 +35,7 @@ static struct xen_pcibk_config_quirk *xe goto out; tmp_quirk = NULL; printk(KERN_DEBUG DRV_NAME - ":quirk didn''t match any device xen_pciback knows about\n"); + ": quirk didn''t match any device known\n"); out: return tmp_quirk; } --- 3.1-rc6/drivers/xen/xen-pciback/passthrough.c +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/passthrough.c @@ -182,7 +182,7 @@ static int __xen_pcibk_get_pcifront_dev( return 1; } -struct xen_pcibk_backend xen_pcibk_passthrough_backend = { +const struct xen_pcibk_backend xen_pcibk_passthrough_backend = { .name = "passthrough", .init = __xen_pcibk_init_devices, .free = __xen_pcibk_release_devices, --- 3.1-rc6/drivers/xen/xen-pciback/pci_stub.c +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/pci_stub.c @@ -21,8 +21,6 @@ #include "conf_space.h" #include "conf_space_quirks.h" -#define DRV_NAME "xen-pciback" - static char *pci_devs_to_hide; wait_queue_head_t xen_pcibk_aer_wait_queue; /*Add sem for sync AER handling and xen_pcibk remove/reconfigue ops, @@ -514,12 +512,14 @@ static void kill_domain_by_device(struct int err; char nodename[PCI_NODENAME_MAX]; - if (!psdev) + if (!psdev) { dev_err(&psdev->dev->dev, "device is NULL when do AER recovery/kill_domain\n"); + return; + } + snprintf(nodename, PCI_NODENAME_MAX, "/local/domain/0/backend/pci/%d/0", psdev->pdev->xdev->otherend_id); - nodename[strlen(nodename)] = ''\0''; again: err = xenbus_transaction_start(&xbt); @@ -605,7 +605,7 @@ static pci_ers_result_t common_process(s if (test_bit(_XEN_PCIF_active, (unsigned long *)&psdev->pdev->sh_info->flags)) { dev_dbg(&psdev->dev->dev, - "schedule pci_conf service in xen_pcibk\n"); + "schedule pci_conf service in " DRV_NAME "\n"); xen_pcibk_test_and_schedule_op(psdev->pdev); } @@ -995,8 +995,7 @@ out: err = count; return err; } - -DRIVER_ATTR(new_slot, S_IWUSR, NULL, pcistub_slot_add); +static DRIVER_ATTR(new_slot, S_IWUSR, NULL, pcistub_slot_add); static ssize_t pcistub_slot_remove(struct device_driver *drv, const char *buf, size_t count) @@ -1015,8 +1014,7 @@ out: err = count; return err; } - -DRIVER_ATTR(remove_slot, S_IWUSR, NULL, pcistub_slot_remove); +static DRIVER_ATTR(remove_slot, S_IWUSR, NULL, pcistub_slot_remove); static ssize_t pcistub_slot_show(struct device_driver *drv, char *buf) { @@ -1039,8 +1037,7 @@ static ssize_t pcistub_slot_show(struct return count; } - -DRIVER_ATTR(slots, S_IRUSR, pcistub_slot_show, NULL); +static DRIVER_ATTR(slots, S_IRUSR, pcistub_slot_show, NULL); static ssize_t pcistub_irq_handler_show(struct device_driver *drv, char *buf) { @@ -1069,8 +1066,7 @@ static ssize_t pcistub_irq_handler_show( spin_unlock_irqrestore(&pcistub_devices_lock, flags); return count; } - -DRIVER_ATTR(irq_handlers, S_IRUSR, pcistub_irq_handler_show, NULL); +static DRIVER_ATTR(irq_handlers, S_IRUSR, pcistub_irq_handler_show, NULL); static ssize_t pcistub_irq_handler_switch(struct device_driver *drv, const char *buf, @@ -1106,7 +1102,7 @@ out: err = count; return err; } -DRIVER_ATTR(irq_handler_state, S_IWUSR, NULL, pcistub_irq_handler_switch); +static DRIVER_ATTR(irq_handler_state, S_IWUSR, NULL, pcistub_irq_handler_switch); static ssize_t pcistub_quirk_add(struct device_driver *drv, const char *buf, size_t count) @@ -1170,8 +1166,7 @@ out: return count; } - -DRIVER_ATTR(quirks, S_IRUSR | S_IWUSR, pcistub_quirk_show, pcistub_quirk_add); +static DRIVER_ATTR(quirks, S_IRUSR | S_IWUSR, pcistub_quirk_show, pcistub_quirk_add); static ssize_t permissive_add(struct device_driver *drv, const char *buf, size_t count) @@ -1236,8 +1231,7 @@ static ssize_t permissive_show(struct de spin_unlock_irqrestore(&pcistub_devices_lock, flags); return count; } - -DRIVER_ATTR(permissive, S_IRUSR | S_IWUSR, permissive_show, permissive_add); +static DRIVER_ATTR(permissive, S_IRUSR | S_IWUSR, permissive_show, permissive_add); static void pcistub_exit(void) { @@ -1374,3 +1368,4 @@ module_init(xen_pcibk_init); module_exit(xen_pcibk_cleanup); MODULE_LICENSE("Dual BSD/GPL"); +MODULE_ALIAS("xen-backend:pci"); --- 3.1-rc6/drivers/xen/xen-pciback/pciback.h +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/pciback.h @@ -15,6 +15,8 @@ #include <linux/atomic.h> #include <xen/interface/io/pciif.h> +#define DRV_NAME "xen-pciback" + struct pci_dev_entry { struct list_head list; struct pci_dev *dev; @@ -89,7 +91,7 @@ typedef int (*publish_pci_root_cb) (stru * passthrough - BDFs are exactly like in the host. */ struct xen_pcibk_backend { - char *name; + const char *name; int (*init)(struct xen_pcibk_device *pdev); void (*free)(struct xen_pcibk_device *pdev); int (*find)(struct pci_dev *pcidev, struct xen_pcibk_device *pdev, @@ -104,9 +106,9 @@ struct xen_pcibk_backend { unsigned int devfn); }; -extern struct xen_pcibk_backend xen_pcibk_vpci_backend; -extern struct xen_pcibk_backend xen_pcibk_passthrough_backend; -extern struct xen_pcibk_backend *xen_pcibk_backend; +extern const struct xen_pcibk_backend xen_pcibk_vpci_backend; +extern const struct xen_pcibk_backend xen_pcibk_passthrough_backend; +extern const struct xen_pcibk_backend *xen_pcibk_backend; static inline int xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev, struct pci_dev *dev, @@ -116,13 +118,14 @@ static inline int xen_pcibk_add_pci_dev( if (xen_pcibk_backend && xen_pcibk_backend->add) return xen_pcibk_backend->add(pdev, dev, devid, publish_cb); return -1; -}; +} + static inline void xen_pcibk_release_pci_dev(struct xen_pcibk_device *pdev, struct pci_dev *dev) { if (xen_pcibk_backend && xen_pcibk_backend->free) return xen_pcibk_backend->release(pdev, dev); -}; +} static inline struct pci_dev * xen_pcibk_get_pci_dev(struct xen_pcibk_device *pdev, unsigned int domain, @@ -131,7 +134,8 @@ xen_pcibk_get_pci_dev(struct xen_pcibk_d if (xen_pcibk_backend && xen_pcibk_backend->get) return xen_pcibk_backend->get(pdev, domain, bus, devfn); return NULL; -}; +} + /** * Add for domain0 PCIE-AER handling. Get guest domain/bus/devfn in xen_pcibk * before sending aer request to pcifront, so that guest could identify @@ -148,25 +152,29 @@ static inline int xen_pcibk_get_pcifront return xen_pcibk_backend->find(pcidev, pdev, domain, bus, devfn); return -1; -}; +} + static inline int xen_pcibk_init_devices(struct xen_pcibk_device *pdev) { if (xen_pcibk_backend && xen_pcibk_backend->init) return xen_pcibk_backend->init(pdev); return -1; -}; +} + static inline int xen_pcibk_publish_pci_roots(struct xen_pcibk_device *pdev, publish_pci_root_cb cb) { if (xen_pcibk_backend && xen_pcibk_backend->publish) return xen_pcibk_backend->publish(pdev, cb); return -1; -}; +} + static inline void xen_pcibk_release_devices(struct xen_pcibk_device *pdev) { if (xen_pcibk_backend && xen_pcibk_backend->free) return xen_pcibk_backend->free(pdev); -}; +} + /* Handles events from front-end */ irqreturn_t xen_pcibk_handle_event(int irq, void *dev_id); void xen_pcibk_do_op(struct work_struct *data); --- 3.1-rc6/drivers/xen/xen-pciback/pciback_ops.c +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/pciback_ops.c @@ -10,7 +10,6 @@ #include <linux/sched.h> #include "pciback.h" -#define DRV_NAME "xen-pciback" int verbose_request; module_param(verbose_request, int, 0644); --- 3.1-rc6/drivers/xen/xen-pciback/vpci.c +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/vpci.c @@ -12,7 +12,6 @@ #include "pciback.h" #define PCI_SLOT_MAX 32 -#define DRV_NAME "xen-pciback" struct vpci_dev_data { /* Access to dev_list must be protected by lock */ @@ -150,9 +149,9 @@ static void __xen_pcibk_release_pci_dev( spin_lock_irqsave(&vpci_dev->lock, flags); for (slot = 0; slot < PCI_SLOT_MAX; slot++) { - struct pci_dev_entry *e, *tmp; - list_for_each_entry_safe(e, tmp, &vpci_dev->dev_list[slot], - list) { + struct pci_dev_entry *e; + + list_for_each_entry(e, &vpci_dev->dev_list[slot], list) { if (e->dev == dev) { list_del(&e->list); found_dev = e->dev; @@ -247,7 +246,7 @@ static int __xen_pcibk_get_pcifront_dev( return found; } -struct xen_pcibk_backend xen_pcibk_vpci_backend = { +const struct xen_pcibk_backend xen_pcibk_vpci_backend = { .name = "vpci", .init = __xen_pcibk_init_devices, .free = __xen_pcibk_release_devices, --- 3.1-rc6/drivers/xen/xen-pciback/xenbus.c +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/xenbus.c @@ -13,7 +13,6 @@ #include <asm/xen/pci.h> #include "pciback.h" -#define DRV_NAME "xen-pciback" #define INVALID_EVTCHN_IRQ (-1) struct workqueue_struct *xen_pcibk_wq; @@ -176,7 +175,7 @@ static int xen_pcibk_attach(struct xen_p if (magic == NULL || strcmp(magic, XEN_PCI_MAGIC) != 0) { xenbus_dev_fatal(pdev->xdev, -EFAULT, "version mismatch (%s/%s) with pcifront - " - "halting xen_pcibk", + "halting " DRV_NAME, magic, XEN_PCI_MAGIC); goto out; } @@ -724,7 +723,7 @@ static struct xenbus_driver xenbus_xen_p .otherend_changed = xen_pcibk_frontend_changed, }; -struct xen_pcibk_backend *xen_pcibk_backend; +const struct xen_pcibk_backend *__read_mostly xen_pcibk_backend; int __init xen_pcibk_xenbus_register(void) { _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Konrad Rzeszutek Wilk
2011-Sep-21 20:20 UTC
[Xen-devel] Re: [PATCH] xen/pciback: miscellaneous adjustments
On Mon, Sep 19, 2011 at 05:42:24PM +0100, Jan Beulich wrote:> This is a minor bugfix and a set of small cleanups; as it is not clear > whether this needs splitting into pieces (and if so, at what > granularity), I''m submitting this as a single combined patch as a > first try (I''d hope it doesn''t need to be one patch per description > line below): > - add a missing return statement to an error path in > kill_domain_by_device() > - use pci_is_enabled() rather than raw atomic_read() > - use resource_size() rather than open coding itI got a patch for that from commit b1d39d366a412f634fe50c1db6cfc751829157d3 Author: Thomas Meyer <thomas@m3y3r.de> Date: Sat Aug 6 11:05:35 2011 +0200 xen/pciback: use resource_size() Use resource_size function on resource object instead of explicit computation. The semantic patch that makes this output is available in scripts/coccinelle/api/resource_size.cocci. More information about semantic patching is available at http://coccinelle.lip6.fr/ Signed-off-by: Thomas Meyer <thomas@m3y3r.de> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> diff --git a/drivers/xen/xen-pciback/conf_space_header.c b/drivers/xen/xen-pciback/conf_space_header.c index da3cbdf..f14b30f 100644 --- a/drivers/xen/xen-pciback/conf_space_header.c +++ b/drivers/xen/xen-pciback/conf_space_header.c @@ -187,7 +187,7 @@ static inline void read_dev_bar(struct pci_dev *dev, bar_info->val = res[pos].start | (res[pos].flags & PCI_REGION_FLAG_MASK); - bar_info->len_val = res[pos].end - res[pos].start + 1; + bar_info->len_val = resource_size(&res[pos]); } static void *bar_init(struct pci_dev *dev, int offset) so will use that instead, and drop that section from your patch.> - remove a bogus attempt to zero-terminate an already zero-terminated > string > - #define DRV_NAME once uniformly in the shared local header > - make DRIVER_ATTR() variables static > - eliminate a pointless use of list_for_each_entry_safe() > - add MODULE_ALIAS() > - a little bit of constification > - adjust a few messages > - remove stray semicolons from inline function definitionsOtherwsie they look good to me.> > Signed-off-by: Jan Beulich <jbeulich@suse.com> > > --- > drivers/xen/xen-pciback/conf_space.c | 1 > drivers/xen/xen-pciback/conf_space_header.c | 5 +--- > drivers/xen/xen-pciback/conf_space_quirks.c | 3 -- > drivers/xen/xen-pciback/passthrough.c | 2 - > drivers/xen/xen-pciback/pci_stub.c | 31 +++++++++++----------------- > drivers/xen/xen-pciback/pciback.h | 30 +++++++++++++++++---------- > drivers/xen/xen-pciback/pciback_ops.c | 1 > drivers/xen/xen-pciback/vpci.c | 9 +++----- > drivers/xen/xen-pciback/xenbus.c | 5 +--- > 9 files changed, 42 insertions(+), 45 deletions(-) > > --- 3.1-rc6/drivers/xen/xen-pciback/conf_space.c > +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/conf_space.c > @@ -15,7 +15,6 @@ > #include "conf_space.h" > #include "conf_space_quirks.h" > > -#define DRV_NAME "xen-pciback" > static int permissive; > module_param(permissive, bool, 0644); > > --- 3.1-rc6/drivers/xen/xen-pciback/conf_space_header.c > +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/conf_space_header.c > @@ -15,7 +15,6 @@ struct pci_bar_info { > int which; > }; > > -#define DRV_NAME "xen-pciback" > #define is_enable_cmd(value) ((value)&(PCI_COMMAND_MEMORY|PCI_COMMAND_IO)) > #define is_master_cmd(value) ((value)&PCI_COMMAND_MASTER) > > @@ -25,7 +24,7 @@ static int command_read(struct pci_dev * > int ret; > > ret = xen_pcibk_read_config_word(dev, offset, value, data); > - if (!atomic_read(&dev->enable_cnt)) > + if (!pci_is_enabled(dev)) > return ret; > > for (i = 0; i < PCI_ROM_RESOURCE; i++) { > @@ -187,7 +186,7 @@ static inline void read_dev_bar(struct p > > bar_info->val = res[pos].start | > (res[pos].flags & PCI_REGION_FLAG_MASK); > - bar_info->len_val = res[pos].end - res[pos].start + 1; > + bar_info->len_val = resource_size(res + pos); > } > > static void *bar_init(struct pci_dev *dev, int offset) > --- 3.1-rc6/drivers/xen/xen-pciback/conf_space_quirks.c > +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/conf_space_quirks.c > @@ -12,7 +12,6 @@ > #include "conf_space_quirks.h" > > LIST_HEAD(xen_pcibk_quirks); > -#define DRV_NAME "xen-pciback" > static inline const struct pci_device_id * > match_one_device(const struct pci_device_id *id, const struct pci_dev *dev) > { > @@ -36,7 +35,7 @@ static struct xen_pcibk_config_quirk *xe > goto out; > tmp_quirk = NULL; > printk(KERN_DEBUG DRV_NAME > - ":quirk didn''t match any device xen_pciback knows about\n"); > + ": quirk didn''t match any device known\n"); > out: > return tmp_quirk; > } > --- 3.1-rc6/drivers/xen/xen-pciback/passthrough.c > +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/passthrough.c > @@ -182,7 +182,7 @@ static int __xen_pcibk_get_pcifront_dev( > return 1; > } > > -struct xen_pcibk_backend xen_pcibk_passthrough_backend = { > +const struct xen_pcibk_backend xen_pcibk_passthrough_backend = { > .name = "passthrough", > .init = __xen_pcibk_init_devices, > .free = __xen_pcibk_release_devices, > --- 3.1-rc6/drivers/xen/xen-pciback/pci_stub.c > +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/pci_stub.c > @@ -21,8 +21,6 @@ > #include "conf_space.h" > #include "conf_space_quirks.h" > > -#define DRV_NAME "xen-pciback" > - > static char *pci_devs_to_hide; > wait_queue_head_t xen_pcibk_aer_wait_queue; > /*Add sem for sync AER handling and xen_pcibk remove/reconfigue ops, > @@ -514,12 +512,14 @@ static void kill_domain_by_device(struct > int err; > char nodename[PCI_NODENAME_MAX]; > > - if (!psdev) > + if (!psdev) { > dev_err(&psdev->dev->dev, > "device is NULL when do AER recovery/kill_domain\n"); > + return; > + } > + > snprintf(nodename, PCI_NODENAME_MAX, "/local/domain/0/backend/pci/%d/0", > psdev->pdev->xdev->otherend_id); > - nodename[strlen(nodename)] = ''\0''; > > again: > err = xenbus_transaction_start(&xbt); > @@ -605,7 +605,7 @@ static pci_ers_result_t common_process(s > if (test_bit(_XEN_PCIF_active, > (unsigned long *)&psdev->pdev->sh_info->flags)) { > dev_dbg(&psdev->dev->dev, > - "schedule pci_conf service in xen_pcibk\n"); > + "schedule pci_conf service in " DRV_NAME "\n"); > xen_pcibk_test_and_schedule_op(psdev->pdev); > } > > @@ -995,8 +995,7 @@ out: > err = count; > return err; > } > - > -DRIVER_ATTR(new_slot, S_IWUSR, NULL, pcistub_slot_add); > +static DRIVER_ATTR(new_slot, S_IWUSR, NULL, pcistub_slot_add); > > static ssize_t pcistub_slot_remove(struct device_driver *drv, const char *buf, > size_t count) > @@ -1015,8 +1014,7 @@ out: > err = count; > return err; > } > - > -DRIVER_ATTR(remove_slot, S_IWUSR, NULL, pcistub_slot_remove); > +static DRIVER_ATTR(remove_slot, S_IWUSR, NULL, pcistub_slot_remove); > > static ssize_t pcistub_slot_show(struct device_driver *drv, char *buf) > { > @@ -1039,8 +1037,7 @@ static ssize_t pcistub_slot_show(struct > > return count; > } > - > -DRIVER_ATTR(slots, S_IRUSR, pcistub_slot_show, NULL); > +static DRIVER_ATTR(slots, S_IRUSR, pcistub_slot_show, NULL); > > static ssize_t pcistub_irq_handler_show(struct device_driver *drv, char *buf) > { > @@ -1069,8 +1066,7 @@ static ssize_t pcistub_irq_handler_show( > spin_unlock_irqrestore(&pcistub_devices_lock, flags); > return count; > } > - > -DRIVER_ATTR(irq_handlers, S_IRUSR, pcistub_irq_handler_show, NULL); > +static DRIVER_ATTR(irq_handlers, S_IRUSR, pcistub_irq_handler_show, NULL); > > static ssize_t pcistub_irq_handler_switch(struct device_driver *drv, > const char *buf, > @@ -1106,7 +1102,7 @@ out: > err = count; > return err; > } > -DRIVER_ATTR(irq_handler_state, S_IWUSR, NULL, pcistub_irq_handler_switch); > +static DRIVER_ATTR(irq_handler_state, S_IWUSR, NULL, pcistub_irq_handler_switch); > > static ssize_t pcistub_quirk_add(struct device_driver *drv, const char *buf, > size_t count) > @@ -1170,8 +1166,7 @@ out: > > return count; > } > - > -DRIVER_ATTR(quirks, S_IRUSR | S_IWUSR, pcistub_quirk_show, pcistub_quirk_add); > +static DRIVER_ATTR(quirks, S_IRUSR | S_IWUSR, pcistub_quirk_show, pcistub_quirk_add); > > static ssize_t permissive_add(struct device_driver *drv, const char *buf, > size_t count) > @@ -1236,8 +1231,7 @@ static ssize_t permissive_show(struct de > spin_unlock_irqrestore(&pcistub_devices_lock, flags); > return count; > } > - > -DRIVER_ATTR(permissive, S_IRUSR | S_IWUSR, permissive_show, permissive_add); > +static DRIVER_ATTR(permissive, S_IRUSR | S_IWUSR, permissive_show, permissive_add); > > static void pcistub_exit(void) > { > @@ -1374,3 +1368,4 @@ module_init(xen_pcibk_init); > module_exit(xen_pcibk_cleanup); > > MODULE_LICENSE("Dual BSD/GPL"); > +MODULE_ALIAS("xen-backend:pci"); > --- 3.1-rc6/drivers/xen/xen-pciback/pciback.h > +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/pciback.h > @@ -15,6 +15,8 @@ > #include <linux/atomic.h> > #include <xen/interface/io/pciif.h> > > +#define DRV_NAME "xen-pciback" > + > struct pci_dev_entry { > struct list_head list; > struct pci_dev *dev; > @@ -89,7 +91,7 @@ typedef int (*publish_pci_root_cb) (stru > * passthrough - BDFs are exactly like in the host. > */ > struct xen_pcibk_backend { > - char *name; > + const char *name; > int (*init)(struct xen_pcibk_device *pdev); > void (*free)(struct xen_pcibk_device *pdev); > int (*find)(struct pci_dev *pcidev, struct xen_pcibk_device *pdev, > @@ -104,9 +106,9 @@ struct xen_pcibk_backend { > unsigned int devfn); > }; > > -extern struct xen_pcibk_backend xen_pcibk_vpci_backend; > -extern struct xen_pcibk_backend xen_pcibk_passthrough_backend; > -extern struct xen_pcibk_backend *xen_pcibk_backend; > +extern const struct xen_pcibk_backend xen_pcibk_vpci_backend; > +extern const struct xen_pcibk_backend xen_pcibk_passthrough_backend; > +extern const struct xen_pcibk_backend *xen_pcibk_backend; > > static inline int xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev, > struct pci_dev *dev, > @@ -116,13 +118,14 @@ static inline int xen_pcibk_add_pci_dev( > if (xen_pcibk_backend && xen_pcibk_backend->add) > return xen_pcibk_backend->add(pdev, dev, devid, publish_cb); > return -1; > -}; > +} > + > static inline void xen_pcibk_release_pci_dev(struct xen_pcibk_device *pdev, > struct pci_dev *dev) > { > if (xen_pcibk_backend && xen_pcibk_backend->free) > return xen_pcibk_backend->release(pdev, dev); > -}; > +} > > static inline struct pci_dev * > xen_pcibk_get_pci_dev(struct xen_pcibk_device *pdev, unsigned int domain, > @@ -131,7 +134,8 @@ xen_pcibk_get_pci_dev(struct xen_pcibk_d > if (xen_pcibk_backend && xen_pcibk_backend->get) > return xen_pcibk_backend->get(pdev, domain, bus, devfn); > return NULL; > -}; > +} > + > /** > * Add for domain0 PCIE-AER handling. Get guest domain/bus/devfn in xen_pcibk > * before sending aer request to pcifront, so that guest could identify > @@ -148,25 +152,29 @@ static inline int xen_pcibk_get_pcifront > return xen_pcibk_backend->find(pcidev, pdev, domain, bus, > devfn); > return -1; > -}; > +} > + > static inline int xen_pcibk_init_devices(struct xen_pcibk_device *pdev) > { > if (xen_pcibk_backend && xen_pcibk_backend->init) > return xen_pcibk_backend->init(pdev); > return -1; > -}; > +} > + > static inline int xen_pcibk_publish_pci_roots(struct xen_pcibk_device *pdev, > publish_pci_root_cb cb) > { > if (xen_pcibk_backend && xen_pcibk_backend->publish) > return xen_pcibk_backend->publish(pdev, cb); > return -1; > -}; > +} > + > static inline void xen_pcibk_release_devices(struct xen_pcibk_device *pdev) > { > if (xen_pcibk_backend && xen_pcibk_backend->free) > return xen_pcibk_backend->free(pdev); > -}; > +} > + > /* Handles events from front-end */ > irqreturn_t xen_pcibk_handle_event(int irq, void *dev_id); > void xen_pcibk_do_op(struct work_struct *data); > --- 3.1-rc6/drivers/xen/xen-pciback/pciback_ops.c > +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/pciback_ops.c > @@ -10,7 +10,6 @@ > #include <linux/sched.h> > #include "pciback.h" > > -#define DRV_NAME "xen-pciback" > int verbose_request; > module_param(verbose_request, int, 0644); > > --- 3.1-rc6/drivers/xen/xen-pciback/vpci.c > +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/vpci.c > @@ -12,7 +12,6 @@ > #include "pciback.h" > > #define PCI_SLOT_MAX 32 > -#define DRV_NAME "xen-pciback" > > struct vpci_dev_data { > /* Access to dev_list must be protected by lock */ > @@ -150,9 +149,9 @@ static void __xen_pcibk_release_pci_dev( > spin_lock_irqsave(&vpci_dev->lock, flags); > > for (slot = 0; slot < PCI_SLOT_MAX; slot++) { > - struct pci_dev_entry *e, *tmp; > - list_for_each_entry_safe(e, tmp, &vpci_dev->dev_list[slot], > - list) { > + struct pci_dev_entry *e; > + > + list_for_each_entry(e, &vpci_dev->dev_list[slot], list) { > if (e->dev == dev) { > list_del(&e->list); > found_dev = e->dev; > @@ -247,7 +246,7 @@ static int __xen_pcibk_get_pcifront_dev( > return found; > } > > -struct xen_pcibk_backend xen_pcibk_vpci_backend = { > +const struct xen_pcibk_backend xen_pcibk_vpci_backend = { > .name = "vpci", > .init = __xen_pcibk_init_devices, > .free = __xen_pcibk_release_devices, > --- 3.1-rc6/drivers/xen/xen-pciback/xenbus.c > +++ 3.1-rc6-xen-pciback-misc/drivers/xen/xen-pciback/xenbus.c > @@ -13,7 +13,6 @@ > #include <asm/xen/pci.h> > #include "pciback.h" > > -#define DRV_NAME "xen-pciback" > #define INVALID_EVTCHN_IRQ (-1) > struct workqueue_struct *xen_pcibk_wq; > > @@ -176,7 +175,7 @@ static int xen_pcibk_attach(struct xen_p > if (magic == NULL || strcmp(magic, XEN_PCI_MAGIC) != 0) { > xenbus_dev_fatal(pdev->xdev, -EFAULT, > "version mismatch (%s/%s) with pcifront - " > - "halting xen_pcibk", > + "halting " DRV_NAME, > magic, XEN_PCI_MAGIC); > goto out; > } > @@ -724,7 +723,7 @@ static struct xenbus_driver xenbus_xen_p > .otherend_changed = xen_pcibk_frontend_changed, > }; > > -struct xen_pcibk_backend *xen_pcibk_backend; > +const struct xen_pcibk_backend *__read_mostly xen_pcibk_backend; > > int __init xen_pcibk_xenbus_register(void) > { >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel