Commit 1af916b7 authored by Juergen Gross's avatar Juergen Gross Committed by David Vrabel

xen/pciback: simplify pcistub device handling

The Xen pciback driver maintains a list of all its seized devices.
There are two functions searching the list for a specific device with
basically the same semantics just returning different structures in
case of a match.

Split out the search function.
Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
Signed-off-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
parent 72a9b186
...@@ -149,13 +149,10 @@ static inline void pcistub_device_put(struct pcistub_device *psdev) ...@@ -149,13 +149,10 @@ static inline void pcistub_device_put(struct pcistub_device *psdev)
kref_put(&psdev->kref, pcistub_device_release); kref_put(&psdev->kref, pcistub_device_release);
} }
static struct pcistub_device *pcistub_device_find(int domain, int bus, static struct pcistub_device *pcistub_device_find_locked(int domain, int bus,
int slot, int func) int slot, int func)
{ {
struct pcistub_device *psdev = NULL; struct pcistub_device *psdev;
unsigned long flags;
spin_lock_irqsave(&pcistub_devices_lock, flags);
list_for_each_entry(psdev, &pcistub_devices, dev_list) { list_for_each_entry(psdev, &pcistub_devices, dev_list) {
if (psdev->dev != NULL if (psdev->dev != NULL
...@@ -163,15 +160,25 @@ static struct pcistub_device *pcistub_device_find(int domain, int bus, ...@@ -163,15 +160,25 @@ static struct pcistub_device *pcistub_device_find(int domain, int bus,
&& bus == psdev->dev->bus->number && bus == psdev->dev->bus->number
&& slot == PCI_SLOT(psdev->dev->devfn) && slot == PCI_SLOT(psdev->dev->devfn)
&& func == PCI_FUNC(psdev->dev->devfn)) { && func == PCI_FUNC(psdev->dev->devfn)) {
pcistub_device_get(psdev); return psdev;
goto out;
} }
} }
/* didn't find it */ return NULL;
psdev = NULL; }
static struct pcistub_device *pcistub_device_find(int domain, int bus,
int slot, int func)
{
struct pcistub_device *psdev;
unsigned long flags;
spin_lock_irqsave(&pcistub_devices_lock, flags);
psdev = pcistub_device_find_locked(domain, bus, slot, func);
if (psdev)
pcistub_device_get(psdev);
out:
spin_unlock_irqrestore(&pcistub_devices_lock, flags); spin_unlock_irqrestore(&pcistub_devices_lock, flags);
return psdev; return psdev;
} }
...@@ -207,16 +214,9 @@ struct pci_dev *pcistub_get_pci_dev_by_slot(struct xen_pcibk_device *pdev, ...@@ -207,16 +214,9 @@ struct pci_dev *pcistub_get_pci_dev_by_slot(struct xen_pcibk_device *pdev,
spin_lock_irqsave(&pcistub_devices_lock, flags); spin_lock_irqsave(&pcistub_devices_lock, flags);
list_for_each_entry(psdev, &pcistub_devices, dev_list) { psdev = pcistub_device_find_locked(domain, bus, slot, func);
if (psdev->dev != NULL if (psdev)
&& domain == pci_domain_nr(psdev->dev->bus)
&& bus == psdev->dev->bus->number
&& slot == PCI_SLOT(psdev->dev->devfn)
&& func == PCI_FUNC(psdev->dev->devfn)) {
found_dev = pcistub_device_get_pci_dev(pdev, psdev); found_dev = pcistub_device_get_pci_dev(pdev, psdev);
break;
}
}
spin_unlock_irqrestore(&pcistub_devices_lock, flags); spin_unlock_irqrestore(&pcistub_devices_lock, flags);
return found_dev; return found_dev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment