Re: [PATCH 0/5]Improve pci_reset_function() v2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Nov 06, 2008 at 04:21:11PM +0800, Sheng Yang wrote:
> Hi Jesse/Matthew
> 
> Here is v2 of this patchset. The mainly change is I addressed comments from
> Matthew to avoid a megafunction to handle all. Though now logic is a little
> duplicate, I think it's clear and safe.

I think we can redeuce the amount of duplicate logic this way:

int pcie_flr(struct pci_dev *pdev, int probe)
{
	u16 status;
	u32 cap;
	int exppos = pci_find_capability(dev, PCI_CAP_ID_EXP);

	if (!exppos)
		return -ENOTTY;
	pci_read_config_dword(dev, exppos + PCI_EXP_DEVCAP, &cap);
	if (!(cap & PCI_EXP_DEVCAP_FLR))
		return -ENOTTY;
	
	if (probe)
		return 0;

	pci_block_user_cfg_access(dev);

[...]
}

static int __pci_reset_function(struct pci_dev *pdev, int probe)
{
        int res;

        res = pcie_flr(pdev, probe);
        if (res != -ENOTTY)
                return res;

        res = pci_af_flr(pdev, probe);
        if (res != -ENOTTY)
                return res;

        if (pdev->driver && pdev->driver->reset) {
		if (probe)
			return 0;
                res = pdev->driver->reset(pdev);
	}

        return res;
}

int pci_execute_reset_function(struct pci_dev *dev)
{
	return __pci_reset_function(dev, 0);
}

int pci_reset_function(struct pci_dev *dev)
{
	int res = __pci_reset_function(dev, 1);
	if (res < 0)
		return res;
	
[... disable_irq ...]

	res = pci_execute_reset_function(dev);

[... enable irq ...]

	return res;
}

-- 
Matthew Wilcox				Intel Open Source Technology Centre
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours.  We can't possibly take such
a retrograde step."
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux