forked from Minki/linux
[S390] Fix range for add_active_range() in setup_memory()
add_active_range() expects start_pfn + size as end_pfn value, i.e. not the pfn of the last page frame but the one behind that. We used the pfn of the last page frame so far, which can lead to a BUG_ON in move_freepages(), when the kernelcore parameter is specified (page_zone(start_page) != page_zone(end_page)). Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
58e20d8d34
commit
fb2e7c5e33
@ -604,13 +604,13 @@ setup_memory(void)
|
|||||||
if (memory_chunk[i].type != CHUNK_READ_WRITE)
|
if (memory_chunk[i].type != CHUNK_READ_WRITE)
|
||||||
continue;
|
continue;
|
||||||
start_chunk = PFN_DOWN(memory_chunk[i].addr);
|
start_chunk = PFN_DOWN(memory_chunk[i].addr);
|
||||||
end_chunk = start_chunk + PFN_DOWN(memory_chunk[i].size) - 1;
|
end_chunk = start_chunk + PFN_DOWN(memory_chunk[i].size);
|
||||||
end_chunk = min(end_chunk, end_pfn);
|
end_chunk = min(end_chunk, end_pfn);
|
||||||
if (start_chunk >= end_chunk)
|
if (start_chunk >= end_chunk)
|
||||||
continue;
|
continue;
|
||||||
add_active_range(0, start_chunk, end_chunk);
|
add_active_range(0, start_chunk, end_chunk);
|
||||||
pfn = max(start_chunk, start_pfn);
|
pfn = max(start_chunk, start_pfn);
|
||||||
for (; pfn <= end_chunk; pfn++)
|
for (; pfn < end_chunk; pfn++)
|
||||||
page_set_storage_key(PFN_PHYS(pfn), PAGE_DEFAULT_KEY);
|
page_set_storage_key(PFN_PHYS(pfn), PAGE_DEFAULT_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user