Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+21 −21
Original line number Diff line number Diff line
@@ -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,
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)) {
	psdev = pcistub_device_find_locked(domain, bus, slot, func);
	if (psdev)
		found_dev = pcistub_device_get_pci_dev(pdev, psdev);
			break;
		}
	}

	spin_unlock_irqrestore(&pcistub_devices_lock, flags);
	return found_dev;