All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vivek Goyal <vgoyal@redhat.com>
To: Geoff Levand <geoff@infradead.org>
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 15:08:42 -0400	[thread overview]
Message-ID: <20140925190842.GC5162@redhat.com> (raw)
In-Reply-To: <1411671771.6001.208.camel@smoke>

On Thu, Sep 25, 2014 at 12:02:51PM -0700, Geoff Levand wrote:
> 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.

Hi Geoff,

Ok, thanks. I think it would be nice if this explanation appears in code
somewhere as a comment.

Being able to turn off MMU, seems to have simplified things.

> 
> > 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.

I will go through it.

Thanks
Vivek

> 
> -Geoff
> 

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

WARNING: multiple messages have this Message-ID (diff)
From: vgoyal@redhat.com (Vivek Goyal)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 6/7] arm64/kexec: Add core kexec support
Date: Thu, 25 Sep 2014 15:08:42 -0400	[thread overview]
Message-ID: <20140925190842.GC5162@redhat.com> (raw)
In-Reply-To: <1411671771.6001.208.camel@smoke>

On Thu, Sep 25, 2014 at 12:02:51PM -0700, Geoff Levand wrote:
> 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.

Hi Geoff,

Ok, thanks. I think it would be nice if this explanation appears in code
somewhere as a comment.

Being able to turn off MMU, seems to have simplified things.

> 
> > 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.

I will go through it.

Thanks
Vivek

> 
> -Geoff
> 

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

