[PATCH] arm64: move back to generic memblock_enforce_memory_limit()
Ard Biesheuvel
ard.biesheuvel at linaro.org
Tue Feb 2 02:28:41 PST 2016
On 2 February 2016 at 11:19, Catalin Marinas <catalin.marinas at arm.com> wrote:
> On Mon, Feb 01, 2016 at 07:30:17PM +0100, Ard Biesheuvel wrote:
>> void __init arm64_memblock_init(void)
>> {
>> const s64 linear_region_size = -(s64)PAGE_OFFSET;
>> @@ -215,24 +180,14 @@ void __init arm64_memblock_init(void)
>> if (memblock_end_of_DRAM() > linear_region_size)
>> memblock_remove(0, memblock_end_of_DRAM() - linear_region_size);
>>
>> + /*
>> + * Apply the memory limit if it was set. Since the kernel may be loaded
>> + * high up in memory, add back the kernel region that must be accessible
>> + * via the linear mapping.
>> + */
>> if (memory_limit != (phys_addr_t)ULLONG_MAX) {
>> - u64 kbase = round_down(__pa(_text), MIN_KIMG_ALIGN);
>> - u64 kend = PAGE_ALIGN(__pa(_end));
>> - u64 const sz_4g = 0x100000000UL;
>> -
>> - /*
>> - * Clip memory in order of preference:
>> - * - above the kernel and above 4 GB
>> - * - between 4 GB and the start of the kernel (if the kernel
>> - * is loaded high in memory)
>> - * - between the kernel and 4 GB (if the kernel is loaded
>> - * low in memory)
>> - * - below 4 GB
>> - */
>> - clip_mem_range(max(sz_4g, kend), ULLONG_MAX);
>> - clip_mem_range(sz_4g, kbase);
>> - clip_mem_range(kend, sz_4g);
>> - clip_mem_range(0, min(kbase, sz_4g));
>> + memblock_enforce_memory_limit(memory_limit);
>> + memblock_add(__pa(__init_begin), (u64)(_end - __init_begin));
>
> Thanks, it looks much simpler now. However, loading the kernel 1GB
> higher with mem=1G fails somewhere during the KVM hyp initialisation. It
> works if I change the last line below to:
>
> memblock_add(__pa(_text), (u64)(_end - _text));
>
OK, that should work as well.
I suppose the fact that mem= loses some of its accuracy is not an
issue? If you need it to be exact, you should simply not load your
kernel outside your mem= range ...
> I can fold the change in.
>
OK
More information about the linux-arm-kernel
mailing list