diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2007-12-13 06:13:38 -0800 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-12-13 06:13:38 -0800 |
commit | 8f361453d8e9a67c85b2cf9b93c642c2d8fe0462 (patch) | |
tree | 79c021106e2c3f708d085285680a29bb665c0b37 /arch/sparc64/kernel/entry.S | |
parent | da8cadb31b82c9d41fc593c8deab6aa20b162d6b (diff) | |
download | op-kernel-dev-8f361453d8e9a67c85b2cf9b93c642c2d8fe0462.zip op-kernel-dev-8f361453d8e9a67c85b2cf9b93c642c2d8fe0462.tar.gz |
[SPARC64]: Fix two kernel linear mapping setup bugs.
This was caught and identified by Greg Onufer.
Since we setup the 256M/4M bitmap table after taking over the trap
table, it's possible for some 4M mapping to get loaded in the TLB
beforhand which later will be 256M mappings.
This can cause illegal TLB multiple-match conditions. Fix this by
setting up the bitmap before we take over the trap table.
Next, __flush_tlb_all() was not doing anything on hypervisor
platforms. Fix by adding sun4v_mmu_demap_all() and calling it.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/entry.S')
-rw-r--r-- | arch/sparc64/kernel/entry.S | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S index c9b0d7a..ea257e8 100644 --- a/arch/sparc64/kernel/entry.S +++ b/arch/sparc64/kernel/entry.S @@ -2593,3 +2593,15 @@ sun4v_mmustat_info: retl nop .size sun4v_mmustat_info, .-sun4v_mmustat_info + + .globl sun4v_mmu_demap_all + .type sun4v_mmu_demap_all,#function +sun4v_mmu_demap_all: + clr %o0 + clr %o1 + mov HV_MMU_ALL, %o2 + mov HV_FAST_MMU_DEMAP_ALL, %o5 + ta HV_FAST_TRAP + retl + nop + .size sun4v_mmu_demap_all, .-sun4v_mmu_demap_all |