hose, &resources);
                hose->bus = bus;
                hose->need_domain_info = need_domain_info;
-               next_busno = bus->subordinate + 1;
+               next_busno = bus->busn_res.end + 1;
                /* Don't allow 8-bit bus number overflow inside the hose -
                   reserve some space for bridges. */ 
                if (next_busno > 224) {
 
                        if (!sys->bus)
                                panic("PCI: unable to scan bus!");
 
-                       busnr = sys->bus->subordinate + 1;
+                       busnr = sys->bus->busn_res.end + 1;
 
                        list_add(&sys->node, head);
                } else {
 
                return NULL;
        }
 
-       pbus->subordinate = pci_scan_child_bus(pbus);
+       pbus->busn_res.end = pci_scan_child_bus(pbus);
        return pbus;
 
 out3:
 
                pci_free_resource_list(&resources);
                return;
        }
-       bus->secondary = hose->first_busno;
+       bus->busn_res.start = hose->first_busno;
        hose->bus = bus;
 
-       hose->last_busno = bus->subordinate;
+       hose->last_busno = bus->busn_res.end;
 }
 
 static int __init pcibios_init(void)
 
        need_domain_info = need_domain_info || hose->index;
        hose->need_domain_info = need_domain_info;
        if (bus) {
-               next_busno = bus->subordinate + 1;
+               next_busno = bus->busn_res.end + 1;
                /* Don't allow 8-bit bus number overflow inside the hose -
                   reserve some space for bridges. */
                if (next_busno > 224) {
 
                pci_free_resource_list(&resources);
                return;
        }
-       bus->secondary = hose->first_busno;
+       bus->busn_res.start = hose->first_busno;
        hose->bus = bus;
 
        /* Get probe mode and perform scan */
                mode = ppc_md.pci_probe_mode(bus);
        pr_debug("    probe mode: %d\n", mode);
        if (mode == PCI_PROBE_DEVTREE) {
-               bus->subordinate = hose->last_busno;
+               bus->busn_res.end = hose->last_busno;
                of_scan_bus(node, bus);
        }
 
        if (mode == PCI_PROBE_NORMAL)
-               hose->last_busno = bus->subordinate = pci_scan_child_bus(bus);
+               hose->last_busno = bus->busn_res.end = pci_scan_child_bus(bus);
 
        /* Platform gets a chance to do some global fixups before
         * we proceed to resource allocation
 
 
        for (ln = pci_root_buses.next; ln != &pci_root_buses; ln = ln->next) {
                bus = pci_bus_b(ln);
-               if (in_bus >= bus->number && in_bus <= bus->subordinate)
+               if (in_bus >= bus->number && in_bus <= bus->busn_res.end)
                        break;
                bus = NULL;
        }
 
        }
 
        bus->primary = dev->bus->number;
-       bus->subordinate = busrange[1];
+       bus->busn_res.end = busrange[1];
        bus->bridge_ctl = 0;
 
        /* parse ranges property */
 
                dcomp = OPAL_IGNORE_RID_DEVICE_NUMBER;
                fcomp = OPAL_IGNORE_RID_FUNCTION_NUMBER;
                parent = pe->pbus->self;
-               count = pe->pbus->subordinate - pe->pbus->secondary + 1;
+               count = pe->pbus->busn_res.end - pe->pbus->busn_res.start + 1;
                switch(count) {
                case  1: bcomp = OpalPciBusAll;         break;
                case  2: bcomp = OpalPciBus7Bits;       break;
        pe->pdev = NULL;
        pe->tce32_seg = -1;
        pe->mve_number = -1;
-       pe->rid = bus->secondary << 8;
+       pe->rid = bus->busn_res.start << 8;
        pe->dma_weight = 0;
 
-       pe_info(pe, "Secondary busses %d..%d associated with PE\n",
-               bus->secondary, bus->subordinate);
+       pe_info(pe, "Secondary busses %pR associated with PE\n",
+               &bus->busn_res);
 
        if (pnv_ioda_configure_pe(phb, pe)) {
                /* XXX What do we do here ? */
 
                if (!num)
                        return;
                pcibios_setup_bus_devices(bus);
-               max = bus->secondary;
+               max = bus->busn_res.start;
                for (pass=0; pass < 2; pass++)
                        list_for_each_entry(dev, &bus->devices, bus_list) {
                        if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
 
        need_domain_info = need_domain_info || hose->index;
        hose->need_domain_info = need_domain_info;
        if (bus) {
-               next_busno = bus->subordinate + 1;
+               next_busno = bus->busn_res.end + 1;
                /* Don't allow 8-bit bus number overflow inside the hose -
                   reserve some space for bridges. */
                if (next_busno > 224) {
 
        }
 
        bus->primary = dev->bus->number;
-       bus->subordinate = busrange[1];
+       bus->busn_res.end = busrange[1];
        bus->bridge_ctl = 0;
 
        /* parse ranges property, or cook one up by hand for Simba */
                pci_free_resource_list(&resources);
                return NULL;
        }
-       bus->secondary = pbm->pci_first_busno;
-       bus->subordinate = pbm->pci_last_busno;
+       bus->busn_res.start = pbm->pci_first_busno;
+       bus->busn_res.end = pbm->pci_last_busno;
 
        pci_of_scan_bus(pbm, node, bus);
        pci_bus_add_devices(bus);
 
                         */
                        bus = pci_scan_bus(0, controller->ops, controller);
                        controller->root_bus = bus;
-                       controller->last_busno = bus->subordinate;
+                       controller->last_busno = bus->busn_res.end;
                }
        }
 
                                 */
                                if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI &&
                                        (PCI_SLOT(dev->devfn) == 0)) {
-                                       next_bus = dev->subordinate;
+                                       next_bus = dev->busn_res.end;
                                        controllers[i].mem_resources[0] =
                                                *next_bus->resource[0];
                                        controllers[i].mem_resources[1] =
 
                bus = pci_create_root_bus(NULL, busnum, &pci_root_ops, sd,
                                          &resources);
                if (bus) {
-                       bus->subordinate = pci_scan_child_bus(bus);
+                       bus->busn_res.end = pci_scan_child_bus(bus);
                        pci_set_host_bridge_release(
                                to_pci_host_bridge(bus->bridge),
                                release_pci_root_info, info);
 
                bus = pci_scan_root_bus(NULL, pci_ctrl->first_busno,
                                        pci_ctrl->ops, pci_ctrl, &resources);
                pci_ctrl->bus = bus;
-               pci_ctrl->last_busno = bus->subordinate;
+               pci_ctrl->last_busno = bus->busn_res.end;
                if (next_busno <= pci_ctrl->last_busno)
                        next_busno = pci_ctrl->last_busno+1;
        }
 
                        if (drhd->devices[i] &&
                            drhd->devices[i]->subordinate &&
                            drhd->devices[i]->subordinate->number <= bus &&
-                           drhd->devices[i]->subordinate->subordinate >= bus)
+                           drhd->devices[i]->subordinate->busn_res.end >= bus)
                                return drhd->iommu;
                }
 
 
                        if (bridge->subordinate &&
                            (bridge->subordinate->number <=
                             tp->pdev->bus->number) &&
-                           (bridge->subordinate->subordinate >=
+                           (bridge->subordinate->busn_res.end >=
                             tp->pdev->bus->number)) {
                                tg3_flag_set(tp, 5701_DMA_BUG);
                                pci_dev_put(bridge);
                        if (bridge && bridge->subordinate &&
                            (bridge->subordinate->number <=
                             tp->pdev->bus->number) &&
-                           (bridge->subordinate->subordinate >=
+                           (bridge->subordinate->busn_res.end >=
                             tp->pdev->bus->number)) {
                                tg3_flag_set(tp, 40BIT_DMA_BUG);
                                pci_dev_put(bridge);
 
                int size, u32 *val)
 {
        struct dino_device *d = DINO_DEV(parisc_walk_tree(bus->bridge));
-       u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
+       u32 local_bus = (bus->parent == NULL) ? 0 : bus->busn_res.start;
        u32 v = DINO_CFG_TOK(local_bus, devfn, where & ~3);
        void __iomem *base_addr = d->hba.base_addr;
        unsigned long flags;
        int size, u32 val)
 {
        struct dino_device *d = DINO_DEV(parisc_walk_tree(bus->bridge));
-       u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
+       u32 local_bus = (bus->parent == NULL) ? 0 : bus->busn_res.start;
        u32 v = DINO_CFG_TOK(local_bus, devfn, where & ~3);
        void __iomem *base_addr = d->hba.base_addr;
        unsigned long flags;
         struct dino_device *dino_dev = DINO_DEV(parisc_walk_tree(bus->bridge));
 
        DBG(KERN_WARNING "%s(0x%p) bus %d platform_data 0x%p\n",
-           __func__, bus, bus->secondary,
+           __func__, bus, bus->busn_res.start,
            bus->bridge->platform_data);
 
        /* Firmware doesn't set up card-mode dino, so we have to */
                return 0;
        }
 
-       bus->subordinate = pci_scan_child_bus(bus);
+       bus->busn_res.end = pci_scan_child_bus(bus);
 
        /* This code *depends* on scanning being single threaded
         * if it isn't, this global bus number count will fail
         */
-       dino_current_bus = bus->subordinate + 1;
+       dino_current_bus = bus->busn_res.end + 1;
        pci_bus_assign_resources(bus);
        pci_bus_add_devices(bus);
        return 0;
 
                intr_slot = PCI_SLOT(pcidev->devfn);
        }
        DBG_IRT("iosapic_xlate_pin:  bus %d slot %d pin %d\n",
-                               pcidev->bus->secondary, intr_slot, intr_pin);
+                       pcidev->bus->busn_res.start, intr_slot, intr_pin);
 
        return irt_find_irqline(isi, intr_slot, intr_pin);
 }
 
 
 static int lba_device_present(u8 bus, u8 dfn, struct lba_device *d)
 {
-       u8 first_bus = d->hba.hba_bus->secondary;
-       u8 last_sub_bus = d->hba.hba_bus->subordinate;
+       u8 first_bus = d->hba.hba_bus->busn_res.start;
+       u8 last_sub_bus = d->hba.hba_bus->busn_res.end;
 
        if ((bus < first_bus) ||
            (bus > last_sub_bus) ||
 static int elroy_cfg_read(struct pci_bus *bus, unsigned int devfn, int pos, int size, u32 *data)
 {
        struct lba_device *d = LBA_DEV(parisc_walk_tree(bus->bridge));
-       u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
+       u32 local_bus = (bus->parent == NULL) ? 0 : bus->busn_res.start;
        u32 tok = LBA_CFG_TOK(local_bus, devfn);
        void __iomem *data_reg = d->hba.base_addr + LBA_PCI_CFG_DATA;
 
                return 0;
        }
 
-       if (LBA_SKIP_PROBE(d) && !lba_device_present(bus->secondary, devfn, d)) {
+       if (LBA_SKIP_PROBE(d) && !lba_device_present(bus->busn_res.start, devfn, d)) {
                DBG_CFG("%s(%x+%2x) -> -1 (b)\n", __func__, tok, pos);
                /* either don't want to look or know device isn't present. */
                *data = ~0U;
 static int elroy_cfg_write(struct pci_bus *bus, unsigned int devfn, int pos, int size, u32 data)
 {
        struct lba_device *d = LBA_DEV(parisc_walk_tree(bus->bridge));
-       u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
+       u32 local_bus = (bus->parent == NULL) ? 0 : bus->busn_res.start;
        u32 tok = LBA_CFG_TOK(local_bus,devfn);
 
        if ((pos > 255) || (devfn > 255))
                return 0;
        }
 
-       if (LBA_SKIP_PROBE(d) && (!lba_device_present(bus->secondary, devfn, d))) {
+       if (LBA_SKIP_PROBE(d) && (!lba_device_present(bus->busn_res.start, devfn, d))) {
                DBG_CFG("%s(%x+%2x) = 0x%x (b)\n", __func__, tok, pos,data);
                return 1; /* New Workaround */
        }
 static int mercury_cfg_read(struct pci_bus *bus, unsigned int devfn, int pos, int size, u32 *data)
 {
        struct lba_device *d = LBA_DEV(parisc_walk_tree(bus->bridge));
-       u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
+       u32 local_bus = (bus->parent == NULL) ? 0 : bus->busn_res.start;
        u32 tok = LBA_CFG_TOK(local_bus, devfn);
        void __iomem *data_reg = d->hba.base_addr + LBA_PCI_CFG_DATA;
 
 {
        struct lba_device *d = LBA_DEV(parisc_walk_tree(bus->bridge));
        void __iomem *data_reg = d->hba.base_addr + LBA_PCI_CFG_DATA;
-       u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
+       u32 local_bus = (bus->parent == NULL) ? 0 : bus->busn_res.start;
        u32 tok = LBA_CFG_TOK(local_bus,devfn);
 
        if ((pos > 255) || (devfn > 255))
        struct lba_device *ldev = LBA_DEV(parisc_walk_tree(bus->bridge));
 
        DBG("lba_fixup_bus(0x%p) bus %d platform_data 0x%p\n",
-               bus, bus->secondary, bus->bridge->platform_data);
+               bus, (int)bus->busn_res.start, bus->bridge->platform_data);
 
        /*
        ** Properly Setup MMIO resources for this bus.
                return 0;
        }
 
-       lba_bus->subordinate = pci_scan_child_bus(lba_bus);
+       lba_bus->busn_res.end = pci_scan_child_bus(lba_bus);
 
        /* This is in lieu of calling pci_assign_unassigned_resources() */
        if (is_pdc_pat()) {
                lba_dev->flags |= LBA_FLAG_SKIP_PROBE;
        }
 
-       lba_next_bus = lba_bus->subordinate + 1;
+       lba_next_bus = lba_res->busn_res.end + 1;
        pci_bus_add_devices(lba_bus);
 
        /* Whew! Finally done! Tell services we got this one covered. */
 
                        PCI_PRIMARY_BUS,
                        &buses);
 
-       if (((buses >> 8) & 0xff) != bus->secondary) {
+       if (((buses >> 8) & 0xff) != bus->busn_res.start) {
                buses = (buses & 0xff000000)
                        | ((unsigned int)(bus->primary)     <<  0)
-                       | ((unsigned int)(bus->secondary)   <<  8)
-                       | ((unsigned int)(bus->subordinate) << 16);
+                       | ((unsigned int)(bus->busn_res.start)   <<  8)
+                       | ((unsigned int)(bus->busn_res.end) << 16);
                pci_write_config_dword(bus->self, PCI_PRIMARY_BUS, buses);
        }
        return NOTIFY_OK;
         * bus->subordinate value because it could have
         * padding in it.
         */
-       max = bus->secondary;
+       max = bus->busn_res.start;
 
        list_for_each(tmp, &bus->children) {
                n = pci_bus_max_busnr(pci_bus_b(tmp));
 
                    (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)) {
                        /* Find an unused bus number for the new bridge */
                        struct pci_bus *child;
-                       unsigned char busnr, start = parent->secondary;
-                       unsigned char end = parent->subordinate;
+                       unsigned char busnr, start = parent->busn_res.start;
+                       unsigned char end = parent->busn_res.end;
 
                        for (busnr = start; busnr <= end; busnr++) {
                                if (!pci_find_bus(pci_domain_nr(parent),
                                pci_dev_put(dev);
                                continue;
                        }
-                       child->subordinate = pci_do_scan_bus(child);
+                       child->busn_res.end = pci_do_scan_bus(child);
                        pci_bus_size_bridges(child);
                }
                pci_dev_put(dev);
 
 static int __ref pciehp_add_bridge(struct pci_dev *dev)
 {
        struct pci_bus *parent = dev->bus;
-       int pass, busnr, start = parent->secondary;
-       int end = parent->subordinate;
+       int pass, busnr, start = parent->busn_res.start;
+       int end = parent->busn_res.end;
 
        for (busnr = start; busnr <= end; busnr++) {
                if (!pci_find_bus(pci_domain_nr(parent), busnr))
 
                                (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)) {
                        /* Find an unused bus number for the new bridge */
                        struct pci_bus *child;
-                       unsigned char busnr, start = parent->secondary;
-                       unsigned char end = parent->subordinate;
+                       unsigned char busnr, start = parent->busn_res.start;
+                       unsigned char end = parent->busn_res.end;
                        for (busnr = start; busnr <= end; busnr++) {
                                if (!pci_find_bus(pci_domain_nr(parent),
                                                        busnr))
                                pci_dev_put(dev);
                                continue;
                        }
-                       child->subordinate = pci_do_scan_bus(child);
+                       child->busn_res.end = pci_do_scan_bus(child);
                        pci_bus_size_bridges(child);
                }
                pci_configure_slot(dev);
 
                }
        }
        out += sprintf(out, "Free resources: bus numbers\n");
-       for (busnr = bus->secondary; busnr <= bus->subordinate; busnr++) {
+       for (busnr = bus->busn_res.start; busnr <= bus->busn_res.end; busnr++) {
                if (!pci_find_bus(pci_domain_nr(bus), busnr))
                        break;
        }
-       if (busnr < bus->subordinate)
+       if (busnr < bus->busn_res.end)
                out += sprintf(out, "start = %8.8x, length = %8.8x\n",
-                               busnr, (bus->subordinate - busnr));
+                               busnr, (int)(bus->busn_res.end - busnr));
 
        return out - buf;
 }
 
        if (!child)
                return NULL;
 
-       child->subordinate = busnr;
+       child->busn_res.end = busnr;
        child->dev.parent = bus->bridge;
        rc = pci_bus_add_child(child);
        if (rc) {
        iov->offset = offset;
        iov->stride = stride;
 
-       if (virtfn_bus(dev, nr_virtfn - 1) > dev->bus->subordinate) {
+       if (virtfn_bus(dev, nr_virtfn - 1) > dev->bus->busn_res.end) {
                dev_err(&dev->dev, "SR-IOV: bus number out of range\n");
                return -ENOMEM;
        }
 
        struct list_head *tmp;
        unsigned char max, n;
 
-       max = bus->subordinate;
+       max = bus->busn_res.end;
        list_for_each(tmp, &bus->children) {
                n = pci_bus_max_busnr(pci_bus_b(tmp));
                if(n > max)
 
        if (pci_is_root_bus(child))     /* It's a host bus, nothing to read */
                return;
 
-       dev_info(&dev->dev, "PCI bridge to [bus %02x-%02x]%s\n",
-                child->secondary, child->subordinate,
+       dev_info(&dev->dev, "PCI bridge to %pR%s\n",
+                &child->busn_res,
                 dev->transparent ? " (subtractive decode)" : "");
 
        pci_bus_remove_resources(child);
         * Set up the primary, secondary and subordinate
         * bus numbers.
         */
-       child->number = child->secondary = busnr;
-       child->primary = parent->secondary;
-       child->subordinate = 0xff;
+       child->number = child->busn_res.start = busnr;
+       child->primary = parent->busn_res.start;
+       child->busn_res.end = 0xff;
 
        if (!bridge)
                return child;
        if (!pcibios_assign_all_busses())
                return;
 
-       while (parent->parent && parent->subordinate < max) {
-               parent->subordinate = max;
+       while (parent->parent && parent->busn_res.end < max) {
+               parent->busn_res.end = max;
                pci_write_config_byte(parent->self, PCI_SUBORDINATE_BUS, max);
                parent = parent->parent;
        }
                        if (!child)
                                goto out;
                        child->primary = primary;
-                       child->subordinate = subordinate;
+                       child->busn_res.end = subordinate;
                        child->bridge_ctl = bctl;
                }
 
                cmax = pci_scan_child_bus(child);
                if (cmax > max)
                        max = cmax;
-               if (child->subordinate > max)
-                       max = child->subordinate;
+               if (child->busn_res.end > max)
+                       max = child->busn_res.end;
        } else {
                /*
                 * We need to assign a number to this bus which we always
                }
                buses = (buses & 0xff000000)
                      | ((unsigned int)(child->primary)     <<  0)
-                     | ((unsigned int)(child->secondary)   <<  8)
-                     | ((unsigned int)(child->subordinate) << 16);
+                     | ((unsigned int)(child->busn_res.start)   <<  8)
+                     | ((unsigned int)(child->busn_res.end) << 16);
 
                /*
                 * yenta.c forces a secondary latency timer of 176.
                                        break;
                                while (parent->parent) {
                                        if ((!pcibios_assign_all_busses()) &&
-                                           (parent->subordinate > max) &&
-                                           (parent->subordinate <= max+i)) {
+                                           (parent->busn_res.end > max) &&
+                                           (parent->busn_res.end <= max+i)) {
                                                j = 1;
                                        }
                                        parent = parent->parent;
                /*
                 * Set the subordinate bus number to its real value.
                 */
-               child->subordinate = max;
+               child->busn_res.end = max;
                pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
        }
 
 
        /* Has only triggered on CardBus, fixup is in yenta_socket */
        while (bus->parent) {
-               if ((child->subordinate > bus->subordinate) ||
-                   (child->number > bus->subordinate) ||
+               if ((child->busn_res.end > bus->busn_res.end) ||
+                   (child->number > bus->busn_res.end) ||
                    (child->number < bus->number) ||
-                   (child->subordinate < bus->number)) {
-                       dev_info(&child->dev, "[bus %02x-%02x] %s "
-                               "hidden behind%s bridge %s [bus %02x-%02x]\n",
-                               child->number, child->subordinate,
-                               (bus->number > child->subordinate &&
-                                bus->subordinate < child->number) ?
+                   (child->busn_res.end < bus->number)) {
+                       dev_info(&child->dev, "%pR %s "
+                               "hidden behind%s bridge %s %pR\n",
+                               &child->busn_res,
+                               (bus->number > child->busn_res.end &&
+                                bus->busn_res.end < child->number) ?
                                        "wholly" : "partially",
                                bus->self->transparent ? " transparent" : "",
                                dev_name(&bus->dev),
-                               bus->number, bus->subordinate);
+                               &bus->busn_res);
                }
                bus = bus->parent;
        }
 
 unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus)
 {
-       unsigned int devfn, pass, max = bus->secondary;
+       unsigned int devfn, pass, max = bus->busn_res.start;
        struct pci_dev *dev;
 
        dev_dbg(&bus->dev, "scanning bus\n");
        /* Create legacy_io and legacy_mem files for this bus */
        pci_create_legacy_files(b);
 
-       b->number = b->secondary = bus;
+       b->number = b->busn_res.start = bus;
 
        if (parent)
                dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
        if (!b)
                return NULL;
 
-       b->subordinate = pci_scan_child_bus(b);
+       b->busn_res.end = pci_scan_child_bus(b);
        pci_bus_add_devices(b);
        return b;
 }
        pci_add_resource(&resources, &iomem_resource);
        b = pci_create_root_bus(parent, bus, ops, sysdata, &resources);
        if (b)
-               b->subordinate = pci_scan_child_bus(b);
+               b->busn_res.end = pci_scan_child_bus(b);
        else
                pci_free_resource_list(&resources);
        return b;
        pci_add_resource(&resources, &iomem_resource);
        b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
        if (b) {
-               b->subordinate = pci_scan_child_bus(b);
+               b->busn_res.end = pci_scan_child_bus(b);
                pci_bus_add_devices(b);
        } else {
                pci_free_resource_list(&resources);
 
        struct resource *res;
        struct pci_bus_region region;
 
-       dev_info(&bridge->dev, "CardBus bridge to [bus %02x-%02x]\n",
-                bus->secondary, bus->subordinate);
+       dev_info(&bridge->dev, "CardBus bridge to %pR\n",
+                &bus->busn_res);
 
        res = bus->resource[0];
        pcibios_resource_to_bus(bridge, ®ion, res);
 {
        struct pci_dev *bridge = bus->self;
 
-       dev_info(&bridge->dev, "PCI bridge to [bus %02x-%02x]\n",
-                bus->secondary, bus->subordinate);
+       dev_info(&bridge->dev, "PCI bridge to %pR\n",
+                &bus->busn_res);
 
        if (type & IORESOURCE_IO)
                pci_setup_bridge_io(bus);
        if (!size0 && !size1) {
                if (b_res->start || b_res->end)
                        dev_info(&bus->self->dev, "disabling bridge window "
-                                "%pR to [bus %02x-%02x] (unused)\n", b_res,
-                                bus->secondary, bus->subordinate);
+                                "%pR to %pR (unused)\n", b_res,
+                                &bus->busn_res);
                b_res->flags = 0;
                return;
        }
        if (size1 > size0 && realloc_head) {
                add_to_list(realloc_head, bus->self, b_res, size1-size0, 4096);
                dev_printk(KERN_DEBUG, &bus->self->dev, "bridge window "
-                                "%pR to [bus %02x-%02x] add_size %lx\n", b_res,
-                                bus->secondary, bus->subordinate, size1-size0);
+                                "%pR to %pR add_size %lx\n", b_res,
+                                &bus->busn_res, size1-size0);
        }
 }
 
        if (!size0 && !size1) {
                if (b_res->start || b_res->end)
                        dev_info(&bus->self->dev, "disabling bridge window "
-                                "%pR to [bus %02x-%02x] (unused)\n", b_res,
-                                bus->secondary, bus->subordinate);
+                                "%pR to %pR (unused)\n", b_res,
+                                &bus->busn_res);
                b_res->flags = 0;
                return 1;
        }
        if (size1 > size0 && realloc_head) {
                add_to_list(realloc_head, bus->self, b_res, size1-size0, min_align);
                dev_printk(KERN_DEBUG, &bus->self->dev, "bridge window "
-                                "%pR to [bus %02x-%02x] add_size %llx\n", b_res,
-                                bus->secondary, bus->subordinate, (unsigned long long)size1-size0);
+                                "%pR to %pR add_size %llx\n", b_res,
+                                &bus->busn_res, (unsigned long long)size1-size0);
        }
        return 1;
 }
 
        s->functions = pci_scan_slot(bus, PCI_DEVFN(0, 0));
        pci_fixup_cardbus(bus);
 
-       max = bus->secondary;
+       max = bus->busn_res.start;
        for (pass = 0; pass < 2; pass++)
                list_for_each_entry(dev, &bus->devices, bus_list)
                        if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
 
        config_writeb(socket, PCI_LATENCY_TIMER, 168);
        config_writel(socket, PCI_PRIMARY_BUS,
                (176 << 24) |                      /* sec. latency timer */
-               (dev->subordinate->subordinate << 16) | /* subordinate bus */
-               (dev->subordinate->secondary << 8) |  /* secondary bus */
+               ((unsigned int)dev->subordinate->busn_res.end << 16) | /* subordinate bus */
+               ((unsigned int)dev->subordinate->busn_res.start << 8) |  /* secondary bus */
                dev->subordinate->primary);                /* primary bus */
 
        /*
        struct pci_bus *bridge_to_fix = cardbus_bridge->parent;
 
        /* Check bus numbers are already set up correctly: */
-       if (bridge_to_fix->subordinate >= cardbus_bridge->subordinate)
+       if (bridge_to_fix->busn_res.end >= cardbus_bridge->busn_res.end)
                return; /* The subordinate number is ok, nothing to do */
 
        if (!bridge_to_fix->parent)
                return; /* Root bridges are ok */
 
        /* stay within the limits of the bus range of the parent: */
-       upper_limit = bridge_to_fix->parent->subordinate;
+       upper_limit = bridge_to_fix->parent->busn_res.end;
 
        /* check the bus ranges of all silbling bridges to prevent overlap */
        list_for_each(tmp, &bridge_to_fix->parent->children) {
                 * current upper limit, set the new upper limit to
                 * the bus number below the silbling's range:
                 */
-               if (silbling->secondary > bridge_to_fix->subordinate
-                   && silbling->secondary <= upper_limit)
-                       upper_limit = silbling->secondary - 1;
+               if (silbling->busn_res.start > bridge_to_fix->busn_res.end
+                   && silbling->busn_res.start <= upper_limit)
+                       upper_limit = silbling->busn_res.start - 1;
        }
 
        /* Show that the wanted subordinate number is not possible: */
-       if (cardbus_bridge->subordinate > upper_limit)
+       if (cardbus_bridge->busn_res.end > upper_limit)
                dev_printk(KERN_WARNING, &cardbus_bridge->dev,
                           "Upper limit for fixing this "
                           "bridge's parent bridge: #%02x\n", upper_limit);
 
        /* If we have room to increase the bridge's subordinate number, */
-       if (bridge_to_fix->subordinate < upper_limit) {
+       if (bridge_to_fix->busn_res.end < upper_limit) {
 
                /* use the highest number of the hidden bus, within limits */
                unsigned char subordinate_to_assign =
-                       min(cardbus_bridge->subordinate, upper_limit);
+                       min_t(int, cardbus_bridge->busn_res.end, upper_limit);
 
                dev_printk(KERN_INFO, &bridge_to_fix->dev,
                           "Raising subordinate bus# of parent "
                           "bus (#%02x) from #%02x to #%02x\n",
                           bridge_to_fix->number,
-                          bridge_to_fix->subordinate, subordinate_to_assign);
+                          (int)bridge_to_fix->busn_res.end, subordinate_to_assign);
 
                /* Save the new subordinate in the bus struct of the bridge */
-               bridge_to_fix->subordinate = subordinate_to_assign;
+               bridge_to_fix->busn_res.end = subordinate_to_assign;
 
                /* and update the PCI config space with the new subordinate */
                pci_write_config_byte(bridge_to_fix->self,
-                       PCI_SUBORDINATE_BUS, bridge_to_fix->subordinate);
+                       PCI_SUBORDINATE_BUS, bridge_to_fix->busn_res.end);
        }
 }