8xx v2.6 TLB problems and suggested workaround
Joakim Tjernlund
Joakim.Tjernlund at lumentis.se
Sun Apr 24 08:07:08 EST 2005
> On Apr 9, 2005, at 3:03 PM, Joakim Tjernlund wrote:
>
> > yes, but I think these operates on physical addresses which makes it a
> > bit harder.
> > I still think this can be resolved in fault.c. Replace
> > andis. r11, r10, 0x0200 /* If set, indicates store op */
> > beq 2f
> > in the DTLB Error handler with
> > andis. r11, r10, 0x4800 /* If set, indicates invalid pte or
> > protection violation */
> > bne 2f
> > In fault.c you can check if both store and invalid is set
> > simultaneously. If it is, clear
> > the store flag and continue as usual.
>
> The purpose for the code in TLB Error is to create fast path for
> tracking
> writable pages as dirty. I think we should stop writing all of this
> assembler
Do you refer to the assembler code above or some other assembler code such
as my dcbX workaround? I once had a C version of that workaround that lived
in fault.c. Sadly it think it is gone now, not sure if I ever sent it to the list.
> code and if we find anything that isn't simply updating the "dirty"
> flags, we
> should bail out to the fault.c and do whatever is necessary. This
> includes
> simulating any cache instructions that fail.
>
> As a further performance enhancement, which used to be the standard
> mode for 8xx, we should allow the option to mark all writable pages as
> dirty when the PTE is created. This eliminates the TLB Error fault in
> this
> case completely. Since most 8xx systems don't do page swapping, this
> has no other effect. If it does page swapping, it may swap more pages
> than necessary, or the option can be disabled to do proper paging.
>
> Thanks.
>
>
> -- Dan
>
More information about the Linuxppc-embedded
mailing list