Merge branch 'linus' into x86/urgent
Merge reason: We want to queue up a dependent patch. Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -1136,7 +1136,7 @@ void __cpuinit cpu_init(void)
|
||||
wrmsrl(MSR_KERNEL_GS_BASE, 0);
|
||||
barrier();
|
||||
|
||||
check_efer();
|
||||
x86_configure_nx();
|
||||
if (cpu != 0)
|
||||
enable_x2apic();
|
||||
|
||||
|
@@ -263,8 +263,12 @@ static void __cpuinit srat_detect_node(struct cpuinfo_x86 *c)
|
||||
/* Don't do the funky fallback heuristics the AMD version employs
|
||||
for now. */
|
||||
node = apicid_to_node[apicid];
|
||||
if (node == NUMA_NO_NODE || !node_online(node))
|
||||
if (node == NUMA_NO_NODE)
|
||||
node = first_node(node_online_map);
|
||||
else if (!node_online(node)) {
|
||||
/* reuse the value from init_cpu_to_node() */
|
||||
node = cpu_to_node(cpu);
|
||||
}
|
||||
numa_set_node(cpu, node);
|
||||
|
||||
printk(KERN_INFO "CPU %d/0x%x -> Node %d\n", cpu, apicid, node);
|
||||
|
@@ -170,6 +170,41 @@ static int __init cmp_range(const void *x1, const void *x2)
|
||||
return start1 - start2;
|
||||
}
|
||||
|
||||
static int __init clean_sort_range(struct res_range *range, int az)
|
||||
{
|
||||
int i, j, k = az - 1, nr_range = 0;
|
||||
|
||||
for (i = 0; i < k; i++) {
|
||||
if (range[i].end)
|
||||
continue;
|
||||
for (j = k; j > i; j--) {
|
||||
if (range[j].end) {
|
||||
k = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (j == i)
|
||||
break;
|
||||
range[i].start = range[k].start;
|
||||
range[i].end = range[k].end;
|
||||
range[k].start = 0;
|
||||
range[k].end = 0;
|
||||
k--;
|
||||
}
|
||||
/* count it */
|
||||
for (i = 0; i < az; i++) {
|
||||
if (!range[i].end) {
|
||||
nr_range = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* sort them */
|
||||
sort(range, nr_range, sizeof(struct res_range), cmp_range, NULL);
|
||||
|
||||
return nr_range;
|
||||
}
|
||||
|
||||
#define BIOS_BUG_MSG KERN_WARNING \
|
||||
"WARNING: BIOS bug: VAR MTRR %d contains strange UC entry under 1M, check with your system vendor!\n"
|
||||
|
||||
@@ -223,22 +258,18 @@ x86_get_mtrr_mem_range(struct res_range *range, int nr_range,
|
||||
subtract_range(range, extra_remove_base,
|
||||
extra_remove_base + extra_remove_size - 1);
|
||||
|
||||
/* get new range num */
|
||||
nr_range = 0;
|
||||
for (i = 0; i < RANGE_NUM; i++) {
|
||||
if (!range[i].end)
|
||||
continue;
|
||||
nr_range++;
|
||||
}
|
||||
if (debug_print) {
|
||||
printk(KERN_DEBUG "After UC checking\n");
|
||||
for (i = 0; i < nr_range; i++)
|
||||
for (i = 0; i < RANGE_NUM; i++) {
|
||||
if (!range[i].end)
|
||||
continue;
|
||||
printk(KERN_DEBUG "MTRR MAP PFN: %016lx - %016lx\n",
|
||||
range[i].start, range[i].end + 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* sort the ranges */
|
||||
sort(range, nr_range, sizeof(struct res_range), cmp_range, NULL);
|
||||
nr_range = clean_sort_range(range, RANGE_NUM);
|
||||
if (debug_print) {
|
||||
printk(KERN_DEBUG "After sorting\n");
|
||||
for (i = 0; i < nr_range; i++)
|
||||
@@ -689,8 +720,6 @@ static int __init mtrr_need_cleanup(void)
|
||||
continue;
|
||||
if (!size)
|
||||
type = MTRR_NUM_TYPES;
|
||||
if (type == MTRR_TYPE_WRPROT)
|
||||
type = MTRR_TYPE_UNCACHABLE;
|
||||
num[type]++;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user