Commit 4559424a0c34f0cb22fa31bc24015a06dc064b32

Authored by Becky Bruce
Committed by Kumar Gala
1 parent b9df022319

powerpc/fsl-booke: Fix settlbcam for 64-bit

Currently, it does a cntlzd on the size and then subtracts it from
21.... this doesn't take into account the varying size of a "long".
Just use __ilog instead (and subtract the 10 we have to subtract
to get to the tsize encoding).

Also correct the comment about page sizes supported.

Signed-off-by: Becky Bruce <beckyb@kernel.crashing.org>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>

Showing 1 changed file with 6 additions and 6 deletions Side-by-side Diff

arch/powerpc/mm/fsl_booke_mmu.c
... ... @@ -101,17 +101,17 @@
101 101  
102 102 /*
103 103 * Set up a variable-size TLB entry (tlbcam). The parameters are not checked;
104   - * in particular size must be a power of 4 between 4k and 256M (or 1G, for cpus
105   - * that support extended page sizes). Note that while some cpus support a
106   - * page size of 4G, we don't allow its use here.
  104 + * in particular size must be a power of 4 between 4k and the max supported by
  105 + * an implementation; max may further be limited by what can be represented in
  106 + * an unsigned long (for example, 32-bit implementations cannot support a 4GB
  107 + * size).
107 108 */
108 109 static void settlbcam(int index, unsigned long virt, phys_addr_t phys,
109 110 unsigned long size, unsigned long flags, unsigned int pid)
110 111 {
111   - unsigned int tsize, lz;
  112 + unsigned int tsize;
112 113  
113   - asm (PPC_CNTLZL "%0,%1" : "=r" (lz) : "r" (size));
114   - tsize = 21 - lz;
  114 + tsize = __ilog2(size) - 10;
115 115  
116 116 #ifdef CONFIG_SMP
117 117 if ((flags & _PAGE_NO_CACHE) == 0)