| From d75e4919cc0b6fbcbc8d6654ef66d87a9dbf1526 Mon Sep 17 00:00:00 2001 |
| From: Jeremy Kerr <jk@ozlabs.org> |
| Date: Wed, 24 May 2017 16:49:59 +1000 |
| Subject: powerpc/spufs: Fix hash faults for kernel regions |
| |
| From: Jeremy Kerr <jk@ozlabs.org> |
| |
| commit d75e4919cc0b6fbcbc8d6654ef66d87a9dbf1526 upstream. |
| |
| Commit ac29c64089b7 ("powerpc/mm: Replace _PAGE_USER with |
| _PAGE_PRIVILEGED") swapped _PAGE_USER for _PAGE_PRIVILEGED, and |
| introduced check_pte_access() which denied kernel access to |
| non-_PAGE_PRIVILEGED pages. |
| |
| However, it didn't add _PAGE_PRIVILEGED to the hash fault handler |
| for spufs' kernel accesses, so the DMAs required to establish SPE |
| memory no longer work. |
| |
| This change adds _PAGE_PRIVILEGED to the hash fault handler for |
| kernel accesses. |
| |
| Fixes: ac29c64089b7 ("powerpc/mm: Replace _PAGE_USER with _PAGE_PRIVILEGED") |
| Signed-off-by: Jeremy Kerr <jk@ozlabs.org> |
| Reported-by: Sombat Tragolgosol <sombat3960@gmail.com> |
| Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/powerpc/platforms/cell/spu_base.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/arch/powerpc/platforms/cell/spu_base.c |
| +++ b/arch/powerpc/platforms/cell/spu_base.c |
| @@ -197,7 +197,9 @@ static int __spu_trap_data_map(struct sp |
| (REGION_ID(ea) != USER_REGION_ID)) { |
| |
| spin_unlock(&spu->register_lock); |
| - ret = hash_page(ea, _PAGE_PRESENT | _PAGE_READ, 0x300, dsisr); |
| + ret = hash_page(ea, |
| + _PAGE_PRESENT | _PAGE_READ | _PAGE_PRIVILEGED, |
| + 0x300, dsisr); |
| spin_lock(&spu->register_lock); |
| |
| if (!ret) { |