From: Mohan Kumar M <mohan@in.ibm.com>
To: Milton Miller <miltonm@bga.com>
Cc: Ben Herrenschmidt <benh@kernel.crashing.org>,
kexec@lists.infradead.org,
Michael Ellerman <michael@ellerman.id.au>,
linuxppc-dev@ozlabs.org, Simon Horman <horms@verge.net.au>,
Paul Mackerras <paulus@samba.org>
Subject: Re: [PATCH 3/3] powerpc/ppc64/kdump: better flag for running relocatable
Date: Thu, 23 Oct 2008 20:45:54 +0530 [thread overview]
Message-ID: <4900952A.3090605@in.ibm.com> (raw)
In-Reply-To: <kexec-kern-2@bga.com>
Hi Milton,
My suggestions:
Milton Miller wrote:
> The __kdump_flag ABI is overly constraining for future development.
>
> As of 2.6.27, the kernel entry point has 4 constraints: Offset 0 is
> the starting point for the master (boot) cpu (entered with r3 pointing
> to the device tree structure), offset 0x60 is code for the slave cpus
> (entered with r3 set to their device tree physical id), offset 0x20 is
> used by the iseries hypervisor, and secondary cpus must be well behaved
> when the first 256 bytes are copied to address 0.
>
> Placing the __kdump_flag at 0x18 is bad because:
>
> - It was taking the last 8 bytes before the iseries hypervisor data.
> - It was 8 bytes for a boolean flag
> - It had no way of identifying that the flag was present
> - It does leave any room for the master to add any additional code
> before branching, which hurts debug.
> - It will be unnecessarily hard for 32 bit code to be common (8 bytes)
>
> Now that we have eliminated the use of __kdump_flag in favor of
> the standard is_kdump_kernel(), this flag only controls run without
> relocating the kernel to PHYSICAL_START (0), so rename it __run_at_load.
>
We could try both of our approaches. Instead of passing the information
that next kernel should be relocatable from kexec_sequence to purgatory
code, we will do it from kexec-tools path (following your approach). But
instead of setting the __run_at_load value in the purgatory code (ie at
physical address 0x5c), we will set the variable __run_at_load at kernel
image itself.
i.e.,
[code snip 1]
lwz r7,__run_at_load-_stext(r26)
cmplwi cr0,r7,1 /* kdump kernel ? - stay where we are */
bne 1f
add r25,r25,r26
lwz r7,__run_at_load-_stext(r26)
cmplwi cr0,r7,1
bne 3f
kexec-tools
[code snip 2]
LOADADDR(6,run_at_load)
ld 18,0(6)
cmpd 18,1
bne skip
li 7,1
stw 7,92(4) # mark __run_at_load flag at kernel
skip:
lwz 7,0(4) # get the first instruction that we stole
stw 7,0(0) # and put it in the slave loop at 0
# skip cache flush, do we care?
[code snip 3]
if (info->kexec_flags & KEXEC_ON_CRASH) {
....
elf_rel_set_symbol(&info->rhdr, "run_at_load",
&my_run_at_load,
sizeof(my_run_at_load));
}
Using this approach we are not breaking the kexec_sequence ABI and we
directly modifying the flag in kernel image.
Regards,
Mohan.
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
WARNING: multiple messages have this Message-ID (diff)
From: Mohan Kumar M <mohan@in.ibm.com>
To: Milton Miller <miltonm@bga.com>
Cc: kexec@lists.infradead.org, linuxppc-dev@ozlabs.org,
Simon Horman <horms@verge.net.au>,
Paul Mackerras <paulus@samba.org>
Subject: Re: [PATCH 3/3] powerpc/ppc64/kdump: better flag for running relocatable
Date: Thu, 23 Oct 2008 20:45:54 +0530 [thread overview]
Message-ID: <4900952A.3090605@in.ibm.com> (raw)
In-Reply-To: <kexec-kern-2@bga.com>
Hi Milton,
My suggestions:
Milton Miller wrote:
> The __kdump_flag ABI is overly constraining for future development.
>
> As of 2.6.27, the kernel entry point has 4 constraints: Offset 0 is
> the starting point for the master (boot) cpu (entered with r3 pointing
> to the device tree structure), offset 0x60 is code for the slave cpus
> (entered with r3 set to their device tree physical id), offset 0x20 is
> used by the iseries hypervisor, and secondary cpus must be well behaved
> when the first 256 bytes are copied to address 0.
>
> Placing the __kdump_flag at 0x18 is bad because:
>
> - It was taking the last 8 bytes before the iseries hypervisor data.
> - It was 8 bytes for a boolean flag
> - It had no way of identifying that the flag was present
> - It does leave any room for the master to add any additional code
> before branching, which hurts debug.
> - It will be unnecessarily hard for 32 bit code to be common (8 bytes)
>
> Now that we have eliminated the use of __kdump_flag in favor of
> the standard is_kdump_kernel(), this flag only controls run without
> relocating the kernel to PHYSICAL_START (0), so rename it __run_at_load.
>
We could try both of our approaches. Instead of passing the information
that next kernel should be relocatable from kexec_sequence to purgatory
code, we will do it from kexec-tools path (following your approach). But
instead of setting the __run_at_load value in the purgatory code (ie at
physical address 0x5c), we will set the variable __run_at_load at kernel
image itself.
i.e.,
[code snip 1]
lwz r7,__run_at_load-_stext(r26)
cmplwi cr0,r7,1 /* kdump kernel ? - stay where we are */
bne 1f
add r25,r25,r26
lwz r7,__run_at_load-_stext(r26)
cmplwi cr0,r7,1
bne 3f
kexec-tools
[code snip 2]
LOADADDR(6,run_at_load)
ld 18,0(6)
cmpd 18,1
bne skip
li 7,1
stw 7,92(4) # mark __run_at_load flag at kernel
skip:
lwz 7,0(4) # get the first instruction that we stole
stw 7,0(0) # and put it in the slave loop at 0
# skip cache flush, do we care?
[code snip 3]
if (info->kexec_flags & KEXEC_ON_CRASH) {
....
elf_rel_set_symbol(&info->rhdr, "run_at_load",
&my_run_at_load,
sizeof(my_run_at_load));
}
Using this approach we are not breaking the kexec_sequence ABI and we
directly modifying the flag in kernel image.
Regards,
Mohan.
next prev parent reply other threads:[~2008-10-23 15:16 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-22 4:56 [PATCH] Support for relocatable kdump kernel Milton Miller
2008-10-22 20:39 ` [PATCH 3/3] powerpc/ppc64/kdump: better flag for running relocatable Milton Miller
2008-10-22 20:39 ` Milton Miller
2008-10-23 3:23 ` Michael Neuling
2008-10-23 3:23 ` Michael Neuling
2008-10-23 3:32 ` Paul Mackerras
2008-10-23 3:32 ` Paul Mackerras
2008-10-23 3:43 ` Paul Mackerras
2008-10-23 3:43 ` Paul Mackerras
2008-10-24 4:41 ` Michael Neuling
2008-10-24 4:41 ` Michael Neuling
2008-11-07 13:52 ` Milton Miller
2008-11-07 13:52 ` Milton Miller
2008-10-23 15:15 ` Mohan Kumar M [this message]
2008-10-23 15:15 ` Mohan Kumar M
2008-11-07 13:59 ` Milton Miller
2008-11-07 13:59 ` Milton Miller
2008-11-10 15:22 ` Mohan Kumar M
2008-11-10 15:22 ` Mohan Kumar M
2008-11-11 16:06 ` Milton Miller
2008-11-11 16:06 ` Milton Miller
2008-10-22 20:39 ` [PATCH 2/2 kexec-tools] ppc64: segemments are sorted Milton Miller
2008-10-22 20:39 ` Milton Miller
2008-10-22 20:47 ` Milton Miller
2008-10-22 20:47 ` Milton Miller
2008-10-22 20:39 ` [PATCH 1/2 kexec-tools] ppc64: new relocatble kernel activation ABI Milton Miller
2008-10-22 20:39 ` Milton Miller
2008-10-22 20:39 ` [PATCH 1/3] powerpc: kexec exit should not use magic numbers Milton Miller
2008-10-22 20:39 ` Milton Miller
2008-10-22 23:18 ` Simon Horman
2008-10-22 23:18 ` Simon Horman
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=4900952A.3090605@in.ibm.com \
--to=mohan@in.ibm.com \
--cc=benh@kernel.crashing.org \
--cc=horms@verge.net.au \
--cc=kexec@lists.infradead.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=michael@ellerman.id.au \
--cc=miltonm@bga.com \
--cc=paulus@samba.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 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.