All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
@ 2018-05-31  8:54 Christophe Leroy
  2018-05-31  8:54 ` [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices Christophe Leroy
                   ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Christophe Leroy @ 2018-05-31  8:54 UTC (permalink / raw)
  To: stable, Greg Kroah-Hartman; +Cc: linux-kernel, linuxppc-dev

[ Upstream commit 326691ad4f179e6edc7eb1271e618dd673e4736d ]

bitmap_or() and bitmap_andnot() can work properly with dst identical
to src1 or src2. There is no need of an intermediate result bitmap
that is copied back to dst in a second step.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/powerpc/mm/slice.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
index a4f93699194b..b79897bb89e3 100644
--- a/arch/powerpc/mm/slice.c
+++ b/arch/powerpc/mm/slice.c
@@ -379,21 +379,17 @@ static unsigned long slice_find_area(struct mm_struct *mm, unsigned long len,
 
 static inline void slice_or_mask(struct slice_mask *dst, struct slice_mask *src)
 {
-	DECLARE_BITMAP(result, SLICE_NUM_HIGH);
-
 	dst->low_slices |= src->low_slices;
-	bitmap_or(result, dst->high_slices, src->high_slices, SLICE_NUM_HIGH);
-	bitmap_copy(dst->high_slices, result, SLICE_NUM_HIGH);
+	bitmap_or(dst->high_slices, dst->high_slices, src->high_slices,
+		  SLICE_NUM_HIGH);
 }
 
 static inline void slice_andnot_mask(struct slice_mask *dst, struct slice_mask *src)
 {
-	DECLARE_BITMAP(result, SLICE_NUM_HIGH);
-
 	dst->low_slices &= ~src->low_slices;
 
-	bitmap_andnot(result, dst->high_slices, src->high_slices, SLICE_NUM_HIGH);
-	bitmap_copy(dst->high_slices, result, SLICE_NUM_HIGH);
+	bitmap_andnot(dst->high_slices, dst->high_slices, src->high_slices,
+		      SLICE_NUM_HIGH);
 }
 
 #ifdef CONFIG_PPC_64K_PAGES
-- 
2.13.3

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices
  2018-05-31  8:54 [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy Christophe Leroy
@ 2018-05-31  8:54 ` Christophe Leroy
  2018-06-02 13:21   ` Greg Kroah-Hartman
  2018-05-31  8:54 ` [PATCH 4.14 3/4] powerpc/mm/slice: Enhance for supporting PPC32 Christophe Leroy
  2018-05-31  8:54 ` [PATCH 4.14 4/4] powerpc/mm/slice: Fix hugepage allocation at hint address on 8xx Christophe Leroy
  2 siblings, 1 reply; 19+ messages in thread
From: Christophe Leroy @ 2018-05-31  8:54 UTC (permalink / raw)
  To: stable, Greg Kroah-Hartman; +Cc: linux-kernel, linuxppc-dev

[ Upstream commit a3286f05bc5a5bc7fc73a9783ec89de78fcd07f8 ]

In preparation for the following patch which will enhance 'slices'
for supporting PPC32 in order to fix an issue on hugepages on 8xx,
this patch takes out of page*.h all bits related to 'slices' and put
them into newly created slice.h header files.
While common parts go into asm/slice.h, subarch specific
parts go into respective books3s/64/slice.c and nohash/64/slice.c
'slices'

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/powerpc/include/asm/book3s/64/slice.h | 27 ++++++++++++++
 arch/powerpc/include/asm/nohash/64/slice.h | 12 ++++++
 arch/powerpc/include/asm/page.h            |  1 +
 arch/powerpc/include/asm/page_64.h         | 59 ------------------------------
 arch/powerpc/include/asm/slice.h           | 40 ++++++++++++++++++++
 5 files changed, 80 insertions(+), 59 deletions(-)
 create mode 100644 arch/powerpc/include/asm/book3s/64/slice.h
 create mode 100644 arch/powerpc/include/asm/nohash/64/slice.h
 create mode 100644 arch/powerpc/include/asm/slice.h

diff --git a/arch/powerpc/include/asm/book3s/64/slice.h b/arch/powerpc/include/asm/book3s/64/slice.h
new file mode 100644
index 000000000000..db0dedab65ee
--- /dev/null
+++ b/arch/powerpc/include/asm/book3s/64/slice.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_POWERPC_BOOK3S_64_SLICE_H
+#define _ASM_POWERPC_BOOK3S_64_SLICE_H
+
+#ifdef CONFIG_PPC_MM_SLICES
+
+#define SLICE_LOW_SHIFT		28
+#define SLICE_LOW_TOP		(0x100000000ul)
+#define SLICE_NUM_LOW		(SLICE_LOW_TOP >> SLICE_LOW_SHIFT)
+#define GET_LOW_SLICE_INDEX(addr)	((addr) >> SLICE_LOW_SHIFT)
+
+#define SLICE_HIGH_SHIFT	40
+#define SLICE_NUM_HIGH		(H_PGTABLE_RANGE >> SLICE_HIGH_SHIFT)
+#define GET_HIGH_SLICE_INDEX(addr)	((addr) >> SLICE_HIGH_SHIFT)
+
+#else /* CONFIG_PPC_MM_SLICES */
+
+#define get_slice_psize(mm, addr)	((mm)->context.user_psize)
+#define slice_set_user_psize(mm, psize)		\
+do {						\
+	(mm)->context.user_psize = (psize);	\
+	(mm)->context.sllp = SLB_VSID_USER | mmu_psize_defs[(psize)].sllp; \
+} while (0)
+
+#endif /* CONFIG_PPC_MM_SLICES */
+
+#endif /* _ASM_POWERPC_BOOK3S_64_SLICE_H */
diff --git a/arch/powerpc/include/asm/nohash/64/slice.h b/arch/powerpc/include/asm/nohash/64/slice.h
new file mode 100644
index 000000000000..ad0d6e3cc1c5
--- /dev/null
+++ b/arch/powerpc/include/asm/nohash/64/slice.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_POWERPC_NOHASH_64_SLICE_H
+#define _ASM_POWERPC_NOHASH_64_SLICE_H
+
+#ifdef CONFIG_PPC_64K_PAGES
+#define get_slice_psize(mm, addr)	MMU_PAGE_64K
+#else /* CONFIG_PPC_64K_PAGES */
+#define get_slice_psize(mm, addr)	MMU_PAGE_4K
+#endif /* !CONFIG_PPC_64K_PAGES */
+#define slice_set_user_psize(mm, psize)	do { BUG(); } while (0)
+
+#endif /* _ASM_POWERPC_NOHASH_64_SLICE_H */
diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h
index 8da5d4c1cab2..d5f1c41b7dba 100644
--- a/arch/powerpc/include/asm/page.h
+++ b/arch/powerpc/include/asm/page.h
@@ -344,5 +344,6 @@ typedef struct page *pgtable_t;
 
 #include <asm-generic/memory_model.h>
 #endif /* __ASSEMBLY__ */
+#include <asm/slice.h>
 
 #endif /* _ASM_POWERPC_PAGE_H */
diff --git a/arch/powerpc/include/asm/page_64.h b/arch/powerpc/include/asm/page_64.h
index c4d9654bd637..af04acdb873f 100644
--- a/arch/powerpc/include/asm/page_64.h
+++ b/arch/powerpc/include/asm/page_64.h
@@ -86,65 +86,6 @@ extern u64 ppc64_pft_size;
 
 #endif /* __ASSEMBLY__ */
 
-#ifdef CONFIG_PPC_MM_SLICES
-
-#define SLICE_LOW_SHIFT		28
-#define SLICE_HIGH_SHIFT	40
-
-#define SLICE_LOW_TOP		(0x100000000ul)
-#define SLICE_NUM_LOW		(SLICE_LOW_TOP >> SLICE_LOW_SHIFT)
-#define SLICE_NUM_HIGH		(H_PGTABLE_RANGE >> SLICE_HIGH_SHIFT)
-
-#define GET_LOW_SLICE_INDEX(addr)	((addr) >> SLICE_LOW_SHIFT)
-#define GET_HIGH_SLICE_INDEX(addr)	((addr) >> SLICE_HIGH_SHIFT)
-
-#ifndef __ASSEMBLY__
-struct mm_struct;
-
-extern unsigned long slice_get_unmapped_area(unsigned long addr,
-					     unsigned long len,
-					     unsigned long flags,
-					     unsigned int psize,
-					     int topdown);
-
-extern unsigned int get_slice_psize(struct mm_struct *mm,
-				    unsigned long addr);
-
-extern void slice_set_user_psize(struct mm_struct *mm, unsigned int psize);
-extern void slice_set_range_psize(struct mm_struct *mm, unsigned long start,
-				  unsigned long len, unsigned int psize);
-
-#endif /* __ASSEMBLY__ */
-#else
-#define slice_init()
-#ifdef CONFIG_PPC_STD_MMU_64
-#define get_slice_psize(mm, addr)	((mm)->context.user_psize)
-#define slice_set_user_psize(mm, psize)		\
-do {						\
-	(mm)->context.user_psize = (psize);	\
-	(mm)->context.sllp = SLB_VSID_USER | mmu_psize_defs[(psize)].sllp; \
-} while (0)
-#else /* CONFIG_PPC_STD_MMU_64 */
-#ifdef CONFIG_PPC_64K_PAGES
-#define get_slice_psize(mm, addr)	MMU_PAGE_64K
-#else /* CONFIG_PPC_64K_PAGES */
-#define get_slice_psize(mm, addr)	MMU_PAGE_4K
-#endif /* !CONFIG_PPC_64K_PAGES */
-#define slice_set_user_psize(mm, psize)	do { BUG(); } while(0)
-#endif /* !CONFIG_PPC_STD_MMU_64 */
-
-#define slice_set_range_psize(mm, start, len, psize)	\
-	slice_set_user_psize((mm), (psize))
-#endif /* CONFIG_PPC_MM_SLICES */
-
-#ifdef CONFIG_HUGETLB_PAGE
-
-#ifdef CONFIG_PPC_MM_SLICES
-#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
-#endif
-
-#endif /* !CONFIG_HUGETLB_PAGE */
-
 #define VM_DATA_DEFAULT_FLAGS \
 	(is_32bit_task() ? \
 	 VM_DATA_DEFAULT_FLAGS32 : VM_DATA_DEFAULT_FLAGS64)
diff --git a/arch/powerpc/include/asm/slice.h b/arch/powerpc/include/asm/slice.h
new file mode 100644
index 000000000000..17c5a5d8c418
--- /dev/null
+++ b/arch/powerpc/include/asm/slice.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_POWERPC_SLICE_H
+#define _ASM_POWERPC_SLICE_H
+
+#ifdef CONFIG_PPC_BOOK3S_64
+#include <asm/book3s/64/slice.h>
+#else
+#include <asm/nohash/64/slice.h>
+#endif
+
+#ifdef CONFIG_PPC_MM_SLICES
+
+#ifdef CONFIG_HUGETLB_PAGE
+#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
+#endif
+#define HAVE_ARCH_UNMAPPED_AREA
+#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
+
+#ifndef __ASSEMBLY__
+
+struct mm_struct;
+
+unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
+				      unsigned long flags, unsigned int psize,
+				      int topdown);
+
+unsigned int get_slice_psize(struct mm_struct *mm, unsigned long addr);
+
+void slice_set_user_psize(struct mm_struct *mm, unsigned int psize);
+void slice_set_range_psize(struct mm_struct *mm, unsigned long start,
+			   unsigned long len, unsigned int psize);
+#endif /* __ASSEMBLY__ */
+
+#else /* CONFIG_PPC_MM_SLICES */
+
+#define slice_set_range_psize(mm, start, len, psize)	\
+	slice_set_user_psize((mm), (psize))
+#endif /* CONFIG_PPC_MM_SLICES */
+
+#endif /* _ASM_POWERPC_SLICE_H */
-- 
2.13.3

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 4.14 3/4] powerpc/mm/slice: Enhance for supporting PPC32
  2018-05-31  8:54 [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy Christophe Leroy
  2018-05-31  8:54 ` [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices Christophe Leroy
@ 2018-05-31  8:54 ` Christophe Leroy
  2018-05-31  8:54 ` [PATCH 4.14 4/4] powerpc/mm/slice: Fix hugepage allocation at hint address on 8xx Christophe Leroy
  2 siblings, 0 replies; 19+ messages in thread
From: Christophe Leroy @ 2018-05-31  8:54 UTC (permalink / raw)
  To: stable, Greg Kroah-Hartman; +Cc: linux-kernel, linuxppc-dev

[ Upstream commit db3a528db41caaa6dfd4c64e9f5efb1c81a80467 ]

In preparation for the following patch which will fix an issue on
the 8xx by re-using the 'slices', this patch enhances the
'slices' implementation to support 32 bits CPUs.

On PPC32, the address space is limited to 4Gbytes, hence only the low
slices will be used.

The high slices use bitmaps. As bitmap functions are not prepared to
handle bitmaps of size 0, this patch ensures that bitmap functions
are called only when SLICE_NUM_HIGH is not nul.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/powerpc/include/asm/nohash/32/slice.h | 18 +++++++++++++++
 arch/powerpc/include/asm/slice.h           |  4 +++-
 arch/powerpc/mm/slice.c                    | 37 +++++++++++++++++++++++-------
 3 files changed, 50 insertions(+), 9 deletions(-)
 create mode 100644 arch/powerpc/include/asm/nohash/32/slice.h

diff --git a/arch/powerpc/include/asm/nohash/32/slice.h b/arch/powerpc/include/asm/nohash/32/slice.h
new file mode 100644
index 000000000000..95d532e18092
--- /dev/null
+++ b/arch/powerpc/include/asm/nohash/32/slice.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_POWERPC_NOHASH_32_SLICE_H
+#define _ASM_POWERPC_NOHASH_32_SLICE_H
+
+#ifdef CONFIG_PPC_MM_SLICES
+
+#define SLICE_LOW_SHIFT		28
+#define SLICE_LOW_TOP		(0x100000000ull)
+#define SLICE_NUM_LOW		(SLICE_LOW_TOP >> SLICE_LOW_SHIFT)
+#define GET_LOW_SLICE_INDEX(addr)	((addr) >> SLICE_LOW_SHIFT)
+
+#define SLICE_HIGH_SHIFT	0
+#define SLICE_NUM_HIGH		0ul
+#define GET_HIGH_SLICE_INDEX(addr)	(addr & 0)
+
+#endif /* CONFIG_PPC_MM_SLICES */
+
+#endif /* _ASM_POWERPC_NOHASH_32_SLICE_H */
diff --git a/arch/powerpc/include/asm/slice.h b/arch/powerpc/include/asm/slice.h
index 17c5a5d8c418..172711fadb1c 100644
--- a/arch/powerpc/include/asm/slice.h
+++ b/arch/powerpc/include/asm/slice.h
@@ -4,8 +4,10 @@
 
 #ifdef CONFIG_PPC_BOOK3S_64
 #include <asm/book3s/64/slice.h>
-#else
+#elif defined(CONFIG_PPC64)
 #include <asm/nohash/64/slice.h>
+#elif defined(CONFIG_PPC_MMU_NOHASH)
+#include <asm/nohash/32/slice.h>
 #endif
 
 #ifdef CONFIG_PPC_MM_SLICES
diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
index b79897bb89e3..8baaa6c6f21c 100644
--- a/arch/powerpc/mm/slice.c
+++ b/arch/powerpc/mm/slice.c
@@ -73,10 +73,12 @@ static void slice_range_to_mask(unsigned long start, unsigned long len,
 	unsigned long end = start + len - 1;
 
 	ret->low_slices = 0;
-	bitmap_zero(ret->high_slices, SLICE_NUM_HIGH);
+	if (SLICE_NUM_HIGH)
+		bitmap_zero(ret->high_slices, SLICE_NUM_HIGH);
 
 	if (start < SLICE_LOW_TOP) {
-		unsigned long mend = min(end, (SLICE_LOW_TOP - 1));
+		unsigned long mend = min(end,
+					 (unsigned long)(SLICE_LOW_TOP - 1));
 
 		ret->low_slices = (1u << (GET_LOW_SLICE_INDEX(mend) + 1))
 			- (1u << GET_LOW_SLICE_INDEX(start));
@@ -113,11 +115,13 @@ static int slice_high_has_vma(struct mm_struct *mm, unsigned long slice)
 	unsigned long start = slice << SLICE_HIGH_SHIFT;
 	unsigned long end = start + (1ul << SLICE_HIGH_SHIFT);
 
+#ifdef CONFIG_PPC64
 	/* Hack, so that each addresses is controlled by exactly one
 	 * of the high or low area bitmaps, the first high area starts
 	 * at 4GB, not 0 */
 	if (start == 0)
 		start = SLICE_LOW_TOP;
+#endif
 
 	return !slice_area_is_free(mm, start, end - start);
 }
@@ -127,7 +131,8 @@ static void slice_mask_for_free(struct mm_struct *mm, struct slice_mask *ret)
 	unsigned long i;
 
 	ret->low_slices = 0;
-	bitmap_zero(ret->high_slices, SLICE_NUM_HIGH);
+	if (SLICE_NUM_HIGH)
+		bitmap_zero(ret->high_slices, SLICE_NUM_HIGH);
 
 	for (i = 0; i < SLICE_NUM_LOW; i++)
 		if (!slice_low_has_vma(mm, i))
@@ -149,7 +154,8 @@ static void slice_mask_for_size(struct mm_struct *mm, int psize, struct slice_ma
 	u64 lpsizes;
 
 	ret->low_slices = 0;
-	bitmap_zero(ret->high_slices, SLICE_NUM_HIGH);
+	if (SLICE_NUM_HIGH)
+		bitmap_zero(ret->high_slices, SLICE_NUM_HIGH);
 
 	lpsizes = mm->context.low_slices_psize;
 	for (i = 0; i < SLICE_NUM_LOW; i++)
@@ -171,6 +177,10 @@ static int slice_check_fit(struct mm_struct *mm,
 	DECLARE_BITMAP(result, SLICE_NUM_HIGH);
 	unsigned long slice_count = GET_HIGH_SLICE_INDEX(mm->context.addr_limit);
 
+	if (!SLICE_NUM_HIGH)
+		return (mask.low_slices & available.low_slices) ==
+		       mask.low_slices;
+
 	bitmap_and(result, mask.high_slices,
 		   available.high_slices, slice_count);
 
@@ -180,6 +190,7 @@ static int slice_check_fit(struct mm_struct *mm,
 
 static void slice_flush_segments(void *parm)
 {
+#ifdef CONFIG_PPC64
 	struct mm_struct *mm = parm;
 	unsigned long flags;
 
@@ -191,6 +202,7 @@ static void slice_flush_segments(void *parm)
 	local_irq_save(flags);
 	slb_flush_and_rebolt();
 	local_irq_restore(flags);
+#endif
 }
 
 static void slice_convert(struct mm_struct *mm, struct slice_mask mask, int psize)
@@ -380,6 +392,8 @@ static unsigned long slice_find_area(struct mm_struct *mm, unsigned long len,
 static inline void slice_or_mask(struct slice_mask *dst, struct slice_mask *src)
 {
 	dst->low_slices |= src->low_slices;
+	if (!SLICE_NUM_HIGH)
+		return;
 	bitmap_or(dst->high_slices, dst->high_slices, src->high_slices,
 		  SLICE_NUM_HIGH);
 }
@@ -388,6 +402,8 @@ static inline void slice_andnot_mask(struct slice_mask *dst, struct slice_mask *
 {
 	dst->low_slices &= ~src->low_slices;
 
+	if (!SLICE_NUM_HIGH)
+		return;
 	bitmap_andnot(dst->high_slices, dst->high_slices, src->high_slices,
 		      SLICE_NUM_HIGH);
 }
@@ -437,14 +453,17 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
 	 * init different masks
 	 */
 	mask.low_slices = 0;
-	bitmap_zero(mask.high_slices, SLICE_NUM_HIGH);
 
 	/* silence stupid warning */;
 	potential_mask.low_slices = 0;
-	bitmap_zero(potential_mask.high_slices, SLICE_NUM_HIGH);
 
 	compat_mask.low_slices = 0;
-	bitmap_zero(compat_mask.high_slices, SLICE_NUM_HIGH);
+
+	if (SLICE_NUM_HIGH) {
+		bitmap_zero(mask.high_slices, SLICE_NUM_HIGH);
+		bitmap_zero(potential_mask.high_slices, SLICE_NUM_HIGH);
+		bitmap_zero(compat_mask.high_slices, SLICE_NUM_HIGH);
+	}
 
 	/* Sanity checks */
 	BUG_ON(mm->task_size == 0);
@@ -582,7 +601,9 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
  convert:
 	slice_andnot_mask(&mask, &good_mask);
 	slice_andnot_mask(&mask, &compat_mask);
-	if (mask.low_slices || !bitmap_empty(mask.high_slices, SLICE_NUM_HIGH)) {
+	if (mask.low_slices ||
+	    (SLICE_NUM_HIGH &&
+	     !bitmap_empty(mask.high_slices, SLICE_NUM_HIGH))) {
 		slice_convert(mm, mask, psize);
 		if (psize > MMU_PAGE_BASE)
 			on_each_cpu(slice_flush_segments, mm, 1);
-- 
2.13.3

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 4.14 4/4] powerpc/mm/slice: Fix hugepage allocation at hint address on 8xx
  2018-05-31  8:54 [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy Christophe Leroy
  2018-05-31  8:54 ` [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices Christophe Leroy
  2018-05-31  8:54 ` [PATCH 4.14 3/4] powerpc/mm/slice: Enhance for supporting PPC32 Christophe Leroy
@ 2018-05-31  8:54 ` Christophe Leroy
  2 siblings, 0 replies; 19+ messages in thread
From: Christophe Leroy @ 2018-05-31  8:54 UTC (permalink / raw)
  To: stable, Greg Kroah-Hartman; +Cc: linux-kernel, linuxppc-dev

[ Upstream commit aa0ab02ba992eb956934b21373e0138211486ddd ]

On the 8xx, the page size is set in the PMD entry and applies to
all pages of the page table pointed by the said PMD entry.

When an app has some regular pages allocated (e.g. see below) and tries
to mmap() a huge page at a hint address covered by the same PMD entry,
the kernel accepts the hint allthough the 8xx cannot handle different
page sizes in the same PMD entry.

10000000-10001000 r-xp 00000000 00:0f 2597 /root/malloc
10010000-10011000 rwxp 00000000 00:0f 2597 /root/malloc

mmap(0x10080000, 524288, PROT_READ|PROT_WRITE,
     MAP_PRIVATE|MAP_ANONYMOUS|0x40000, -1, 0) = 0x10080000

This results the app remaining forever in do_page_fault()/hugetlb_fault()
and when interrupting that app, we get the following warning:

[162980.035629] WARNING: CPU: 0 PID: 2777 at arch/powerpc/mm/hugetlbpage.c:354 hugetlb_free_pgd_range+0xc8/0x1e4
[162980.035699] CPU: 0 PID: 2777 Comm: malloc Tainted: G W       4.14.6 #85
[162980.035744] task: c67e2c00 task.stack: c668e000
[162980.035783] NIP:  c000fe18 LR: c00e1eec CTR: c00f90c0
[162980.035830] REGS: c668fc20 TRAP: 0700   Tainted: G W        (4.14.6)
[162980.035854] MSR:  00029032 <EE,ME,IR,DR,RI>  CR: 24044224 XER: 20000000
[162980.036003]
[162980.036003] GPR00: c00e1eec c668fcd0 c67e2c00 00000010 c6869410 10080000 00000000 77fb4000
[162980.036003] GPR08: ffff0001 0683c001 00000000 ffffff80 44028228 10018a34 00004008 418004fc
[162980.036003] GPR16: c668e000 00040100 c668e000 c06c0000 c668fe78 c668e000 c6835ba0 c668fd48
[162980.036003] GPR24: 00000000 73ffffff 74000000 00000001 77fb4000 100fffff 10100000 10100000
[162980.036743] NIP [c000fe18] hugetlb_free_pgd_range+0xc8/0x1e4
[162980.036839] LR [c00e1eec] free_pgtables+0x12c/0x150
[162980.036861] Call Trace:
[162980.036939] [c668fcd0] [c00f0774] unlink_anon_vmas+0x1c4/0x214 (unreliable)
[162980.037040] [c668fd10] [c00e1eec] free_pgtables+0x12c/0x150
[162980.037118] [c668fd40] [c00eabac] exit_mmap+0xe8/0x1b4
[162980.037210] [c668fda0] [c0019710] mmput.part.9+0x20/0xd8
[162980.037301] [c668fdb0] [c001ecb0] do_exit+0x1f0/0x93c
[162980.037386] [c668fe00] [c001f478] do_group_exit+0x40/0xcc
[162980.037479] [c668fe10] [c002a76c] get_signal+0x47c/0x614
[162980.037570] [c668fe70] [c0007840] do_signal+0x54/0x244
[162980.037654] [c668ff30] [c0007ae8] do_notify_resume+0x34/0x88
[162980.037744] [c668ff40] [c000dae8] do_user_signal+0x74/0xc4
[162980.037781] Instruction dump:
[162980.037821] 7fdff378 81370000 54a3463a 80890020 7d24182e 7c841a14 712a0004 4082ff94
[162980.038014] 2f890000 419e0010 712a0ff0 408200e0 <0fe00000> 54a9000a 7f984840 419d0094
[162980.038216] ---[ end trace c0ceeca8e7a5800a ]---
[162980.038754] BUG: non-zero nr_ptes on freeing mm: 1
[162985.363322] BUG: non-zero nr_ptes on freeing mm: -1

In order to fix this, this patch uses the address space "slices"
implemented for BOOK3S/64 and enhanced to support PPC32 by the
preceding patch.

This patch modifies the context.id on the 8xx to be in the range
[1:16] instead of [0:15] in order to identify context.id == 0 as
not initialised contexts as done on BOOK3S

This patch activates CONFIG_PPC_MM_SLICES when CONFIG_HUGETLB_PAGE is
selected for the 8xx

Alltough we could in theory have as many slices as PMD entries, the
current slices implementation limits the number of low slices to 16.
This limitation is not preventing us to fix the initial issue allthough
it is suboptimal. It will be cured in a subsequent patch.

Fixes: 4b91428699477 ("powerpc/8xx: Implement support of hugepages")
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/powerpc/include/asm/mmu-8xx.h     |  6 ++++++
 arch/powerpc/kernel/setup-common.c     |  2 ++
 arch/powerpc/mm/8xx_mmu.c              |  2 +-
 arch/powerpc/mm/hugetlbpage.c          |  2 ++
 arch/powerpc/mm/mmu_context_nohash.c   | 18 ++++++++++++++++--
 arch/powerpc/platforms/Kconfig.cputype |  1 +
 6 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/include/asm/mmu-8xx.h b/arch/powerpc/include/asm/mmu-8xx.h
index 5bb3dbede41a..1325e5b5f680 100644
--- a/arch/powerpc/include/asm/mmu-8xx.h
+++ b/arch/powerpc/include/asm/mmu-8xx.h
@@ -169,6 +169,12 @@ typedef struct {
 	unsigned int id;
 	unsigned int active;
 	unsigned long vdso_base;
+#ifdef CONFIG_PPC_MM_SLICES
+	u16 user_psize;		/* page size index */
+	u64 low_slices_psize;	/* page size encodings */
+	unsigned char high_slices_psize[0];
+	unsigned long addr_limit;
+#endif
 } mm_context_t;
 
 #define PHYS_IMMR_BASE (mfspr(SPRN_IMMR) & 0xfff80000)
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index b4fcb54b9686..008447664643 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -915,6 +915,8 @@ void __init setup_arch(char **cmdline_p)
 #ifdef CONFIG_PPC_MM_SLICES
 #ifdef CONFIG_PPC64
 	init_mm.context.addr_limit = DEFAULT_MAP_WINDOW_USER64;
+#elif defined(CONFIG_PPC_8xx)
+	init_mm.context.addr_limit = DEFAULT_MAP_WINDOW;
 #else
 #error	"context.addr_limit not initialized."
 #endif
diff --git a/arch/powerpc/mm/8xx_mmu.c b/arch/powerpc/mm/8xx_mmu.c
index f29212e40f40..0be77709446c 100644
--- a/arch/powerpc/mm/8xx_mmu.c
+++ b/arch/powerpc/mm/8xx_mmu.c
@@ -192,7 +192,7 @@ void set_context(unsigned long id, pgd_t *pgd)
 	mtspr(SPRN_M_TW, __pa(pgd) - offset);
 
 	/* Update context */
-	mtspr(SPRN_M_CASID, id);
+	mtspr(SPRN_M_CASID, id - 1);
 	/* sync */
 	mb();
 }
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 1571a498a33f..4c9e5f9c7a44 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -552,9 +552,11 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
 	struct hstate *hstate = hstate_file(file);
 	int mmu_psize = shift_to_mmu_psize(huge_page_shift(hstate));
 
+#ifdef CONFIG_PPC_RADIX_MMU
 	if (radix_enabled())
 		return radix__hugetlb_get_unmapped_area(file, addr, len,
 						       pgoff, flags);
+#endif
 	return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1);
 }
 #endif
diff --git a/arch/powerpc/mm/mmu_context_nohash.c b/arch/powerpc/mm/mmu_context_nohash.c
index 4554d6527682..e2b28b3a512e 100644
--- a/arch/powerpc/mm/mmu_context_nohash.c
+++ b/arch/powerpc/mm/mmu_context_nohash.c
@@ -331,6 +331,20 @@ int init_new_context(struct task_struct *t, struct mm_struct *mm)
 {
 	pr_hard("initing context for mm @%p\n", mm);
 
+#ifdef	CONFIG_PPC_MM_SLICES
+	if (!mm->context.addr_limit)
+		mm->context.addr_limit = DEFAULT_MAP_WINDOW;
+
+	/*
+	 * We have MMU_NO_CONTEXT set to be ~0. Hence check
+	 * explicitly against context.id == 0. This ensures that we properly
+	 * initialize context slice details for newly allocated mm's (which will
+	 * have id == 0) and don't alter context slice inherited via fork (which
+	 * will have id != 0).
+	 */
+	if (mm->context.id == 0)
+		slice_set_user_psize(mm, mmu_virtual_psize);
+#endif
 	mm->context.id = MMU_NO_CONTEXT;
 	mm->context.active = 0;
 	return 0;
@@ -428,8 +442,8 @@ void __init mmu_context_init(void)
 	 *      -- BenH
 	 */
 	if (mmu_has_feature(MMU_FTR_TYPE_8xx)) {
-		first_context = 0;
-		last_context = 15;
+		first_context = 1;
+		last_context = 16;
 		no_selective_tlbil = true;
 	} else if (mmu_has_feature(MMU_FTR_TYPE_47x)) {
 		first_context = 1;
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
index a78f255111f2..3ce376b42330 100644
--- a/arch/powerpc/platforms/Kconfig.cputype
+++ b/arch/powerpc/platforms/Kconfig.cputype
@@ -325,6 +325,7 @@ config PPC_BOOK3E_MMU
 config PPC_MM_SLICES
 	bool
 	default y if PPC_STD_MMU_64
+	default y if PPC_8xx && HUGETLB_PAGE
 	default n
 
 config PPC_HAVE_PMU_SUPPORT
-- 
2.13.3

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices
  2018-05-31  8:54 ` [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices Christophe Leroy
@ 2018-06-02 13:21   ` Greg Kroah-Hartman
  2018-06-02 20:55       ` Christophe Leroy
  0 siblings, 1 reply; 19+ messages in thread
From: Greg Kroah-Hartman @ 2018-06-02 13:21 UTC (permalink / raw)
  To: Christophe Leroy; +Cc: stable, linux-kernel, linuxppc-dev

On Thu, May 31, 2018 at 08:54:52AM +0000, Christophe Leroy wrote:
> [ Upstream commit a3286f05bc5a5bc7fc73a9783ec89de78fcd07f8 ]
> 
> In preparation for the following patch which will enhance 'slices'
> for supporting PPC32 in order to fix an issue on hugepages on 8xx,
> this patch takes out of page*.h all bits related to 'slices' and put
> them into newly created slice.h header files.
> While common parts go into asm/slice.h, subarch specific
> parts go into respective books3s/64/slice.c and nohash/64/slice.c
> 'slices'
> 
> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
> Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> ---
>  arch/powerpc/include/asm/book3s/64/slice.h | 27 ++++++++++++++
>  arch/powerpc/include/asm/nohash/64/slice.h | 12 ++++++
>  arch/powerpc/include/asm/page.h            |  1 +
>  arch/powerpc/include/asm/page_64.h         | 59 ------------------------------
>  arch/powerpc/include/asm/slice.h           | 40 ++++++++++++++++++++
>  5 files changed, 80 insertions(+), 59 deletions(-)
>  create mode 100644 arch/powerpc/include/asm/book3s/64/slice.h
>  create mode 100644 arch/powerpc/include/asm/nohash/64/slice.h
>  create mode 100644 arch/powerpc/include/asm/slice.h

This patch does not apply :(

Can you fix this series up and resend the whole thing?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices
  2018-06-02 13:21   ` Greg Kroah-Hartman
@ 2018-06-02 20:55       ` Christophe Leroy
  0 siblings, 0 replies; 19+ messages in thread
From: Christophe Leroy @ 2018-06-02 20:55 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: stable, linux-kernel, linuxppc-dev



On 06/02/2018 03:21 PM, Greg Kroah-Hartman wrote:
> On Thu, May 31, 2018 at 08:54:52AM +0000, Christophe Leroy wrote:
>> [ Upstream commit a3286f05bc5a5bc7fc73a9783ec89de78fcd07f8 ]
>>
>> In preparation for the following patch which will enhance 'slices'
>> for supporting PPC32 in order to fix an issue on hugepages on 8xx,
>> this patch takes out of page*.h all bits related to 'slices' and put
>> them into newly created slice.h header files.
>> While common parts go into asm/slice.h, subarch specific
>> parts go into respective books3s/64/slice.c and nohash/64/slice.c
>> 'slices'
>>
>> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
>> Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
>> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
>> ---
>>   arch/powerpc/include/asm/book3s/64/slice.h | 27 ++++++++++++++
>>   arch/powerpc/include/asm/nohash/64/slice.h | 12 ++++++
>>   arch/powerpc/include/asm/page.h            |  1 +
>>   arch/powerpc/include/asm/page_64.h         | 59 ------------------------------
>>   arch/powerpc/include/asm/slice.h           | 40 ++++++++++++++++++++
>>   5 files changed, 80 insertions(+), 59 deletions(-)
>>   create mode 100644 arch/powerpc/include/asm/book3s/64/slice.h
>>   create mode 100644 arch/powerpc/include/asm/nohash/64/slice.h
>>   create mode 100644 arch/powerpc/include/asm/slice.h
> 
> This patch does not apply :(

I tried again, it applies well for me:

[root@localhost linux-stable]# git checkout v4.14.47 -b 4.14.47
Checking out files: 100% (27111/27111), done.
Switched to a new branch '4.14.47'
[root@localhost linux-stable]# git am 
/root/Downloads/4.14-1-4-powerpc-mm-slice-Remove-intermediate-bitmap-copy.patch 

Applying: powerpc/mm/slice: Remove intermediate bitmap copy
Applying: powerpc/mm/slice: create header files dedicated to slices
Applying: powerpc/mm/slice: Enhance for supporting PPC32
Applying: powerpc/mm/slice: Fix hugepage allocation at hint address on 8xx
[root@localhost linux-stable]#

> 
> Can you fix this series up and resend the whole thing?

Is there any conflicting patch in the queue ?
What should I rebase on ?

Thanks,
Christophe

> 
> thanks,
> 
> greg k-h
> 

---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices
@ 2018-06-02 20:55       ` Christophe Leroy
  0 siblings, 0 replies; 19+ messages in thread
From: Christophe Leroy @ 2018-06-02 20:55 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: stable, linux-kernel, linuxppc-dev



On 06/02/2018 03:21 PM, Greg Kroah-Hartman wrote:
> On Thu, May 31, 2018 at 08:54:52AM +0000, Christophe Leroy wrote:
>> [ Upstream commit a3286f05bc5a5bc7fc73a9783ec89de78fcd07f8 ]
>>
>> In preparation for the following patch which will enhance 'slices'
>> for supporting PPC32 in order to fix an issue on hugepages on 8xx,
>> this patch takes out of page*.h all bits related to 'slices' and put
>> them into newly created slice.h header files.
>> While common parts go into asm/slice.h, subarch specific
>> parts go into respective books3s/64/slice.c and nohash/64/slice.c
>> 'slices'
>>
>> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
>> Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
>> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
>> ---
>>   arch/powerpc/include/asm/book3s/64/slice.h | 27 ++++++++++++++
>>   arch/powerpc/include/asm/nohash/64/slice.h | 12 ++++++
>>   arch/powerpc/include/asm/page.h            |  1 +
>>   arch/powerpc/include/asm/page_64.h         | 59 ----------------------=
--------
>>   arch/powerpc/include/asm/slice.h           | 40 ++++++++++++++++++++
>>   5 files changed, 80 insertions(+), 59 deletions(-)
>>   create mode 100644 arch/powerpc/include/asm/book3s/64/slice.h
>>   create mode 100644 arch/powerpc/include/asm/nohash/64/slice.h
>>   create mode 100644 arch/powerpc/include/asm/slice.h
> 
> This patch does not apply :(

I tried again, it applies well for me:

[root@localhost linux-stable]# git checkout v4.14.47 -b 4.14.47
Checking out files: 100% (27111/27111), done.
Switched to a new branch '4.14.47'
[root@localhost linux-stable]# git am 
/root/Downloads/4.14-1-4-powerpc-mm-slice-Remove-intermediate-bitmap-copy.p=
atch 

Applying: powerpc/mm/slice: Remove intermediate bitmap copy
Applying: powerpc/mm/slice: create header files dedicated to slices
Applying: powerpc/mm/slice: Enhance for supporting PPC32
Applying: powerpc/mm/slice: Fix hugepage allocation at hint address on 8xx
[root@localhost linux-stable]#

> 
> Can you fix this series up and resend the whole thing?

Is there any conflicting patch in the queue ?
What should I rebase on ?

Thanks,
Christophe

> 
> thanks,
> 
> greg k-h
> 

---
L'absence de virus dans ce courrier =C3=A9lectronique a =C3=A9t=C3=A9 v=C3=
=A9rifi=C3=A9e par le logiciel antivirus Avast.
https://www.avast.com/antivirus

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices
  2018-06-02 20:55       ` Christophe Leroy
  (?)
@ 2018-06-03  9:21       ` Greg Kroah-Hartman
  2018-06-03  9:23         ` Greg Kroah-Hartman
  -1 siblings, 1 reply; 19+ messages in thread
From: Greg Kroah-Hartman @ 2018-06-03  9:21 UTC (permalink / raw)
  To: Christophe Leroy; +Cc: stable, linux-kernel, linuxppc-dev

On Sat, Jun 02, 2018 at 10:55:31PM +0200, Christophe Leroy wrote:
> 
> 
> On 06/02/2018 03:21 PM, Greg Kroah-Hartman wrote:
> > On Thu, May 31, 2018 at 08:54:52AM +0000, Christophe Leroy wrote:
> > > [ Upstream commit a3286f05bc5a5bc7fc73a9783ec89de78fcd07f8 ]
> > > 
> > > In preparation for the following patch which will enhance 'slices'
> > > for supporting PPC32 in order to fix an issue on hugepages on 8xx,
> > > this patch takes out of page*.h all bits related to 'slices' and put
> > > them into newly created slice.h header files.
> > > While common parts go into asm/slice.h, subarch specific
> > > parts go into respective books3s/64/slice.c and nohash/64/slice.c
> > > 'slices'
> > > 
> > > Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
> > > Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
> > > Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> > > ---
> > >   arch/powerpc/include/asm/book3s/64/slice.h | 27 ++++++++++++++
> > >   arch/powerpc/include/asm/nohash/64/slice.h | 12 ++++++
> > >   arch/powerpc/include/asm/page.h            |  1 +
> > >   arch/powerpc/include/asm/page_64.h         | 59 ------------------------------
> > >   arch/powerpc/include/asm/slice.h           | 40 ++++++++++++++++++++
> > >   5 files changed, 80 insertions(+), 59 deletions(-)
> > >   create mode 100644 arch/powerpc/include/asm/book3s/64/slice.h
> > >   create mode 100644 arch/powerpc/include/asm/nohash/64/slice.h
> > >   create mode 100644 arch/powerpc/include/asm/slice.h
> > 
> > This patch does not apply :(
> 
> I tried again, it applies well for me:
> 
> [root@localhost linux-stable]# git checkout v4.14.47 -b 4.14.47
> Checking out files: 100% (27111/27111), done.
> Switched to a new branch '4.14.47'
> [root@localhost linux-stable]# git am /root/Downloads/4.14-1-4-powerpc-mm-slice-Remove-intermediate-bitmap-copy.patch
> 
> Applying: powerpc/mm/slice: Remove intermediate bitmap copy
> Applying: powerpc/mm/slice: create header files dedicated to slices
> Applying: powerpc/mm/slice: Enhance for supporting PPC32
> Applying: powerpc/mm/slice: Fix hugepage allocation at hint address on 8xx
> [root@localhost linux-stable]#
> 
> > 
> > Can you fix this series up and resend the whole thing?
> 
> Is there any conflicting patch in the queue ?
> What should I rebase on ?

Ah, the problem is I was taking the upstream version of this patch, not
your backported one.  Next time be a bit more specific and say you
changed something here, otherwise I will always default to what is in
Linus's tree.

Let me go work on this again...

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices
  2018-06-03  9:21       ` Greg Kroah-Hartman
@ 2018-06-03  9:23         ` Greg Kroah-Hartman
  0 siblings, 0 replies; 19+ messages in thread
From: Greg Kroah-Hartman @ 2018-06-03  9:23 UTC (permalink / raw)
  To: Christophe Leroy; +Cc: stable, linux-kernel, linuxppc-dev

On Sun, Jun 03, 2018 at 11:21:45AM +0200, Greg Kroah-Hartman wrote:
> On Sat, Jun 02, 2018 at 10:55:31PM +0200, Christophe Leroy wrote:
> > 
> > 
> > On 06/02/2018 03:21 PM, Greg Kroah-Hartman wrote:
> > > On Thu, May 31, 2018 at 08:54:52AM +0000, Christophe Leroy wrote:
> > > > [ Upstream commit a3286f05bc5a5bc7fc73a9783ec89de78fcd07f8 ]
> > > > 
> > > > In preparation for the following patch which will enhance 'slices'
> > > > for supporting PPC32 in order to fix an issue on hugepages on 8xx,
> > > > this patch takes out of page*.h all bits related to 'slices' and put
> > > > them into newly created slice.h header files.
> > > > While common parts go into asm/slice.h, subarch specific
> > > > parts go into respective books3s/64/slice.c and nohash/64/slice.c
> > > > 'slices'
> > > > 
> > > > Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
> > > > Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
> > > > Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> > > > ---
> > > >   arch/powerpc/include/asm/book3s/64/slice.h | 27 ++++++++++++++
> > > >   arch/powerpc/include/asm/nohash/64/slice.h | 12 ++++++
> > > >   arch/powerpc/include/asm/page.h            |  1 +
> > > >   arch/powerpc/include/asm/page_64.h         | 59 ------------------------------
> > > >   arch/powerpc/include/asm/slice.h           | 40 ++++++++++++++++++++
> > > >   5 files changed, 80 insertions(+), 59 deletions(-)
> > > >   create mode 100644 arch/powerpc/include/asm/book3s/64/slice.h
> > > >   create mode 100644 arch/powerpc/include/asm/nohash/64/slice.h
> > > >   create mode 100644 arch/powerpc/include/asm/slice.h
> > > 
> > > This patch does not apply :(
> > 
> > I tried again, it applies well for me:
> > 
> > [root@localhost linux-stable]# git checkout v4.14.47 -b 4.14.47
> > Checking out files: 100% (27111/27111), done.
> > Switched to a new branch '4.14.47'
> > [root@localhost linux-stable]# git am /root/Downloads/4.14-1-4-powerpc-mm-slice-Remove-intermediate-bitmap-copy.patch
> > 
> > Applying: powerpc/mm/slice: Remove intermediate bitmap copy
> > Applying: powerpc/mm/slice: create header files dedicated to slices
> > Applying: powerpc/mm/slice: Enhance for supporting PPC32
> > Applying: powerpc/mm/slice: Fix hugepage allocation at hint address on 8xx
> > [root@localhost linux-stable]#
> > 
> > > 
> > > Can you fix this series up and resend the whole thing?
> > 
> > Is there any conflicting patch in the queue ?
> > What should I rebase on ?
> 
> Ah, the problem is I was taking the upstream version of this patch, not
> your backported one.  Next time be a bit more specific and say you
> changed something here, otherwise I will always default to what is in
> Linus's tree.
> 
> Let me go work on this again...

Ok, that worked, all now queued up properly, sorry for the confusion.

greg k-h

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
  2018-03-10 19:47           ` Greg Kroah-Hartman
@ 2018-03-13 13:24             ` Michael Ellerman
  -1 siblings, 0 replies; 19+ messages in thread
From: Michael Ellerman @ 2018-03-13 13:24 UTC (permalink / raw)
  To: Greg Kroah-Hartman, christophe leroy; +Cc: linuxppc-dev, linux-kernel, stable

Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes:
> On Sat, Mar 10, 2018 at 05:14:22PM +0100, christophe leroy wrote:
>> Le 10/03/2018 à 15:52, Greg Kroah-Hartman a écrit :
>> > On Sat, Mar 10, 2018 at 08:27:54AM +0100, christophe leroy wrote:
>> > > Le 10/03/2018 à 01:10, Greg Kroah-Hartman a écrit :
>> > > > On Fri, Mar 09, 2018 at 04:48:59PM +0100, Christophe Leroy wrote:
>> > > > > Upstream 326691ad4f179e6edc7eb1271e618dd673e4736d
>> > > > 
>> > > > There is no such git commit id in Linus's tree :(
>> > > > 
>> > > > Please fix up and resend the series.
>> > > 
>> > > I checked again, it is there
>> > > 
>> > > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/powerpc/mm/slice.c?h=next-20180309&id=326691ad4f179e6edc7eb1271e618dd673e4736d
>> > 
>> > That is linux-next, which has everything and the kitchen sink.  It is
>> > not Linus's tree.  Please wait for these things to be merged into
>> > Linus's tree before asking for the to be merged into the stable tree.
>> > That's a requirement.
>> 
>> Oops, sorry, I thought everything on kernel.org was official.
>
> That would be a whole lot of "official" :)
>
> Please read:
>     https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> for what the rules are here, if you haven't already.
>
>> Once it is in, do I resend the patches or do I just ping you ?
>
> You would need to resend the patches (if they need backporting
> manually), or just send a list of the git commit ids that are needed to
> be applied (usually easier.)
>
> Also, why were these patches not tagged with the stable tag to start
> with?  That way they would be automatically included in the stable tree
> when they hit Linus's tree.

Because they're fairly large and invasive and not well tested on other
platforms, so the maintainer is not comfortable with them going straight
to stable :)

Once they've had some testing in Linus' tree at least, then we'll ask
for a backport if there's no issues.

Sorry for the confusion.

cheers

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
@ 2018-03-13 13:24             ` Michael Ellerman
  0 siblings, 0 replies; 19+ messages in thread
From: Michael Ellerman @ 2018-03-13 13:24 UTC (permalink / raw)
  To: Greg Kroah-Hartman, christophe leroy; +Cc: linuxppc-dev, linux-kernel, stable

Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes:
> On Sat, Mar 10, 2018 at 05:14:22PM +0100, christophe leroy wrote:
>> Le 10/03/2018 =C3=A0 15:52, Greg Kroah-Hartman a =C3=A9crit=C2=A0:
>> > On Sat, Mar 10, 2018 at 08:27:54AM +0100, christophe leroy wrote:
>> > > Le 10/03/2018 =C3=A0 01:10, Greg Kroah-Hartman a =C3=A9crit=C2=A0:
>> > > > On Fri, Mar 09, 2018 at 04:48:59PM +0100, Christophe Leroy wrote:
>> > > > > Upstream 326691ad4f179e6edc7eb1271e618dd673e4736d
>> > > >=20
>> > > > There is no such git commit id in Linus's tree :(
>> > > >=20
>> > > > Please fix up and resend the series.
>> > >=20
>> > > I checked again, it is there
>> > >=20
>> > > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/=
commit/arch/powerpc/mm/slice.c?h=3Dnext-20180309&id=3D326691ad4f179e6edc7eb=
1271e618dd673e4736d
>> >=20
>> > That is linux-next, which has everything and the kitchen sink.  It is
>> > not Linus's tree.  Please wait for these things to be merged into
>> > Linus's tree before asking for the to be merged into the stable tree.
>> > That's a requirement.
>>=20
>> Oops, sorry, I thought everything on kernel.org was official.
>
> That would be a whole lot of "official" :)
>
> Please read:
>     https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.ht=
ml
> for what the rules are here, if you haven't already.
>
>> Once it is in, do I resend the patches or do I just ping you ?
>
> You would need to resend the patches (if they need backporting
> manually), or just send a list of the git commit ids that are needed to
> be applied (usually easier.)
>
> Also, why were these patches not tagged with the stable tag to start
> with?  That way they would be automatically included in the stable tree
> when they hit Linus's tree.

Because they're fairly large and invasive and not well tested on other
platforms, so the maintainer is not comfortable with them going straight
to stable :)

Once they've had some testing in Linus' tree at least, then we'll ask
for a backport if there's no issues.

Sorry for the confusion.

cheers

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
  2018-03-10 16:14       ` christophe leroy
@ 2018-03-10 19:47           ` Greg Kroah-Hartman
  0 siblings, 0 replies; 19+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-10 19:47 UTC (permalink / raw)
  To: christophe leroy; +Cc: stable, linux-kernel, linuxppc-dev

On Sat, Mar 10, 2018 at 05:14:22PM +0100, christophe leroy wrote:
> 
> 
> Le 10/03/2018 à 15:52, Greg Kroah-Hartman a écrit :
> > On Sat, Mar 10, 2018 at 08:27:54AM +0100, christophe leroy wrote:
> > > 
> > > 
> > > Le 10/03/2018 à 01:10, Greg Kroah-Hartman a écrit :
> > > > On Fri, Mar 09, 2018 at 04:48:59PM +0100, Christophe Leroy wrote:
> > > > > Upstream 326691ad4f179e6edc7eb1271e618dd673e4736d
> > > > 
> > > > There is no such git commit id in Linus's tree :(
> > > > 
> > > > Please fix up and resend the series.
> > > 
> > > I checked again, it is there
> > > 
> > > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/powerpc/mm/slice.c?h=next-20180309&id=326691ad4f179e6edc7eb1271e618dd673e4736d
> > 
> > That is linux-next, which has everything and the kitchen sink.  It is
> > not Linus's tree.  Please wait for these things to be merged into
> > Linus's tree before asking for the to be merged into the stable tree.
> > That's a requirement.
> > 
> 
> Oops, sorry, I thought everything on kernel.org was official.

That would be a whole lot of "official" :)

Please read:
    https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for what the rules are here, if you haven't already.

> Once it is in, do I resend the patches or do I just ping you ?

You would need to resend the patches (if they need backporting
manually), or just send a list of the git commit ids that are needed to
be applied (usually easier.)

Also, why were these patches not tagged with the stable tag to start
with?  That way they would be automatically included in the stable tree
when they hit Linus's tree.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
@ 2018-03-10 19:47           ` Greg Kroah-Hartman
  0 siblings, 0 replies; 19+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-10 19:47 UTC (permalink / raw)
  To: christophe leroy; +Cc: stable, linux-kernel, linuxppc-dev

On Sat, Mar 10, 2018 at 05:14:22PM +0100, christophe leroy wrote:
> 
> 
> Le 10/03/2018 � 15:52, Greg Kroah-Hartman a �crit�:
> > On Sat, Mar 10, 2018 at 08:27:54AM +0100, christophe leroy wrote:
> > > 
> > > 
> > > Le 10/03/2018 � 01:10, Greg Kroah-Hartman a �crit�:
> > > > On Fri, Mar 09, 2018 at 04:48:59PM +0100, Christophe Leroy wrote:
> > > > > Upstream 326691ad4f179e6edc7eb1271e618dd673e4736d
> > > > 
> > > > There is no such git commit id in Linus's tree :(
> > > > 
> > > > Please fix up and resend the series.
> > > 
> > > I checked again, it is there
> > > 
> > > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/powerpc/mm/slice.c?h=next-20180309&id=326691ad4f179e6edc7eb1271e618dd673e4736d
> > 
> > That is linux-next, which has everything and the kitchen sink.  It is
> > not Linus's tree.  Please wait for these things to be merged into
> > Linus's tree before asking for the to be merged into the stable tree.
> > That's a requirement.
> > 
> 
> Oops, sorry, I thought everything on kernel.org was official.

That would be a whole lot of "official" :)

Please read:
    https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for what the rules are here, if you haven't already.

> Once it is in, do I resend the patches or do I just ping you ?

You would need to resend the patches (if they need backporting
manually), or just send a list of the git commit ids that are needed to
be applied (usually easier.)

Also, why were these patches not tagged with the stable tag to start
with?  That way they would be automatically included in the stable tree
when they hit Linus's tree.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
  2018-03-10 14:52       ` Greg Kroah-Hartman
  (?)
@ 2018-03-10 16:14       ` christophe leroy
  2018-03-10 19:47           ` Greg Kroah-Hartman
  -1 siblings, 1 reply; 19+ messages in thread
From: christophe leroy @ 2018-03-10 16:14 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: stable, linux-kernel, linuxppc-dev



Le 10/03/2018 à 15:52, Greg Kroah-Hartman a écrit :
> On Sat, Mar 10, 2018 at 08:27:54AM +0100, christophe leroy wrote:
>>
>>
>> Le 10/03/2018 à 01:10, Greg Kroah-Hartman a écrit :
>>> On Fri, Mar 09, 2018 at 04:48:59PM +0100, Christophe Leroy wrote:
>>>> Upstream 326691ad4f179e6edc7eb1271e618dd673e4736d
>>>
>>> There is no such git commit id in Linus's tree :(
>>>
>>> Please fix up and resend the series.
>>
>> I checked again, it is there
>>
>> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/powerpc/mm/slice.c?h=next-20180309&id=326691ad4f179e6edc7eb1271e618dd673e4736d
> 
> That is linux-next, which has everything and the kitchen sink.  It is
> not Linus's tree.  Please wait for these things to be merged into
> Linus's tree before asking for the to be merged into the stable tree.
> That's a requirement.
> 

Oops, sorry, I thought everything on kernel.org was official.

Once it is in, do I resend the patches or do I just ping you ?

Thanks
Christophe

---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
  2018-03-10  7:27   ` christophe leroy
@ 2018-03-10 14:52       ` Greg Kroah-Hartman
  0 siblings, 0 replies; 19+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-10 14:52 UTC (permalink / raw)
  To: christophe leroy; +Cc: stable, linux-kernel, linuxppc-dev

On Sat, Mar 10, 2018 at 08:27:54AM +0100, christophe leroy wrote:
> 
> 
> Le 10/03/2018 à 01:10, Greg Kroah-Hartman a écrit :
> > On Fri, Mar 09, 2018 at 04:48:59PM +0100, Christophe Leroy wrote:
> > > Upstream 326691ad4f179e6edc7eb1271e618dd673e4736d
> > 
> > There is no such git commit id in Linus's tree :(
> > 
> > Please fix up and resend the series.
> 
> I checked again, it is there
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/powerpc/mm/slice.c?h=next-20180309&id=326691ad4f179e6edc7eb1271e618dd673e4736d

That is linux-next, which has everything and the kitchen sink.  It is
not Linus's tree.  Please wait for these things to be merged into
Linus's tree before asking for the to be merged into the stable tree.
That's a requirement.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
@ 2018-03-10 14:52       ` Greg Kroah-Hartman
  0 siblings, 0 replies; 19+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-10 14:52 UTC (permalink / raw)
  To: christophe leroy; +Cc: stable, linux-kernel, linuxppc-dev

On Sat, Mar 10, 2018 at 08:27:54AM +0100, christophe leroy wrote:
> 
> 
> Le 10/03/2018 � 01:10, Greg Kroah-Hartman a �crit�:
> > On Fri, Mar 09, 2018 at 04:48:59PM +0100, Christophe Leroy wrote:
> > > Upstream 326691ad4f179e6edc7eb1271e618dd673e4736d
> > 
> > There is no such git commit id in Linus's tree :(
> > 
> > Please fix up and resend the series.
> 
> I checked again, it is there
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/powerpc/mm/slice.c?h=next-20180309&id=326691ad4f179e6edc7eb1271e618dd673e4736d

That is linux-next, which has everything and the kitchen sink.  It is
not Linus's tree.  Please wait for these things to be merged into
Linus's tree before asking for the to be merged into the stable tree.
That's a requirement.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
  2018-03-10  0:10 ` Greg Kroah-Hartman
@ 2018-03-10  7:27   ` christophe leroy
  2018-03-10 14:52       ` Greg Kroah-Hartman
  0 siblings, 1 reply; 19+ messages in thread
From: christophe leroy @ 2018-03-10  7:27 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: stable, linux-kernel, linuxppc-dev



Le 10/03/2018 à 01:10, Greg Kroah-Hartman a écrit :
> On Fri, Mar 09, 2018 at 04:48:59PM +0100, Christophe Leroy wrote:
>> Upstream 326691ad4f179e6edc7eb1271e618dd673e4736d
> 
> There is no such git commit id in Linus's tree :(
> 
> Please fix up and resend the series.

I checked again, it is there

https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/powerpc/mm/slice.c?h=next-20180309&id=326691ad4f179e6edc7eb1271e618dd673e4736d

The id seems to be exactly the same.

Christophe

> 
> thanks,
> 
> greg k-h
> 

---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
  2018-03-09 15:48 [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy Christophe Leroy
@ 2018-03-10  0:10 ` Greg Kroah-Hartman
  2018-03-10  7:27   ` christophe leroy
  0 siblings, 1 reply; 19+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-10  0:10 UTC (permalink / raw)
  To: Christophe Leroy; +Cc: stable, linux-kernel, linuxppc-dev

On Fri, Mar 09, 2018 at 04:48:59PM +0100, Christophe Leroy wrote:
> Upstream 326691ad4f179e6edc7eb1271e618dd673e4736d

There is no such git commit id in Linus's tree :(

Please fix up and resend the series.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy
@ 2018-03-09 15:48 Christophe Leroy
  2018-03-10  0:10 ` Greg Kroah-Hartman
  0 siblings, 1 reply; 19+ messages in thread
From: Christophe Leroy @ 2018-03-09 15:48 UTC (permalink / raw)
  To: stable, Greg Kroah-Hartman; +Cc: linux-kernel, linuxppc-dev

Upstream 326691ad4f179e6edc7eb1271e618dd673e4736d

bitmap_or() and bitmap_andnot() can work properly with dst identical
to src1 or src2. There is no need of an intermediate result bitmap
that is copied back to dst in a second step.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/powerpc/mm/slice.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
index 45f6740dd407..a7ac600f71c6 100644
--- a/arch/powerpc/mm/slice.c
+++ b/arch/powerpc/mm/slice.c
@@ -379,21 +379,17 @@ static unsigned long slice_find_area(struct mm_struct *mm, unsigned long len,
 
 static inline void slice_or_mask(struct slice_mask *dst, struct slice_mask *src)
 {
-	DECLARE_BITMAP(result, SLICE_NUM_HIGH);
-
 	dst->low_slices |= src->low_slices;
-	bitmap_or(result, dst->high_slices, src->high_slices, SLICE_NUM_HIGH);
-	bitmap_copy(dst->high_slices, result, SLICE_NUM_HIGH);
+	bitmap_or(dst->high_slices, dst->high_slices, src->high_slices,
+		  SLICE_NUM_HIGH);
 }
 
 static inline void slice_andnot_mask(struct slice_mask *dst, struct slice_mask *src)
 {
-	DECLARE_BITMAP(result, SLICE_NUM_HIGH);
-
 	dst->low_slices &= ~src->low_slices;
 
-	bitmap_andnot(result, dst->high_slices, src->high_slices, SLICE_NUM_HIGH);
-	bitmap_copy(dst->high_slices, result, SLICE_NUM_HIGH);
+	bitmap_andnot(dst->high_slices, dst->high_slices, src->high_slices,
+		      SLICE_NUM_HIGH);
 }
 
 #ifdef CONFIG_PPC_64K_PAGES
-- 
2.13.3

^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2018-06-03  9:24 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-31  8:54 [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy Christophe Leroy
2018-05-31  8:54 ` [PATCH 4.14 2/4] powerpc/mm/slice: create header files dedicated to slices Christophe Leroy
2018-06-02 13:21   ` Greg Kroah-Hartman
2018-06-02 20:55     ` Christophe Leroy
2018-06-02 20:55       ` Christophe Leroy
2018-06-03  9:21       ` Greg Kroah-Hartman
2018-06-03  9:23         ` Greg Kroah-Hartman
2018-05-31  8:54 ` [PATCH 4.14 3/4] powerpc/mm/slice: Enhance for supporting PPC32 Christophe Leroy
2018-05-31  8:54 ` [PATCH 4.14 4/4] powerpc/mm/slice: Fix hugepage allocation at hint address on 8xx Christophe Leroy
  -- strict thread matches above, loose matches on Subject: below --
2018-03-09 15:48 [PATCH 4.14 1/4] powerpc/mm/slice: Remove intermediate bitmap copy Christophe Leroy
2018-03-10  0:10 ` Greg Kroah-Hartman
2018-03-10  7:27   ` christophe leroy
2018-03-10 14:52     ` Greg Kroah-Hartman
2018-03-10 14:52       ` Greg Kroah-Hartman
2018-03-10 16:14       ` christophe leroy
2018-03-10 19:47         ` Greg Kroah-Hartman
2018-03-10 19:47           ` Greg Kroah-Hartman
2018-03-13 13:24           ` Michael Ellerman
2018-03-13 13:24             ` Michael Ellerman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.