How the linux use BAT

Benjamin Herrenschmidt benh at
Sat Oct 29 08:39:04 EST 2005

On Fri, 2005-10-28 at 10:56 -0500, Noah yan wrote:

> I am sorry that I did make it clear. It is a little confusing for me
> between the hardware segment and the term "segment" or "section" used
> in a process's address space (AS). One of my understanding is that a
> section in a process's AS is mapped to a hardware segment, which sound
> straightforward but maybe wrong because a process binary may have lots
> of segments that are not the same size. 

No, there is no relationship. The kernel just sets up enough segments to
map the entire process address space, this is irrelevant to the actual
program sections.

> Pure segment VM is also hard to maintain memory efficiency.  Or,
> several sections, such as different data section are in segments. I
> remember in Linux x86 (posibbly 2.4), segment is not fully used in
> term of VM. The segmentation of the kernel and userland are defined
> upon booting and never changed later on. 

The segmentation mecanism on PowerPC is slightly different. We change
segments when context switching as they contain the "vsid" which acts as
a kind of context ID, thus we can keep entry for more than one
context/process in the hash table, we don't have to flush it on context

> Thanks very much!
> Noah
>         The way linux uses BATs is for the kernel linear mapping.
>         Linux uses by
>         default (though that can be configued differently) a 3G/1G
>         split, that 
>         is the low 3G of address space are used by userland (and
>         covered by the
>         user page tables) and the high 1G are used by the kernel. That
>         kernel
>         space itself is split into a bottom part up to 768Mb (by
>         default, that 
>         can also be configured differently) which is the linear
>         mapping, that is
>         a single linear mapping of all RAM from 0xc0000000. The rest
>         of the
>         kernel space is mapped with page tables and known as the
>         kernel virtual 
>         space, used for vmalloc and ioremap.
>         The BATs are used for the linear mapping. They "override" the
>         page
>         tables over it if any (though we usually don't bother setting
>         up PTEs
>         over the space that is BAT mapped). They basically improve
>         performances 
>         by not requiring to go through the hash trasnslation for most
>         kernel
>         accesses to memory and not using space in the TLB/ERAT.
>         Ben.

More information about the Linuxppc-dev mailing list