2fe2abf896
Previously we used a table of size PCI_BUS_NUM_RESOURCES (16) for resources forwarded to a bus by its upstream bridge. We've increased this size several times when the table overflowed. But there's no good limit on the number of resources because host bridges and subtractive decode bridges can forward any number of ranges to their secondary buses. This patch reduces the table to only PCI_BRIDGE_RESOURCE_NUM (4) entries, which corresponds to the number of windows a PCI-to-PCI (3) or CardBus (4) bridge can positively decode. Any additional resources, e.g., PCI host bridge windows or subtractively-decoded regions, are kept in a list. I'd prefer a single list rather than this split table/list approach, but that requires simultaneous changes to every architecture. This approach only requires immediate changes where we set up (a) host bridges with more than four windows and (b) subtractive-decode P2P bridges, and we can incrementally change other architectures to use the list. Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
27 lines
625 B
C
27 lines
625 B
C
#ifdef CONFIG_X86_64
|
|
|
|
/*
|
|
* sub bus (transparent) will use entres from 3 to store extra from
|
|
* root, so need to make sure we have enough slot there.
|
|
*/
|
|
#define RES_NUM 16
|
|
struct pci_root_info {
|
|
char name[12];
|
|
unsigned int res_num;
|
|
struct resource res[RES_NUM];
|
|
int bus_min;
|
|
int bus_max;
|
|
int node;
|
|
int link;
|
|
};
|
|
|
|
/* 4 at this time, it may become to 32 */
|
|
#define PCI_ROOT_NR 4
|
|
extern int pci_root_num;
|
|
extern struct pci_root_info pci_root_info[PCI_ROOT_NR];
|
|
extern int found_all_numa_early;
|
|
|
|
extern void update_res(struct pci_root_info *info, size_t start,
|
|
size_t end, unsigned long flags, int merge);
|
|
#endif
|