diff options
-rw-r--r-- | arch/x86/pci/amd_bus.c | 8 | ||||
-rw-r--r-- | arch/x86/pci/bus_numa.c | 4 | ||||
-rw-r--r-- | include/linux/range.h | 8 |
3 files changed, 17 insertions, 3 deletions
diff --git a/arch/x86/pci/amd_bus.c b/arch/x86/pci/amd_bus.c index f06bb1b4a80a..f7e13b63154e 100644 --- a/arch/x86/pci/amd_bus.c +++ b/arch/x86/pci/amd_bus.c | |||
@@ -201,7 +201,7 @@ static int __init early_fill_mp_bus_info(void) | |||
201 | 201 | ||
202 | memset(range, 0, sizeof(range)); | 202 | memset(range, 0, sizeof(range)); |
203 | /* 0xfd00000000-0xffffffffff for HT */ | 203 | /* 0xfd00000000-0xffffffffff for HT */ |
204 | range[0].end = (0xfdULL<<32) - 1; | 204 | range[0].end = cap_resource((0xfdULL<<32) - 1); |
205 | 205 | ||
206 | /* need to take out [0, TOM) for RAM*/ | 206 | /* need to take out [0, TOM) for RAM*/ |
207 | address = MSR_K8_TOP_MEM1; | 207 | address = MSR_K8_TOP_MEM1; |
@@ -286,7 +286,8 @@ static int __init early_fill_mp_bus_info(void) | |||
286 | } | 286 | } |
287 | } | 287 | } |
288 | 288 | ||
289 | update_res(info, start, end, IORESOURCE_MEM, 1); | 289 | update_res(info, cap_resource(start), cap_resource(end), |
290 | IORESOURCE_MEM, 1); | ||
290 | subtract_range(range, RANGE_NUM, start, end); | 291 | subtract_range(range, RANGE_NUM, start, end); |
291 | printk(KERN_CONT "\n"); | 292 | printk(KERN_CONT "\n"); |
292 | } | 293 | } |
@@ -321,7 +322,8 @@ static int __init early_fill_mp_bus_info(void) | |||
321 | if (!range[i].end) | 322 | if (!range[i].end) |
322 | continue; | 323 | continue; |
323 | 324 | ||
324 | update_res(info, range[i].start, range[i].end, | 325 | update_res(info, cap_resource(range[i].start), |
326 | cap_resource(range[i].end), | ||
325 | IORESOURCE_MEM, 1); | 327 | IORESOURCE_MEM, 1); |
326 | } | 328 | } |
327 | } | 329 | } |
diff --git a/arch/x86/pci/bus_numa.c b/arch/x86/pci/bus_numa.c index 3411687b676e..3510778aa8bb 100644 --- a/arch/x86/pci/bus_numa.c +++ b/arch/x86/pci/bus_numa.c | |||
@@ -1,5 +1,6 @@ | |||
1 | #include <linux/init.h> | 1 | #include <linux/init.h> |
2 | #include <linux/pci.h> | 2 | #include <linux/pci.h> |
3 | #include <linux/range.h> | ||
3 | 4 | ||
4 | #include "bus_numa.h" | 5 | #include "bus_numa.h" |
5 | 6 | ||
@@ -55,6 +56,9 @@ void __devinit update_res(struct pci_root_info *info, resource_size_t start, | |||
55 | if (start > end) | 56 | if (start > end) |
56 | return; | 57 | return; |
57 | 58 | ||
59 | if (start == MAX_RESOURCE) | ||
60 | return; | ||
61 | |||
58 | if (!merge) | 62 | if (!merge) |
59 | goto addit; | 63 | goto addit; |
60 | 64 | ||
diff --git a/include/linux/range.h b/include/linux/range.h index 0789f1412e1f..bd184a5db791 100644 --- a/include/linux/range.h +++ b/include/linux/range.h | |||
@@ -19,4 +19,12 @@ int clean_sort_range(struct range *range, int az); | |||
19 | 19 | ||
20 | void sort_range(struct range *range, int nr_range); | 20 | void sort_range(struct range *range, int nr_range); |
21 | 21 | ||
22 | #define MAX_RESOURCE ((resource_size_t)~0) | ||
23 | static inline resource_size_t cap_resource(u64 val) | ||
24 | { | ||
25 | if (val > MAX_RESOURCE) | ||
26 | return MAX_RESOURCE; | ||
27 | |||
28 | return val; | ||
29 | } | ||
22 | #endif | 30 | #endif |