Skip to contentSkip to conversation

question about 8241 again

DISCUSSION llee 2 participants 2 messages Apr 24, 2004

lore
Share & tools
lore

llee

author
#0 lore raw

Hi, all,

I get confusion on linux PPC MMU management(kernel 2.6.3): It seems linux setup an empty hashtable (in MMU_init_hw) first and do a hash_page() when exception. But at least it should make a real mapping for the kernel itself, shouldn't it? But I haven't found it do this anywhere.

And also, when i add the following code in sandpoint_map_io(and I also enable feature CPU_FTR_HPTE_TABLE for 8241):
io_block_mapping(0x70000000, 0x70000000, 0x20000000, _PAGE_IO); io_block_mapping(0x80500000, 0x80500000, 0x00100000, _PAGE_IO);
the first call get a bat mapping and another get a page mapping, but only the first one works find, the second one could not been access.

Could anybody tell me why?

Thanks advanced and sorry for my poor english.

Ken

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

#1 lore raw
Quoted 7 lines · llee

Hi, all,

I get confusion on linux PPC MMU management(kernel 2.6.3): It seems linux setup an empty hashtable (in MMU_init_hw) first and do a hash_page() when exception. But at least it should make a real mapping for the kernel itself, shouldn't it? But I haven't found it do this anywhere.

The kernel itself... well.. that depends. For the kernel code/data, and in general, the beginning of the linear mapping, linux uses BATs (basically, the start of memory is mapped with BATs, up to 512Mb, that is 2 BATs). In 2.6, the kernel should be able to cope with taking a hash fault on the rest of kernel memory at any time, if you spot a case where this isn't true, please tell us ;) Especially, it clears MSR:RI in areas where faulting isn't safe (like when using SRR0/SRR1) which causes a fault at this point to return to a special fixup code instead of resuming the normal flow of execution.

Quoted 6 lines

And also, when i add the following code in sandpoint_map_io(and I also enable feature CPU_FTR_HPTE_TABLE for 8241):

    io_block_mapping(0x70000000, 0x70000000, 0x20000000, _PAGE_IO);
    io_block_mapping(0x80500000, 0x80500000, 0x00100000, _PAGE_IO);

the first call get a bat mapping and another get a page mapping, but only the first one works find, the second one could not been access.

I'm not too sure, I tend to discourage people from using io_block_mapping, use ioremap instead. Make sure you are past MMU_init though before you can use the page tables.

Quoted 6 lines

Could anybody tell me why?

Thanks advanced and sorry for my poor english.

Ken

--
Benjamin Herrenschmidt <[email protected]>

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