| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: Marcin Nowakowski <marcin.nowakowski@imgtec.com> |
| Date: Tue, 11 Apr 2017 09:00:36 +0200 |
| Subject: MIPS: mm: adjust PKMAP location |
| |
| From: Marcin Nowakowski <marcin.nowakowski@imgtec.com> |
| |
| |
| [ Upstream commit c56e7a4c3e77f6fbd9b55c06c14eda65aae58958 ] |
| |
| Space reserved for PKMap should span from PKMAP_BASE to FIXADDR_START. |
| For large page sizes this is not the case as eg. for 64k pages the range |
| currently defined is from 0xfe000000 to 0x102000000(!!) which obviously |
| isn't right. |
| Remove the hardcoded location and set the BASE address as an offset from |
| FIXADDR_START. |
| |
| Since all PKMAP ptes have to be placed in a contiguous memory, ensure |
| that this is the case by placing them all in a single page. This is |
| achieved by aligning the end address to pkmap pages count pages. |
| |
| Signed-off-by: Marcin Nowakowski <marcin.nowakowski@imgtec.com> |
| Cc: linux-mips@linux-mips.org |
| Patchwork: https://patchwork.linux-mips.org/patch/15950/ |
| Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/mips/include/asm/pgtable-32.h | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/arch/mips/include/asm/pgtable-32.h |
| +++ b/arch/mips/include/asm/pgtable-32.h |
| @@ -18,6 +18,10 @@ |
| |
| #include <asm-generic/pgtable-nopmd.h> |
| |
| +#ifdef CONFIG_HIGHMEM |
| +#include <asm/highmem.h> |
| +#endif |
| + |
| extern int temp_tlb_entry; |
| |
| /* |
| @@ -61,7 +65,8 @@ extern int add_temporary_entry(unsigned |
| |
| #define VMALLOC_START MAP_BASE |
| |
| -#define PKMAP_BASE (0xfe000000UL) |
| +#define PKMAP_END ((FIXADDR_START) & ~((LAST_PKMAP << PAGE_SHIFT)-1)) |
| +#define PKMAP_BASE (PKMAP_END - PAGE_SIZE * LAST_PKMAP) |
| |
| #ifdef CONFIG_HIGHMEM |
| # define VMALLOC_END (PKMAP_BASE-2*PAGE_SIZE) |