Thread (1 message) 1 message, 1 author, 2003-03-11

Re: Patch boot/common/relocate.S to start kernel at 0x000c

From: Dale Farnsworth <hidden>
Date: 2003-03-11 18:45:11

On Wed, Mar 05, 2003 at 02:24:32AM +0000, Paul Mackerras wrote:
Well, there is no reason why the secondary hold code shouldn't just
reference an ordinary variable in the kernel data section.  It would
take a couple more instructions, but that shouldn't be a problem.  The
starting address for the secondary hold code needs to be well-known
(at least to the prep boot wrapper) but the variable that it spins on
doesn't.

Paul.
I took a stab at implementing this.  It's simple when the kernel text
and data are relocated as a unit and PIC references work.  Unfortunately,
that doesn't always happen.  On OF machines, prom_hold_cpus() in
prom_init.c only copies the first 0x100 bytes of kernel text to
location 0 and starts the secondary cpus running at secondary_hold()
within that area.  I thought of passing in a pointer to kernel data,
but that's not sufficient because it looks like in some cases kernel
data is relocated while secondary_hold() is running.

So, if kernel data may be relocated while secondary_hold is polling,
the polled location can't be in kernel data.  Location 0x0 and 0x4 are
beginning to look good to me.

Does this seem right, or am I misreading the code?

-Dale

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help