From: Ross Philipson Date: Thu, 11 Jun 2009 17:07:51 +0000 (-0400) Subject: Removed FLR from pciback put code. This was not being used and the X-Git-Url: http://xenbits.xen.org/gitweb?a=commitdiff_plain;h=b631b9005cd72b0e2e859dd1fab557a3015c8b58;p=xenclient%2Flinux-2.6.27-pq.git Removed FLR from pciback put code. This was not being used and the call the lock out user mode access was causing a crash a shutdown time. Changes to be committed: new file: master/remove-release-flr modified: master/series --- diff --git a/master/remove-release-flr b/master/remove-release-flr new file mode 100644 index 0000000..a9ad9b0 --- /dev/null +++ b/master/remove-release-flr @@ -0,0 +1,135 @@ +diff --git a/drivers/xen/pciback/controller.c b/drivers/xen/pciback/controller.c +index 4c1aaf3..294e48f 100644 +--- a/drivers/xen/pciback/controller.c ++++ b/drivers/xen/pciback/controller.c +@@ -208,7 +208,7 @@ void pciback_release_pci_dev(struct pciback_device *pdev, struct pci_dev *dev) + } + + spin_unlock_irqrestore(&dev_data->lock, flags); +- pcistub_put_pci_dev(found_dev, 0); ++ pcistub_put_pci_dev(found_dev); + } + + int pciback_init_devices(struct pciback_device *pdev) +@@ -396,7 +396,7 @@ void pciback_release_devices(struct pciback_device *pdev) + list_for_each_entry_safe(dev_entry, d, + &cntrl_entry->dev_list, list) { + list_del(&dev_entry->list); +- pcistub_put_pci_dev(dev_entry->dev, 0); ++ pcistub_put_pci_dev(dev_entry->dev); + kfree(dev_entry); + } + list_del(&cntrl_entry->list); +diff --git a/drivers/xen/pciback/passthrough.c b/drivers/xen/pciback/passthrough.c +index b9948a5..9e7a0c4 100644 +--- a/drivers/xen/pciback/passthrough.c ++++ b/drivers/xen/pciback/passthrough.c +@@ -88,7 +88,7 @@ void pciback_release_pci_dev(struct pciback_device *pdev, struct pci_dev *dev) + spin_unlock_irqrestore(&dev_data->lock, flags); + + if (found_dev) +- pcistub_put_pci_dev(found_dev, 1); ++ pcistub_put_pci_dev(found_dev); + } + + int pciback_init_devices(struct pciback_device *pdev) +@@ -157,7 +157,7 @@ void pciback_release_devices(struct pciback_device *pdev) + + list_for_each_entry_safe(dev_entry, t, &dev_data->dev_list, list) { + list_del(&dev_entry->list); +- pcistub_put_pci_dev(dev_entry->dev, 1); ++ pcistub_put_pci_dev(dev_entry->dev); + kfree(dev_entry); + } + +diff --git a/drivers/xen/pciback/pci_stub.c b/drivers/xen/pciback/pci_stub.c +index 486034f..fb40598 100644 +--- a/drivers/xen/pciback/pci_stub.c ++++ b/drivers/xen/pciback/pci_stub.c +@@ -237,7 +237,7 @@ struct pci_dev *pcistub_get_pci_dev(struct pciback_device *pdev, + return found_dev; + } + +-void pcistub_put_pci_dev(struct pci_dev *dev, int do_flr) ++void pcistub_put_pci_dev(struct pci_dev *dev) + { + struct pcistub_device *psdev, *found_psdev = NULL; + unsigned long flags; +@@ -253,17 +253,14 @@ void pcistub_put_pci_dev(struct pci_dev *dev, int do_flr) + + spin_unlock_irqrestore(&pcistub_devices_lock, flags); + ++ if (found_psdev == NULL) ++ return; ++ + /*hold this lock for avoiding breaking link between + * pcistub and pciback when AER is in processing + */ + down_write(&pcistub_sem); + +- /* For pass-through devices, do an FLR (or approximate) for the device +- * before it is put back and ready for the next domain +- */ +- if (!disable_all_flr && do_flr) +- pciback_flr_device(dev); +- + /* Cleanup our device + * (so it's ready for the next domain) + */ +diff --git a/drivers/xen/pciback/pciback.h b/drivers/xen/pciback/pciback.h +index 5cd967c..f2a50fa 100644 +--- a/drivers/xen/pciback/pciback.h ++++ b/drivers/xen/pciback/pciback.h +@@ -71,7 +71,7 @@ struct pci_dev *pcistub_get_pci_dev_by_slot(struct pciback_device *pdev, + int slot, int func); + struct pci_dev *pcistub_get_pci_dev(struct pciback_device *pdev, + struct pci_dev *dev); +-void pcistub_put_pci_dev(struct pci_dev *dev, int do_flr); ++void pcistub_put_pci_dev(struct pci_dev *dev); + + /* Reference/unreference PCI Devices and stubs without changing the state */ + struct pci_dev *pcistub_ref_pci_dev(struct pci_dev *dev); +diff --git a/drivers/xen/pciback/slot.c b/drivers/xen/pciback/slot.c +index 9c66633..105a8b6 100644 +--- a/drivers/xen/pciback/slot.c ++++ b/drivers/xen/pciback/slot.c +@@ -109,7 +109,7 @@ void pciback_release_pci_dev(struct pciback_device *pdev, struct pci_dev *dev) + spin_unlock_irqrestore(&slot_dev->lock, flags); + + if (found_dev) +- pcistub_put_pci_dev(found_dev, 0); ++ pcistub_put_pci_dev(found_dev); + } + + int pciback_init_devices(struct pciback_device *pdev) +@@ -149,7 +149,7 @@ void pciback_release_devices(struct pciback_device *pdev) + for (slot = 0; slot < PCI_SLOT_MAX; slot++) { + dev = slot_dev->slots[bus][slot]; + if (dev != NULL) +- pcistub_put_pci_dev(dev, 0); ++ pcistub_put_pci_dev(dev); + } + + kfree(slot_dev); +diff --git a/drivers/xen/pciback/vpci.c b/drivers/xen/pciback/vpci.c +index 259e71d..a5b7ece 100644 +--- a/drivers/xen/pciback/vpci.c ++++ b/drivers/xen/pciback/vpci.c +@@ -162,7 +162,7 @@ void pciback_release_pci_dev(struct pciback_device *pdev, struct pci_dev *dev) + spin_unlock_irqrestore(&vpci_dev->lock, flags); + + if (found_dev) +- pcistub_put_pci_dev(found_dev, 0); ++ pcistub_put_pci_dev(found_dev); + } + + int pciback_init_devices(struct pciback_device *pdev) +@@ -202,7 +202,7 @@ void pciback_release_devices(struct pciback_device *pdev) + list_for_each_entry_safe(e, tmp, &vpci_dev->dev_list[slot], + list) { + list_del(&e->list); +- pcistub_put_pci_dev(e->dev, 0); ++ pcistub_put_pci_dev(e->dev); + kfree(e); + } + } diff --git a/master/series b/master/series index d9f05eb..f436bde 100644 --- a/master/series +++ b/master/series @@ -259,3 +259,4 @@ xen-acpi-wmi pciback-flr snd-hda-intel-hp-elite-6930p-laptop-mode pass2-driver +remove-release-flr