On Tue, Aug 21, 2012 at 8:13 AM, Ram Pai wrote: > PCI: pci resource iterator > > Currently pci_dev structure holds an array of 17 PCI resources; six base > BARs, one ROM BAR, four BRIDGE BARs, six sriov BARs. This is wasteful. > A bridge device just needs the 4 bridge resources. A non-bridge device > just needs the six base resources and one ROM resource. The sriov > resources are needed only if the device has SRIOV capability. > > The pci_dev structure needs to be re-organized to avoid unnecessary > bloating. However too much code outside the pci-bus driver, assumes the > internal details of the pci_dev structure, thus making it hard to > re-organize the datastructure. > > As a first step this patch provides generic methods to access the > resource structure of the pci_dev. > > Once this patch is accepted, I have another 40+ patches that modify all > the files that directly access the resource structure, to use the new > methods provided in the first step. > > Finally we can re-organize the resource structure in the pci_dev > structure and correspondingly update the methods. > > This patch is compile tested only. > > Changelog: > Consolidated iterator interface as per Bjorn's suggestion. > > +#define for_each_pci_resource(dev, res, flag) \ > + for (res = pci_next_resource(dev, NULL, flag); res; \ > + res = pci_next_resource(dev, res, flag)) > + We may need to keep the idx, so we could make the converting more granularity. because some loop body is still using the idx. also there is some abusing pci bridge resource as addon resources. and we need to remove the abusing at first --- that is addressed by: http://git.kernel.org/?p=linux/kernel/git/yinghai/linux-yinghai.git;a=commitdiff;h=5eb48c3c998257386f67a7570778872ec600138f PCI: Add addon_resource support for pci_dev and later we may remove the idx in the for_each_pci_resource() Please check updated version of your patch that keep the idx. Thanks Yinghai