Thread overview: 130+ 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 ` Geoff Levand
2014-09-25  0:23 ` [PATCH 2/7] arm64: Convert hcalls to use ISS field Geoff Levand
2014-09-25  0:23   ` Geoff Levand
2014-10-03 10:51   ` Mark Rutland
2014-10-03 10:51     ` Mark Rutland
2014-10-03 21:56     ` Geoff Levand
2014-10-03 21:56       ` Geoff Levand
2014-10-06 10:13       ` Mark Rutland
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   ` Geoff Levand
2014-09-25  0:23 ` [PATCH 3/7] arm64: Add new hcall HVC_CALL_FUNC Geoff Levand
2014-09-25  0:23   ` Geoff Levand
2014-09-25  0:23 ` [PATCH 1/7] arm64/kvm: Fix assembler compatibility of macros Geoff Levand
2014-09-25  0:23   ` Geoff Levand
2014-10-03 10:26   ` Mark Rutland
2014-10-03 10:26     ` Mark Rutland
2014-10-03 22:27     ` Geoff Levand
2014-10-03 22:27       ` Geoff Levand
2014-10-06 10:10       ` Mark Rutland
2014-10-06 10:10         ` Mark Rutland
2014-09-25  0:23 ` [PATCH 7/7] arm64/kexec: Enable kexec in the arm64 defconfig Geoff Levand
2014-09-25  0:23   ` Geoff Levand
2014-09-25  0:23 ` [PATCH 6/7] arm64/kexec: Add core kexec support Geoff Levand
2014-09-25  0:23   ` Geoff Levand
2014-09-25 18:28   ` Vivek Goyal
2014-09-25 18:28     ` Vivek Goyal
2014-09-25 19:02     ` Geoff Levand
2014-09-25 19:02       ` Geoff Levand
2014-09-25 19:08       ` Vivek Goyal [this message]
2014-09-25 19:08         ` Vivek Goyal
2014-09-30 18:18   ` Vivek Goyal
2014-09-30 18:18     ` Vivek Goyal
2014-09-30 19:54     ` Geoff Levand
2014-09-30 19:54       ` Geoff Levand
2014-10-01 14:56       ` Vivek Goyal
2014-10-01 14:56         ` Vivek Goyal
2014-10-03 18:35         ` Geoff Levand
2014-10-03 18:35           ` Geoff Levand
2014-10-07 13:44           ` Vivek Goyal
2014-10-07 13:44             ` Vivek Goyal
2014-10-07 18:42             ` Geoff Levand
2014-10-07 18:42               ` Geoff Levand
2014-10-07 18:45               ` Vivek Goyal
2014-10-07 18:45                 ` Vivek Goyal
2014-10-07 20:12                 ` Geoff Levand
2014-10-07 20:12                   ` Geoff Levand
2014-10-07 20:22                   ` Vivek Goyal
2014-10-07 20:22                     ` Vivek Goyal
2014-10-09 22:26                     ` Geoff Levand
2014-10-09 22:26                       ` Geoff Levand
2014-10-23 23:08                       ` Geoff Levand
2014-10-23 23:08                         ` Geoff Levand
2014-10-08  9:28                   ` Mark Rutland
2014-10-08  9:28                     ` Mark Rutland
2014-10-07 18:48               ` Vivek Goyal
2014-10-07 18:48                 ` Vivek Goyal
2014-10-01 16:16       ` Mark Rutland
2014-10-01 16:16         ` Mark Rutland
2014-10-01 17:36         ` Vivek Goyal
2014-10-01 17:36           ` Vivek Goyal
2014-10-01 17:56           ` Mark Rutland
2014-10-01 17:56             ` Mark Rutland
2014-10-01 17:47         ` Vivek Goyal
2014-10-01 17:47           ` Vivek Goyal
2014-10-01 18:03           ` Mark Rutland
2014-10-01 18:03             ` Mark Rutland
2014-10-01 18:09             ` Vivek Goyal
2014-10-01 18:09               ` Vivek Goyal
2014-10-01 18:19               ` Mark Rutland
2014-10-01 18:19                 ` Mark Rutland
2014-10-01 18:31                 ` Vivek Goyal
2014-10-01 18:31                   ` Vivek Goyal
2014-10-01 19:22             ` Vivek Goyal
2014-10-01 19:22               ` Vivek Goyal
2014-10-02 10:26               ` Mark Rutland
2014-10-02 10:26                 ` Mark Rutland
2014-10-02 13:54                 ` Vivek Goyal
2014-10-02 13:54                   ` Vivek Goyal
2014-10-02 16:53                   ` Mark Rutland
2014-10-02 16:53                     ` Mark Rutland
2014-09-30 23:59   ` [PATCH V2 " Geoff Levand
2014-09-30 23:59     ` 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   ` Geoff Levand
2014-09-30 20:29 ` [PATCH 0/7] arm64 kexec kernel patches V3 Vivek Goyal
2014-09-30 20:29   ` Vivek Goyal
2014-09-30 21:27   ` Geoff Levand
2014-09-30 21:27     ` Geoff Levand
2014-10-02 19:08     ` Vivek Goyal
2014-10-02 19:08       ` Vivek Goyal
2014-10-02 22:59       ` Geoff Levand
2014-10-02 22:59         ` Geoff Levand
2014-10-07 13:43         ` Vivek Goyal
2014-10-07 13:43           ` Vivek Goyal
2014-10-07 14:06           ` Mark Rutland
2014-10-07 14:06             ` Mark Rutland
2014-10-01 15:19 ` Vivek Goyal
2014-10-01 15:19   ` Vivek Goyal
2014-10-03 21:16   ` Geoff Levand
2014-10-03 21:16     ` Geoff Levand
2014-10-07 13:40     ` Vivek Goyal
2014-10-07 13:40       ` Vivek Goyal
2014-10-07 18:29       ` Geoff Levand
2014-10-07 18:29         ` Geoff Levand
2014-10-08  9:42       ` Mark Rutland
2014-10-08  9:42         ` Mark Rutland
2014-10-09  3:21         ` Dave Young
2014-10-09  3:21           ` Dave Young
2014-10-09 10:09           ` Mark Rutland
2014-10-09 10:09             ` Mark Rutland
2014-10-09 10:19             ` Ard Biesheuvel
2014-10-09 10:19               ` Ard Biesheuvel
2014-10-10  5:30             ` Dave Young
2014-10-10  5:30               ` Dave Young
2014-10-07 15:22     ` Mark Rutland
2014-10-07 15:22       ` Mark Rutland
2014-10-07 18:28       ` Geoff Levand
2014-10-07 18:28         ` Geoff Levand
2014-10-07 18:09 ` Vivek Goyal
2014-10-07 18:09   ` Vivek Goyal
2014-10-07 20:07   ` Geoff Levand
2014-10-07 20:07     ` Geoff Levand
2014-10-08  9:52     ` Leif Lindholm
2014-10-08  9:52       ` Leif Lindholm
2014-10-08 10:07       ` Mark Rutland
2014-10-08 10:07         ` Mark Rutland
2014-10-09  9:22 ` Will Deacon
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=20140925190842.GC5162@redhat.com \
    --to=vgoyal@redhat.com \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=geoff@infradead.org \
    --cc=kexec@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=marc.zyngier@arm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.