]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/powerpc/platforms/cell/spu_base.c
[POWERPC] spufs: set up correct SLB entries for 64k pages
[karo-tx-linux.git] / arch / powerpc / platforms / cell / spu_base.c
index d5877aacc3b63e62537d376b903f549b8d8588ca..fd6ea571dbd3d5f2b245cea977c49f428bd84d7f 100644 (file)
@@ -71,7 +71,7 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
 {
        struct spu_priv2 __iomem *priv2 = spu->priv2;
        struct mm_struct *mm = spu->mm;
-       u64 esid, vsid;
+       u64 esid, vsid, llp;
 
        pr_debug("%s\n", __FUNCTION__);
 
@@ -91,9 +91,14 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
        }
 
        esid = (ea & ESID_MASK) | SLB_ESID_V;
-       vsid = (get_vsid(mm->context.id, ea) << SLB_VSID_SHIFT) | SLB_VSID_USER;
+#ifdef CONFIG_HUGETLB_PAGE
        if (in_hugepage_area(mm->context, ea))
-               vsid |= SLB_VSID_L;
+               llp = mmu_psize_defs[mmu_huge_psize].sllp;
+       else
+#endif
+               llp = mmu_psize_defs[mmu_virtual_psize].sllp;
+       vsid = (get_vsid(mm->context.id, ea) << SLB_VSID_SHIFT) |
+                       SLB_VSID_USER | llp;
 
        out_be64(&priv2->slb_index_W, spu->slb_replace);
        out_be64(&priv2->slb_vsid_RW, vsid);