Plus a little bit of other cleanup.
As usual, written and tested on 2.6.26 and made apply to the 2.6.18
tree without further testing.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
Index: head-2008-07-21/drivers/pci/msi.h
===================================================================
--- head-2008-07-21.orig/drivers/pci/msi.h 2008-07-22 10:40:56.000000000
+0200
+++ head-2008-07-21/drivers/pci/msi.h 2008-07-22 10:23:23.000000000 +0200
@@ -84,11 +84,6 @@
extern void (*interrupt[NR_IRQS])(void);
extern int pci_vector_resources(int last, int nr_released);
-#ifdef CONFIG_XEN
-extern int unregister_msi_get_owner(int (*func)(struct pci_dev *dev));
-extern int register_msi_get_owner(int (*func)(struct pci_dev *dev));
-#endif
-
/*
* MSI-X Address Register
*/
Index: head-2008-07-21/drivers/pci/msi-xen.c
===================================================================
--- head-2008-07-21.orig/drivers/pci/msi-xen.c 2008-07-22 10:40:56.000000000
+0200
+++ head-2008-07-21/drivers/pci/msi-xen.c 2008-07-22 10:34:02.000000000
+0200
@@ -116,7 +116,7 @@ static void detach_pirq_entry(int entry_
/*
* pciback will provide device's owner
*/
-int (*get_owner)(struct pci_dev *dev);
+static int (*get_owner)(struct pci_dev *dev);
int register_msi_get_owner(int (*func)(struct pci_dev *dev))
{
@@ -130,33 +130,32 @@ EXPORT_SYMBOL(register_msi_get_owner);
int unregister_msi_get_owner(int (*func)(struct pci_dev *dev))
{
- if (get_owner == func)
- get_owner = NULL;
+ if (get_owner != func)
+ return -EINVAL;
+ get_owner = NULL;
return 0;
}
static int msi_get_dev_owner(struct pci_dev *dev)
{
- int owner = DOMID_SELF;
+ int owner;
BUG_ON(!is_initial_xendomain());
- if (get_owner && (owner = get_owner(dev)) >=0 ) {
+ if (get_owner && (owner = get_owner(dev)) >= 0) {
printk(KERN_INFO "get owner for dev %x get %x \n",
- dev->devfn, owner);
+ dev->devfn, owner);
return owner;
}
- else
- return DOMID_SELF;
+
+ return DOMID_SELF;
}
static int msi_unmap_pirq(struct pci_dev *dev, int pirq)
{
struct physdev_unmap_pirq unmap;
int rc;
- domid_t domid = DOMID_SELF;
- domid = msi_get_dev_owner(dev);
- unmap.domid = domid;
+ unmap.domid = msi_get_dev_owner(dev);
unmap.pirq = pirq;
if ((rc = HYPERVISOR_physdev_op(PHYSDEVOP_unmap_pirq, &unmap)))
@@ -164,7 +163,7 @@ static int msi_unmap_pirq(struct pci_dev
if (rc < 0)
return rc;
- return 0;
+ return 0;
}
/*
Index: head-2008-07-21/drivers/xen/core/pci.c
===================================================================
--- head-2008-07-21.orig/drivers/xen/core/pci.c 2008-07-22 10:40:56.000000000
+0200
+++ head-2008-07-21/drivers/xen/core/pci.c 2008-07-22 10:19:07.000000000
+0200
@@ -24,7 +24,8 @@ static int pci_bus_probe_wrapper(struct
r = pci_bus_probe(dev);
if (r)
- HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove, &manage_pci);
+ WARN_ON(HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove,
+ &manage_pci));
return r;
}
@@ -40,7 +41,8 @@ static int pci_bus_remove_wrapper(struct
r = pci_bus_remove(dev);
/* dev and pci_dev are no longer valid!! */
- HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove, &manage_pci);
+ WARN_ON(HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove,
+ &manage_pci));
return r;
}
Index: head-2008-07-21/drivers/xen/pciback/pci_stub.c
===================================================================
--- head-2008-07-21.orig/drivers/xen/pciback/pci_stub.c 2008-07-22
10:40:56.000000000 +0200
+++ head-2008-07-21/drivers/xen/pciback/pci_stub.c 2008-07-22
10:25:42.000000000 +0200
@@ -832,9 +832,7 @@ static void pcistub_exit(void)
driver_remove_file(&pciback_pci_driver.driver, &driver_attr_permissive);
pci_unregister_driver(&pciback_pci_driver);
-#ifdef CONFIG_PCI_MSI
- unregister_msi_get_owner(pciback_get_owner);
-#endif
+ WARN_ON(unregister_msi_get_owner(pciback_get_owner));
}
static int __init pcistub_init(void)
@@ -892,10 +890,8 @@ static int __init pcistub_init(void)
err = driver_create_file(&pciback_pci_driver.driver,
&driver_attr_permissive);
-#ifdef CONFIG_PCI_MSI
if (!err)
err = register_msi_get_owner(pciback_get_owner);
-#endif
if (err)
pcistub_exit();
Index: head-2008-07-21/include/linux/pci.h
===================================================================
--- head-2008-07-21.orig/include/linux/pci.h 2008-07-22 10:40:56.000000000
+0200
+++ head-2008-07-21/include/linux/pci.h 2008-07-22 10:41:49.000000000 +0200
@@ -599,6 +599,10 @@ static inline void msi_remove_pci_irq_ve
struct msix_entry *entries, int nvec) {return -1;}
static inline void pci_disable_msix(struct pci_dev *dev) {}
static inline void msi_remove_pci_irq_vectors(struct pci_dev *dev) {}
+#ifdef CONFIG_XEN
+#define register_msi_get_owner(func) 0
+#define unregister_msi_get_owner(func) 0
+#endif
#else
extern void pci_scan_msi_device(struct pci_dev *dev);
extern int pci_enable_msi(struct pci_dev *dev);
@@ -607,6 +611,10 @@ extern void pci_msix_shutdown(struct pci
struct msix_entry *entries, int nvec);
extern void pci_disable_msix(struct pci_dev *dev);
extern void msi_remove_pci_irq_vectors(struct pci_dev *dev);
+#ifdef CONFIG_XEN
+extern int register_msi_get_owner(int (*func)(struct pci_dev *dev));
+extern int unregister_msi_get_owner(int (*func)(struct pci_dev *dev));
+#endif
#endif
extern void pci_block_user_cfg_access(struct pci_dev *dev);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|