#include "conf_space.h"
 #include "conf_space_quirks.h"
 
-#define DRV_NAME       "xen-pciback"
 static int permissive;
 module_param(permissive, bool, 0644);
 
 
        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)
 
        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++) {
 
 #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)
 {
                        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;
 }
 
        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,
 
 #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,
        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);
        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);
        }
 
                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)
                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)
 {
 
        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)
 {
        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,
                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)
 
        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)
        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)
 {
 module_exit(xen_pcibk_cleanup);
 
 MODULE_LICENSE("Dual BSD/GPL");
+MODULE_ALIAS("xen-backend:pci");
 
 #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;
  *  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,
                               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,
        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,
        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
                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);
 
 #include <linux/sched.h>
 #include "pciback.h"
 
-#define DRV_NAME       "xen-pciback"
 int verbose_request;
 module_param(verbose_request, int, 0644);
 
 
 #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 */
        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;
        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,
 
 #include <asm/xen/pci.h>
 #include "pciback.h"
 
-#define        DRV_NAME        "xen-pciback"
 #define INVALID_EVTCHN_IRQ  (-1)
 struct workqueue_struct *xen_pcibk_wq;
 
        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;
        }
        .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)
 {