linux-mips
[Top] [All Lists]

mips64 pgd_current

To: linux-mips@oss.sgi.com
Subject: mips64 pgd_current
From: Justin Carlson <carlson@sibyte.com>
Date: Fri, 16 Mar 2001 12:55:18 -0800
Organization: Sibyte
Reply-to: carlson@sibyte.com
Sender: owner-linux-mips@oss.sgi.com
Doing some more code trolling here; am looking at the MP 
parts of the TLB refill code in the mips64 tree, and I'm a bit
confused.

It looks to me like pgd_current[] is indexed by CP0_CONTEXT
and the resulting pointer is supposed to be the base of the
page tables for that particular process.  This makes sense.

However, I see this in mmu_context.h:

#define TLBMISS_HANDLER_SETUP_PGD(pgd) \
        pgd_current[smp_processor_id()] = (unsigned long)(pgd)
#define TLBMISS_HANDLER_SETUP() \
        set_context((unsigned long) smp_processor_id() << (23 + 3)); \
        TLBMISS_HANDLER_SETUP_PGD(swapper_pg_dir)
extern unsigned long pgd_current[];

so pgd_current[smp_processor_id()] is hard coded to be set to
swapper_pg_dir, which, insofar as I can tell, is not a per-cpu structure.  

It looks to me like this will end up with pgd_current[] being an
array of NR_CPUS pointers all of which point to the same pgd table.  

I know I must be misunderstanding this code.  Any suggestions as to what I'm
missing?

Thanks,
  Justin

<Prev in Thread] Current Thread [Next in Thread>