Re: [PATCH] kexec: Export memory sections virtual addresses to vmcoreinfo

From: Baoquan He
Date: Thu Oct 13 2016 - 04:54:56 EST


Hi Pratyush,

On 10/12/16 at 02:39pm, Pratyush Anand wrote:
>
>
> On Wednesday 12 October 2016 05:56 AM, Baoquan He wrote:
> > > PAGE_OFFSET can be get via vaddr - paddr from elf pt_loads so only
> > > > VMALLOC_BASE and VMEMMAP_BASE is necessary..
> > Well, yes, I was wrong. I wrongly thought of kernel text virtual address
> > when I wrote the reply
>
> So, if you can get PAGE_OFFSET then, probably you do not need to know
> anything else.
>
> I think, we can simplify makedumpfile code, where we do not need to depend
> on VMALLOC_START or VMEMMAP_START etc.
>
> "If we know PAGE_OFFSET, we can read from swapper space. If we can read from
> swapper space, then we can know PA of any kernel VA, whether it is VMALLOC,
> or vmemmap or module or kernel text area."

Check makedumpfile code and re-think about this, it's really like you
said, we can convert VA to PA by swapper_pg_dir or init_level4_pgt. But the
reason why we have to involve VMALLOC_START and VMEMMAP_START is that in
x86_64 direct mapping and kernel text mapping are all linear mapping.
Linear mapping can let us do a very efficient translation from VA to
PA. Especially for page filtering, we need get PA of mm related data.
All of them need convert by swapper_pg_dir or init_level4_pgt, that's
inefficient, imagine the current system usually own many Tera bytes of
physical memory.

So here though we can pick up crash memory regions from elf program
header of vmcore and calculate the PAGE_OFFSET, we still need
VMALLOC_START and VMEMMAP_START.

Thanks
Baoquan
>
>
> In fact, I have cleanup patches for ARM64 [1], which take above approach and
> get rid of need of VMALLOC_START or VMEMMAP_START etc. I will be sending
> them upstream soon.
>
> Probably, x86 can take the similar approach.
>
> ~Pratyush
>
> [1] https://github.com/pratyushanand/makedumpfile/blob/arm64_devel/arch/arm64.c#L228
>