linux/arch/powerpc/mm
Paul Mackerras 65ba6cdc83 [POWERPC] Clear sub-page HPTE present bits when demoting page size
When we demote a slice from 64k to 4k, and we are about to insert an
HPTE for a 4k subpage and we notice that there is an existing 64k
HPTE, we first invalidate that HPTE before inserting the new 4k
subpage HPTE.  Since the bits that encode which hash bucket the old
HPTE was in overlap with the bits that encode which of the 16 subpages
have HPTEs, we need to clear out the subpage HPTE-present bits before
starting to insert HPTEs for the 4k subpages.  If we don't do that, we
can erroneously think that a subpage already has an HPTE when it
doesn't.

That in itself wouldn't be such a problem except that when we go to
update the HPTE that we think is present on machines with a
hypervisor, the hypervisor can tell us that the HPTE we think is there
is actually there even though it isn't, which can lead to a process
getting stuck in a loop, continually faulting.  The reason for the
confusion is that the AVPN (abbreviated virtual page number) we are
looking for in the HPTE for a 4k subpage can actually match the AVPN
in a stale HPTE for another 64k page.  For example, the HPTE for
the 4k subpage at 0x84000f000 will be in the same hash bucket and have
the same AVPN as the HPTE for the 64k page at 0x8400f0000.

This fixes the code to clear out the subpage HPTE-present bits.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2008-06-18 21:40:43 +10:00
..
40x_mmu.c [POWERPC] Remove and replace uses of PPC_MEMSTART with memstart_addr 2008-04-17 07:46:12 +10:00
44x_mmu.c [POWERPC] Introduce lowmem_end_addr to distinguish from total_lowmem 2008-04-17 07:46:13 +10:00
fault.c [POWERPC] Make setjmp/longjmp code usable outside of xmon 2008-01-25 22:52:50 +11:00
fsl_booke_mmu.c [POWERPC] 85xx: Add support for relocatable kernel (and booting at non-zero) 2008-04-24 20:58:01 +10:00
hash_low_32.S [POWERPC] powerpc/mm/hash_low_32.S: Remove CVS keyword 2008-05-20 09:34:18 +10:00
hash_low_64.S [POWERPC] Clear sub-page HPTE present bits when demoting page size 2008-06-18 21:40:43 +10:00
hash_native_64.c [POWERPC] Use 1TB segments 2007-10-12 14:05:17 +10:00
hash_utils_64.c [POWERPC] vmemmap fixes to use smaller pages 2008-05-15 20:49:25 +10:00
hugetlbpage.c [POWERPC] Add hugepagesz boot-time parameter 2008-01-17 14:57:36 +11:00
init_32.c [POWERPC] Port fixmap from x86 and use for kmap_atomic 2008-04-24 20:58:02 +10:00
init_64.c [POWERPC] vmemmap fixes to use smaller pages 2008-05-15 20:49:25 +10:00
Makefile [LIB]: Make PowerPC LMB code generic so sparc64 can use it too. 2008-02-13 16:56:49 -08:00
mem.c [POWERPC] Make walk_memory_resource available with MEMORY_HOTPLUG=n 2008-06-09 11:32:41 +10:00
mmap.c Detach sched.h from mm.h 2007-05-21 09:18:19 -07:00
mmu_context_32.c [POWERPC] Remove the dregs of APUS support from arch/powerpc 2007-06-14 22:30:15 +10:00
mmu_context_64.c [POWERPC] Tidy up CONFIG_PPC_MM_SLICES code 2007-08-17 11:01:59 +10:00
mmu_decl.h [POWERPC] Rename __initial_memory_limit to __initial_memory_limit_addr 2008-04-17 07:46:13 +10:00
numa.c [POWERPC] Add include of linux/of.h to numa.c 2008-04-24 20:57:32 +10:00
pgtable_32.c [POWERPC] Fix __set_fixmap() for STRICT_MM_TYPECHECKS 2008-05-23 16:15:32 +10:00
pgtable_64.c [POWERPC] Use 1TB segments 2007-10-12 14:05:17 +10:00
ppc_mmu_32.c [POWERPC] Rename __initial_memory_limit to __initial_memory_limit_addr 2008-04-17 07:46:13 +10:00
slb_low.S [POWERPC] vmemmap fixes to use smaller pages 2008-05-15 20:49:25 +10:00
slb.c [POWERPC] vmemmap fixes to use smaller pages 2008-05-15 20:49:25 +10:00
slice.c spin_lock_unlocked cleanups 2007-10-17 08:43:01 -07:00
stab.c [LIB]: Make PowerPC LMB code generic so sparc64 can use it too. 2008-02-13 16:56:49 -08:00
subpage-prot.c [POWERPC] Provide a way to protect 4k subpages when using 64k pages 2008-01-24 10:06:01 +11:00
tlb_32.c powerpc: tlb_32.c build fix 2007-07-21 17:49:16 -07:00
tlb_64.c [POWERPC] Fix CONFIG_SMP=n build error on ppc64 2007-11-13 16:22:44 +11:00