It seems that the right way to identify PCI address regions is to iterate pci resources directly, instead of traversing iomem_resource
:
struct pci_dev *dev = 0;
struct resource *p;
for_each_pci_dev(dev)
{
int i;
for (i = 0; i < DEVICE_COUNT_RESOURCE; ++i)
if ((p=dev->resource + i))
printk(KERN_NOTICE "%lx-%lx %x", p->start, p->end, p->flags);
// etc...
}