linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: James Morse <james.morse@arm.com>
To: Pavel Tatashin <pasha.tatashin@soleen.com>
Cc: jmorris@namei.org, sashal@kernel.org, ebiederm@xmission.com,
	kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
	corbet@lwn.net, catalin.marinas@arm.com, will@kernel.org,
	linux-arm-kernel@lists.infradead.org, marc.zyngier@arm.com,
	vladimir.murzin@arm.com, matthias.bgg@gmail.com,
	bhsharma@redhat.com, linux-mm@kvack.org, mark.rutland@arm.com
Subject: Re: [PATCH v6 14/17] arm64: kexec: move relocation function setup and clean up
Date: Fri, 11 Oct 2019 19:19:12 +0100	[thread overview]
Message-ID: <f1c50a5f-103e-e6d7-e93d-e873a169833e@arm.com> (raw)
In-Reply-To: <20191004185234.31471-15-pasha.tatashin@soleen.com>

Hi Pavel,

On 04/10/2019 19:52, Pavel Tatashin wrote:
> Currently, kernel relocation function is configured in machine_kexec()
> at the time of kexec reboot by using control_code_page.
> 
> This operation, however, is more logical to be done during kexec_load,
> and thus remove from reboot time. Move, setup of this function to
> newly added machine_kexec_post_load().
> 
> In addition, do some cleanup: add infor about reloction function to

infor ? reloction?


> kexec_image_info(), and remove extra messages from machine_kexec().


> Make dtb_mem, always available, if CONFIG_KEXEC_FILE is not configured
> dtb_mem is set to zero anyway.

This is unrelated cleanup, please do it as an earlier patch to make it clearer what you
are changing here.

(I'm not convinced you need to cache va<->pa)


> diff --git a/arch/arm64/include/asm/kexec.h b/arch/arm64/include/asm/kexec.h
> index 12a561a54128..d15ca1ca1e83 100644
> --- a/arch/arm64/include/asm/kexec.h
> +++ b/arch/arm64/include/asm/kexec.h
> @@ -90,14 +90,15 @@ static inline void crash_prepare_suspend(void) {}
>  static inline void crash_post_resume(void) {}
>  #endif
>  
> -#ifdef CONFIG_KEXEC_FILE
>  #define ARCH_HAS_KIMAGE_ARCH
>  
>  struct kimage_arch {
>  	void *dtb;
>  	unsigned long dtb_mem;

> +	unsigned long kern_reloc;

This is cache-ing the physical address of an all-architectures value from struct kimage,
in the arch specific part of struct kiamge. Why?

(You must have the struct kimage on hand to access this thing at all!)

If its supposed to be a physical address, please use phys_addr_t.

>  };


> diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machine_kexec.c
> index 0df8493624e0..9b41da50e6f7 100644
> --- a/arch/arm64/kernel/machine_kexec.c
> +++ b/arch/arm64/kernel/machine_kexec.c
> @@ -42,6 +42,7 @@ static void _kexec_image_info(const char *func, int line,
>  	pr_debug("    start:       %lx\n", kimage->start);
>  	pr_debug("    head:        %lx\n", kimage->head);
>  	pr_debug("    nr_segments: %lu\n", kimage->nr_segments);
> +	pr_debug("    kern_reloc: %pa\n", &kimage->arch.kern_reloc);
>  
>  	for (i = 0; i < kimage->nr_segments; i++) {
>  		pr_debug("      segment[%lu]: %016lx - %016lx, 0x%lx bytes, %lu pages\n",
> @@ -58,6 +59,19 @@ void machine_kexec_cleanup(struct kimage *kimage)
>  	/* Empty routine needed to avoid build errors. */
>  }
>  
> +int machine_kexec_post_load(struct kimage *kimage)
> +{
> +	unsigned long kern_reloc;
> +
> +	kern_reloc = page_to_phys(kimage->control_code_page);

kern_reloc should be phys_addr_t.


> +	memcpy(__va(kern_reloc), arm64_relocate_new_kernel,
> +	       arm64_relocate_new_kernel_size);
> +	kimage->arch.kern_reloc = kern_reloc;


Please move the cache maintenance in here too. This will save us doing it late during
kdump. This will also group the mmu-on changes together.


> +}


Thanks,

James


  reply	other threads:[~2019-10-11 18:19 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-04 18:52 [PATCH v6 00/17] arm64: MMU enabled kexec relocation Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 01/17] kexec: quiet down kexec reboot Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 02/17] arm64: hibernate: pass the allocated pgdp to ttbr0 Pavel Tatashin
2019-10-11 18:17   ` James Morse
2019-10-14 14:11     ` Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 03/17] arm64: hibernate: check pgd table allocation Pavel Tatashin
2019-10-11 18:17   ` James Morse
2019-10-14 14:51     ` Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 04/17] arm64: hibernate: use get_safe_page directly Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 05/17] arm64: hibernate: remove gotos as they are not needed Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 06/17] arm64: hibernate: rename dst to page in create_safe_exec_page Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 07/17] arm64: hibernate: add PUD_SECT_RDONLY Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 08/17] arm64: hibernate: add trans_pgd public functions Pavel Tatashin
2019-10-11 18:18   ` James Morse
2019-10-14 15:34     ` Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 09/17] arm64: hibernate: move page handling function to new trans_pgd.c Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 10/17] arm64: trans_pgd: make trans_pgd_map_page generic Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 11/17] arm64: trans_pgd: pass allocator trans_pgd_create_copy Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 12/17] arm64: trans_pgd: pass NULL instead of init_mm to *_populate functions Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 13/17] kexec: add machine_kexec_post_load() Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 14/17] arm64: kexec: move relocation function setup and clean up Pavel Tatashin
2019-10-11 18:19   ` James Morse [this message]
2019-10-14 19:29     ` Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 15/17] arm64: kexec: add expandable argument to relocation function Pavel Tatashin
2019-10-11 18:19   ` James Morse
2019-10-14 23:35     ` Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 16/17] arm64: kexec: configure trans_pgd page table for kexec Pavel Tatashin
2019-10-11 18:21   ` James Morse
2019-10-15  2:12     ` Pavel Tatashin
2019-10-04 18:52 ` [PATCH v6 17/17] arm64: kexec: enable MMU during kexec relocation Pavel Tatashin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f1c50a5f-103e-e6d7-e93d-e873a169833e@arm.com \
    --to=james.morse@arm.com \
    --cc=bhsharma@redhat.com \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=ebiederm@xmission.com \
    --cc=jmorris@namei.org \
    --cc=kexec@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=matthias.bgg@gmail.com \
    --cc=pasha.tatashin@soleen.com \
    --cc=sashal@kernel.org \
    --cc=vladimir.murzin@arm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox