diff options
-rw-r--r-- | arch/x86/kernel/pci-calgary_64.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index 299d49302e7d..0497f719977d 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c | |||
@@ -1207,23 +1207,31 @@ error: | |||
1207 | return ret; | 1207 | return ret; |
1208 | } | 1208 | } |
1209 | 1209 | ||
1210 | static inline int __init determine_tce_table_size(u64 ram) | 1210 | static inline int __init determine_tce_table_size(void) |
1211 | { | 1211 | { |
1212 | int ret; | 1212 | int ret; |
1213 | 1213 | ||
1214 | if (specified_table_size != TCE_TABLE_SIZE_UNSPECIFIED) | 1214 | if (specified_table_size != TCE_TABLE_SIZE_UNSPECIFIED) |
1215 | return specified_table_size; | 1215 | return specified_table_size; |
1216 | 1216 | ||
1217 | /* | 1217 | if (is_kdump_kernel() && saved_max_pfn) { |
1218 | * Table sizes are from 0 to 7 (TCE_TABLE_SIZE_64K to | 1218 | /* |
1219 | * TCE_TABLE_SIZE_8M). Table size 0 has 8K entries and each | 1219 | * Table sizes are from 0 to 7 (TCE_TABLE_SIZE_64K to |
1220 | * larger table size has twice as many entries, so shift the | 1220 | * TCE_TABLE_SIZE_8M). Table size 0 has 8K entries and each |
1221 | * max ram address by 13 to divide by 8K and then look at the | 1221 | * larger table size has twice as many entries, so shift the |
1222 | * order of the result to choose between 0-7. | 1222 | * max ram address by 13 to divide by 8K and then look at the |
1223 | */ | 1223 | * order of the result to choose between 0-7. |
1224 | ret = get_order(ram >> 13); | 1224 | */ |
1225 | if (ret > TCE_TABLE_SIZE_8M) | 1225 | ret = get_order((saved_max_pfn * PAGE_SIZE) >> 13); |
1226 | if (ret > TCE_TABLE_SIZE_8M) | ||
1227 | ret = TCE_TABLE_SIZE_8M; | ||
1228 | } else { | ||
1229 | /* | ||
1230 | * Use 8M by default (suggested by Muli) if it's not | ||
1231 | * kdump kernel and saved_max_pfn isn't set. | ||
1232 | */ | ||
1226 | ret = TCE_TABLE_SIZE_8M; | 1233 | ret = TCE_TABLE_SIZE_8M; |
1234 | } | ||
1227 | 1235 | ||
1228 | return ret; | 1236 | return ret; |
1229 | } | 1237 | } |
@@ -1418,8 +1426,7 @@ int __init detect_calgary(void) | |||
1418 | return -ENOMEM; | 1426 | return -ENOMEM; |
1419 | } | 1427 | } |
1420 | 1428 | ||
1421 | specified_table_size = determine_tce_table_size((is_kdump_kernel() ? | 1429 | specified_table_size = determine_tce_table_size(); |
1422 | saved_max_pfn : max_pfn) * PAGE_SIZE); | ||
1423 | 1430 | ||
1424 | for (bus = 0; bus < MAX_PHB_BUS_NUM; bus++) { | 1431 | for (bus = 0; bus < MAX_PHB_BUS_NUM; bus++) { |
1425 | struct calgary_bus_info *info = &bus_info[bus]; | 1432 | struct calgary_bus_info *info = &bus_info[bus]; |