Thread (2 messages) 2 messages, 2 authors, 2001-06-08

Re: temp. mem mappings

From: Joseph A. Knapka <hidden>
Date: 2001-06-08 17:02:04

cohutta wrote:
quoted
===== Original Message From "Stephen C. Tweedie" [off-list ref] =====
Hi,

On Wed, Jun 06, 2001 at 05:14:26PM -0400, cohutta wrote:
quoted
I think this is part of the problem: on my 1 GB system, the
ACPI tables are at physical 0x3fffxxxx == virtual 0xffffxxxx,
which could conflict with the APIC and IOAPIC mappings
(from fixmap.h).
Shouldn't be --- the fixmaps should be part of the kernel's dynamic
virtual area, which is not identity mapped.  You can still map those
physical addresses via kmap() on a highmem system (and a 1GB machine
should be running a highmem kernel).
Well i now have a 768 MB machine, but i don't think that
makes a big difference with the problem that i am seeing
in mapping this ACPI memory early in setup_arch() [x86].
quoted
quoted
Well, i'm talking about physical memory, but it's marked as ACPI
data.
If it is marked PG_Reserved, then ioremap() will work on it despite it
being inside the normal physical memory area.  If not, kmap() will
still work.
quoted
Another part of the problem is that I need to do this early in
arch/i386/kernel/setup.c::setup_arch(), like between calls to
paging_init() and init_apic_mappings().  I can't use ioremap()
here can i?  ioremap() calls get_vm_area() which calls
kmalloc(), and i don't think i can use kmalloc() just yet.
Right --- you can use alloc_pages but we haven't done the
initialisation of the kmalloc slabsl by this point.
My testing indicates that i can't use __get_free_page(GFP_KERNEL)
any time during setup_arch() [still x86].  It causes a BUG
in slab.c (line 920) [linux 2.4.5].  Did I misunderstand you?
Do you have another suggestion?
Oops. You can't use __get_free_page() or alloc_pages() until
mem_init() is called, which occurs in main/init.c:start_kernel()
quite some time after setup_arch() has happened.

If you need pages before mem_init() happens, but after paging_init()
has completed in setup_arch(), then use alloc_bootmem()/free_bootmem().
Any bootmem you alloc and don't free will end up being reserved.

-- Joe
 

-- Joseph A. Knapka
"You know how many remote castles there are along the gorges? You
 can't MOVE for remote castles!" -- Lu Tze re. Uberwald
// Linux MM Documentation in progress:
// http://home.earthlink.net/~jknapka/linux-mm/vmoutline.html
* Evolution is an "unproven theory" in the same sense that gravity is. *
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.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