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: Juergen Gross <jgross@suse.com> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
This commit is contained in:
parent
72a9b18629
commit
1af916b701
|
@ -149,13 +149,10 @@ static inline void pcistub_device_put(struct pcistub_device *psdev)
|
|||
kref_put(&psdev->kref, pcistub_device_release);
|
||||
}
|
||||
|
||||
static struct pcistub_device *pcistub_device_find(int domain, int bus,
|
||||
int slot, int func)
|
||||
static struct pcistub_device *pcistub_device_find_locked(int domain, int bus,
|
||||
int slot, int func)
|
||||
{
|
||||
struct pcistub_device *psdev = NULL;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&pcistub_devices_lock, flags);
|
||||
struct pcistub_device *psdev;
|
||||
|
||||
list_for_each_entry(psdev, &pcistub_devices, dev_list) {
|
||||
if (psdev->dev != NULL
|
||||
|
@ -163,15 +160,25 @@ static struct pcistub_device *pcistub_device_find(int domain, int bus,
|
|||
&& bus == psdev->dev->bus->number
|
||||
&& slot == PCI_SLOT(psdev->dev->devfn)
|
||||
&& func == PCI_FUNC(psdev->dev->devfn)) {
|
||||
pcistub_device_get(psdev);
|
||||
goto out;
|
||||
return psdev;
|
||||
}
|
||||
}
|
||||
|
||||
/* didn't find it */
|
||||
psdev = NULL;
|
||||
return 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);
|
||||
return psdev;
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
list_for_each_entry(psdev, &pcistub_devices, dev_list) {
|
||||
if (psdev->dev != NULL
|
||||
&& 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);
|
||||
break;
|
||||
}
|
||||
}
|
||||
psdev = pcistub_device_find_locked(domain, bus, slot, func);
|
||||
if (psdev)
|
||||
found_dev = pcistub_device_get_pci_dev(pdev, psdev);
|
||||
|
||||
spin_unlock_irqrestore(&pcistub_devices_lock, flags);
|
||||
return found_dev;
|
||||
|
|
Loading…
Reference in New Issue