diff options
author | Anton Blanchard <anton@samba.org> | 2006-06-10 06:53:06 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-06-15 05:31:26 -0400 |
commit | 357518fa34d9dceda42bfc09642356a58370050d (patch) | |
tree | c75689198fa2667a3d73d89ff125d910061b4fcf /include | |
parent | f2b09c8189bc7b64a42753e98f7006b11bae1bdc (diff) |
[POWERPC] pcibus_to_node fixes
of_node_to_nid returns -1 if the associativity cannot be found. This
means pcibus_to_cpumask has to be careful not to pass a negative index into
node_to_cpumask.
Since pcibus_to_node could be used a lot, and of_node_to_nid is slow (it
walks a list doing strcmps), lets also cache the node in the
pci_controller struct.
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-powerpc/pci-bridge.h | 8 | ||||
-rw-r--r-- | include/asm-powerpc/topology.h | 14 |
2 files changed, 15 insertions, 7 deletions
diff --git a/include/asm-powerpc/pci-bridge.h b/include/asm-powerpc/pci-bridge.h index 84a3075db524..4f55573762bb 100644 --- a/include/asm-powerpc/pci-bridge.h +++ b/include/asm-powerpc/pci-bridge.h | |||
@@ -6,6 +6,7 @@ | |||
6 | #include <asm-ppc/pci-bridge.h> | 6 | #include <asm-ppc/pci-bridge.h> |
7 | #else | 7 | #else |
8 | 8 | ||
9 | #include <linux/config.h> | ||
9 | #include <linux/pci.h> | 10 | #include <linux/pci.h> |
10 | #include <linux/list.h> | 11 | #include <linux/list.h> |
11 | 12 | ||
@@ -22,6 +23,7 @@ | |||
22 | struct pci_controller { | 23 | struct pci_controller { |
23 | struct pci_bus *bus; | 24 | struct pci_bus *bus; |
24 | char is_dynamic; | 25 | char is_dynamic; |
26 | int node; | ||
25 | void *arch_data; | 27 | void *arch_data; |
26 | struct list_head list_node; | 28 | struct list_head list_node; |
27 | 29 | ||
@@ -165,6 +167,12 @@ static inline unsigned long pci_address_to_pio(phys_addr_t address) | |||
165 | #define PCI_PROBE_NORMAL 0 /* Do normal PCI probing */ | 167 | #define PCI_PROBE_NORMAL 0 /* Do normal PCI probing */ |
166 | #define PCI_PROBE_DEVTREE 1 /* Instantiate from device tree */ | 168 | #define PCI_PROBE_DEVTREE 1 /* Instantiate from device tree */ |
167 | 169 | ||
170 | #ifdef CONFIG_NUMA | ||
171 | #define PHB_SET_NODE(PHB, NODE) ((PHB)->node = (NODE)) | ||
172 | #else | ||
173 | #define PHB_SET_NODE(PHB, NODE) ((PHB)->node = -1) | ||
174 | #endif | ||
175 | |||
168 | #endif /* CONFIG_PPC64 */ | 176 | #endif /* CONFIG_PPC64 */ |
169 | #endif /* __KERNEL__ */ | 177 | #endif /* __KERNEL__ */ |
170 | #endif | 178 | #endif |
diff --git a/include/asm-powerpc/topology.h b/include/asm-powerpc/topology.h index b7abd423c570..f4c759b5f6cc 100644 --- a/include/asm-powerpc/topology.h +++ b/include/asm-powerpc/topology.h | |||
@@ -32,13 +32,13 @@ static inline int node_to_first_cpu(int node) | |||
32 | 32 | ||
33 | int of_node_to_nid(struct device_node *device); | 33 | int of_node_to_nid(struct device_node *device); |
34 | 34 | ||
35 | #ifdef CONFIG_PPC64 | 35 | struct pci_bus; |
36 | #define pcibus_to_node(bus) (of_node_to_nid(bus->sysdata)) | 36 | extern int pcibus_to_node(struct pci_bus *bus); |
37 | #define pcibus_to_cpumask(bus) (node_to_cpumask(of_node_to_nid(bus->sysdata))) | 37 | |
38 | #else | 38 | #define pcibus_to_cpumask(bus) (pcibus_to_node(bus) == -1 ? \ |
39 | #define pcibus_to_node(node) (-1) | 39 | CPU_MASK_ALL : \ |
40 | #define pcibus_to_cpumask(bus) (cpu_online_map) | 40 | node_to_cpumask(pcibus_to_node(bus)) \ |
41 | #endif | 41 | ) |
42 | 42 | ||
43 | /* sched_domains SD_NODE_INIT for PPC64 machines */ | 43 | /* sched_domains SD_NODE_INIT for PPC64 machines */ |
44 | #define SD_NODE_INIT (struct sched_domain) { \ | 44 | #define SD_NODE_INIT (struct sched_domain) { \ |