diff options
author | Yinghai Lu <yinghai@kernel.org> | 2012-09-17 22:20:29 -0700 |
---|---|---|
committer | Yinghai Lu <yinghai@kernel.org> | 2012-09-17 22:20:29 -0700 |
commit | 256789e100a1ae6b8fd877946d4d9dc247b62a39 (patch) | |
tree | 4f35f26192336a54d3a618b278b780dd72c95f0b | |
parent | dce3a05a9d9dd1a5f22241e575c98fd78cede7bc (diff) | |
download | linux-yinghai-256789e100a1ae6b8fd877946d4d9dc247b62a39.tar.gz |
PCI: Use for_each_res with IOV releated funcs
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
-rw-r--r-- | drivers/pci/iov.c | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index aeccc911abb82..a05326bbe11ad 100644 --- a/drivers/pci/iov.c +++ b/drivers/pci/iov.c @@ -99,17 +99,20 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset) pci_setup_device(virtfn); virtfn->dev.parent = dev->dev.parent; - for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) { - res = dev->resource + PCI_IOV_RESOURCES + i; + for_each_pci_resource(dev, res, i, PCI_IOV_RES) { + struct resource *virtfn_res; + if (!res->parent) continue; - virtfn->resource[i].name = pci_name(virtfn); - virtfn->resource[i].flags = res->flags; + + virtfn_res = pci_dev_resource_n(virtfn, i - PCI_IOV_RESOURCES); + virtfn_res->name = pci_name(virtfn); + virtfn_res->flags = res->flags; size = resource_size(res); do_div(size, iov->total); - virtfn->resource[i].start = res->start + size * id; - virtfn->resource[i].end = virtfn->resource[i].start + size - 1; - rc = request_resource(res, &virtfn->resource[i]); + virtfn_res->start = res->start + size * id; + virtfn_res->end = virtfn_res->start + size - 1; + rc = request_resource(res, virtfn_res); BUG_ON(rc); } @@ -313,9 +316,8 @@ static int sriov_enable(struct pci_dev *dev, int nr_virtfn) return -EIO; nres = 0; - for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) { - bars |= (1 << (i + PCI_IOV_RESOURCES)); - res = dev->resource + PCI_IOV_RESOURCES + i; + for_each_pci_resource(dev, res, i, PCI_IOV_RES) { + bars |= 1 << i; if (res->parent) nres++; } @@ -473,10 +475,9 @@ found: pci_write_config_dword(dev, pos + PCI_SRIOV_SYS_PGSIZE, pgsz); nres = 0; - for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) { - res = dev->resource + PCI_IOV_RESOURCES + i; + for_each_pci_resource(dev, res, i, PCI_IOV_RES) { i += __pci_read_base(dev, pci_bar_unknown, res, - pos + PCI_SRIOV_BAR + i * 4); + pos + PCI_SRIOV_BAR + (i - PCI_IOV_RESOURCES) * 4); if (!res->flags) continue; if (resource_size(res) & (PAGE_SIZE - 1)) { @@ -519,10 +520,8 @@ found: return 0; failed: - for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) { - res = dev->resource + PCI_IOV_RESOURCES + i; + for_each_pci_resource(dev, res, i, PCI_IOV_RES) res->flags = 0; - } return rc; } |