Kexec Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Geoff Levand <geoff@infradead.org>
To: Vivek Goyal <vgoyal@redhat.com>
Cc: marc.zyngier@arm.com, Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	linux-arm-kernel@lists.infradead.org, kexec@lists.infradead.org,
	christoffer.dall@linaro.org
Subject: Re: [PATCH 6/7] arm64/kexec: Add core kexec support
Date: Thu, 25 Sep 2014 12:02:51 -0700	[thread overview]
Message-ID: <1411671771.6001.208.camel@smoke> (raw)
In-Reply-To: <20140925182810.GB6303@redhat.com>

Hi Vivek,

On Thu, 2014-09-25 at 14:28 -0400, Vivek Goyal wrote:
> On Thu, Sep 25, 2014 at 12:23:27AM +0000, Geoff Levand wrote:
> [..]
> > +void machine_kexec(struct kimage *image)
> > +{
> > +	phys_addr_t reboot_code_buffer_phys;
> > +	void *reboot_code_buffer;
> > +
> > +	BUG_ON(num_online_cpus() > 1);
> > +
> > +	kexec_kimage_head = image->head;
> > +
> > +	reboot_code_buffer_phys = page_to_phys(image->control_code_page);
> > +	reboot_code_buffer = phys_to_virt(reboot_code_buffer_phys);
> > +
> > +	/*
> > +	 * Copy relocate_new_kernel to the reboot_code_buffer for use
> > +	 * after the kernel is shut down.
> > +	 */
> > +
> > +	memcpy(reboot_code_buffer, relocate_new_kernel,
> > +		relocate_new_kernel_size);
> > +
> > +	/* Flush the reboot_code_buffer in preparation for its execution. */
> > +
> > +	__flush_dcache_area(reboot_code_buffer, relocate_new_kernel_size);
> > +
> > +	/* Flush the kimage list. */
> > +
> > +	kexec_list_walk(NULL, image->head, kexec_list_flush_cb);
> > +
> > +	pr_info("Bye!\n");
> > +
> > +	/* Disable all DAIF exceptions. */
> > +	
> > +	asm volatile ("msr daifset, #0xf" : : : "memory");
> > +
> > +	soft_restart(reboot_code_buffer_phys);
> 
> So what is soft_restart() functionality in arm64?

soft_restart() basically turns off the MMU and data caches, then jumps
to the address passed to it, reboot_code_buffer_phys here.
 
> Looks like it switches to identity mapped page tables and that seems
> to be the reason that you are not preparing identity mapped page
> tables in kexec code. I am wondering I how do you make sure that once
> kexec is swapping pages (putting new kernel's pages to its destination)
> at that time these identity page will not be overwritten?
> 
> I am assuming that you are jumping to purgatory with paging enabled
> and whole of the memory identity mapped.

The identity map is just used to turn off the MMU.  soft_restart() is in
that identity mapping, and once it shuts off the MMU it jumps to the
physical address of relocate_kernel, which uses physical addressing to
do the copy.

> I am also curious to know what are different entry points arm64
> kernel image supports and which one are you using by default.

The arm64 kernel as a single entry, the start of the image.  See
Documentation/arm64/booting.txt.

-Geoff



_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

  reply	other threads:[~2014-09-25 19:02 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-25  0:23 [PATCH 0/7] arm64 kexec kernel patches V3 Geoff Levand
2014-09-25  0:23 ` [PATCH 2/7] arm64: Convert hcalls to use ISS field Geoff Levand
2014-10-03 10:51   ` Mark Rutland
2014-10-03 21:56     ` Geoff Levand
2014-10-06 10:13       ` Mark Rutland
2014-09-25  0:23 ` [PATCH 4/7] arm64: Add EL2 switch to soft_restart Geoff Levand
2014-09-25  0:23 ` [PATCH 3/7] arm64: Add new hcall HVC_CALL_FUNC Geoff Levand
2014-09-25  0:23 ` [PATCH 1/7] arm64/kvm: Fix assembler compatibility of macros Geoff Levand
2014-10-03 10:26   ` Mark Rutland
2014-10-03 22:27     ` Geoff Levand
2014-10-06 10:10       ` Mark Rutland
2014-09-25  0:23 ` [PATCH 6/7] arm64/kexec: Add core kexec support Geoff Levand
2014-09-25 18:28   ` Vivek Goyal
2014-09-25 19:02     ` Geoff Levand [this message]
2014-09-25 19:08       ` Vivek Goyal
2014-09-30 18:18   ` Vivek Goyal
2014-09-30 19:54     ` Geoff Levand
2014-10-01 14:56       ` Vivek Goyal
2014-10-03 18:35         ` Geoff Levand
2014-10-07 13:44           ` Vivek Goyal
2014-10-07 18:42             ` Geoff Levand
2014-10-07 18:45               ` Vivek Goyal
2014-10-07 20:12                 ` Geoff Levand
2014-10-07 20:22                   ` Vivek Goyal
2014-10-09 22:26                     ` Geoff Levand
2014-10-23 23:08                       ` Geoff Levand
2014-10-08  9:28                   ` Mark Rutland
2014-10-07 18:48               ` Vivek Goyal
2014-10-01 16:16       ` Mark Rutland
2014-10-01 17:36         ` Vivek Goyal
2014-10-01 17:56           ` Mark Rutland
2014-10-01 17:47         ` Vivek Goyal
2014-10-01 18:03           ` Mark Rutland
2014-10-01 18:09             ` Vivek Goyal
2014-10-01 18:19               ` Mark Rutland
2014-10-01 18:31                 ` Vivek Goyal
2014-10-01 19:22             ` Vivek Goyal
2014-10-02 10:26               ` Mark Rutland
2014-10-02 13:54                 ` Vivek Goyal
2014-10-02 16:53                   ` Mark Rutland
2014-09-30 23:59   ` [PATCH V2 " Geoff Levand
2014-09-25  0:23 ` [PATCH 5/7] arm64: Move proc-macros.S to include/asm Geoff Levand
2014-09-25  0:23 ` [PATCH 7/7] arm64/kexec: Enable kexec in the arm64 defconfig Geoff Levand
2014-09-30 20:29 ` [PATCH 0/7] arm64 kexec kernel patches V3 Vivek Goyal
2014-09-30 21:27   ` Geoff Levand
2014-10-02 19:08     ` Vivek Goyal
2014-10-02 22:59       ` Geoff Levand
2014-10-07 13:43         ` Vivek Goyal
2014-10-07 14:06           ` Mark Rutland
2014-10-01 15:19 ` Vivek Goyal
2014-10-03 21:16   ` Geoff Levand
2014-10-07 13:40     ` Vivek Goyal
2014-10-07 18:29       ` Geoff Levand
2014-10-08  9:42       ` Mark Rutland
2014-10-09  3:21         ` Dave Young
2014-10-09 10:09           ` Mark Rutland
2014-10-09 10:19             ` Ard Biesheuvel
2014-10-10  5:30             ` Dave Young
2014-10-07 15:22     ` Mark Rutland
2014-10-07 18:28       ` Geoff Levand
2014-10-07 18:09 ` Vivek Goyal
2014-10-07 20:07   ` Geoff Levand
2014-10-08  9:52     ` Leif Lindholm
2014-10-08 10:07       ` Mark Rutland
2014-10-09  9:22 ` Will Deacon

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=1411671771.6001.208.camel@smoke \
    --to=geoff@infradead.org \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=kexec@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=marc.zyngier@arm.com \
    --cc=vgoyal@redhat.com \
    --cc=will.deacon@arm.com \
    /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