flush_tlb_all

From: Fisherss <fisherss_at_gmail.com>
Date: Tue, 31 May 2005 10:38:21 +0800

I found that kernel stops at this
function: flush_tlb_all.
It is in file include/asm-arm/tlbflush.h :

static inline void flush_tlb_all(void)
{
       const int zero = 0;
       const unsigned int __tlb_flag = __cpu_tlb_flags;

       if (tlb_flag(TLB_WB))
         printk("flush 1");
       asm("mcr%? p15, 0, %0, c7, c10, 4" : : "r" (zero));

       if (tlb_flag(TLB_V3_FULL))
         printk("flush 2");
               asm("mcr%? p15, 0, %0, c6, c0, 0" : : "r" (zero));
       if (tlb_flag(TLB_V4_U_FULL | TLB_V6_U_FULL))
         printk("flush 3");
               asm("mcr%? p15, 0, %0, c8, c7, 0" : : "r" (zero));
       if (tlb_flag(TLB_V4_D_FULL | TLB_V6_D_FULL))
         printk("flush 4");
               asm("mcr%? p15, 0, %0, c8, c6, 0" : : "r" (zero));
       if (tlb_flag(TLB_V4_I_FULL | TLB_V6_I_FULL))
         printk("flush 5");
               asm("mcr%? p15, 0, %0, c8, c5, 0" : : "r" (zero));
}

and it actually execute the first part :
       if (tlb_flag(TLB_WB))
         printk("flush 1");
       asm("mcr%? p15, 0, %0, c7, c10, 4" : : "r" (zero));

The same line in haret's source works fine, but it doesn't work here.
MMU is turned on here.
I saw someone has the same question in a mailing list, but the
solution given by another people is "there must be something wrong in
you memory settings", I really can't understand what he mean.

any idea?

-- 
Fisherss
fisherss_at_gmail.com
Received on Mon May 30 2005 - 22:42:46 EDT

This archive was generated by hypermail 2.2.0 : Mon Jul 25 2005 - 18:10:03 EDT