Allocating kernel memory within a specific range.

Igor Grobman igor at cs.wisc.edu
Sat Mar 6 06:30:09 EST 2004


Hello ppc64 hackers.

I have a question, which might seem a bit weird at first, but bear with
me.  I would like to get at kernel memory that lies within 32MB of kernel
code (i.e. within the range of the unconditional branch instruction).  In
other words, I would like to get at memory between the end of kernel code
and address 0xc000000001FFFFFF.  As far as I can tell, this memory is
available to the memory allocator, but whenever I call kmalloc() I tend to
get addresses that are 180MB away or more.  Is there a way to massage
kmalloc() or some other function into giving me what I want?  I am not
asking for an officially published interface, just something that I could
get working in my kernel module.

An alternative would be to get memory in the
0xBFFFFFFFFE000000-0xBFFFFFFFFFFFFFFF range.  From what I understand, this
is close to impossible, since the upper 21 bits are not considered in
addressing (except the high nibble).

In case you are curious why I need this.  I am working on a port of
KernInst, a tool that allows dynamically splicing code into a running
kernel, thus allowing dynamic kernel modification.  I need to be able to
overwrite a single instruction atomically with a jump to the modified
code.  The 32MB requirement requirement is due to range of the branch
instruction.

Thanks for any and all ideas.
-Igor

** Sent via the linuxppc64-dev mail list. See http://lists.linuxppc.org/





More information about the Linuxppc64-dev mailing list