Linux-mm Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH 00/24] Use asm-generic for mmu_context no-op functions
@ 2020-07-28  3:33 Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 01/24] asm-generic: add generic versions of mmu context functions Nicholas Piggin
                   ` (23 more replies)
  0 siblings, 24 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch; +Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann

It would be nice to be able to modify these or add a hook without
updating all architectures, most of which just use noops.

There was some discussion around the lazy tlb switching vs membarrier
barriers that may have needed changes here to fix (addition of an
exit_lazy_tlb() function). I don't know whether that's what we will
end up doing, but these are the prep patches I did for it which are
still a good cleanup so I would like to mege them.

All arch patches depend on patch 1. If everybody is fine with it
then Arnd could merge that one in this merge window then we do the
rest of them in the next window?

Thanks,
Nick

Nicholas Piggin (24):
  asm-generic: add generic versions of mmu context functions
  alpha: use asm-generic/mmu_context.h for no-op implementations
  arc: use asm-generic/mmu_context.h for no-op implementations
  arm: use asm-generic/mmu_context.h for no-op implementations
  arm64: use asm-generic/mmu_context.h for no-op implementations
  csky: use asm-generic/mmu_context.h for no-op implementations
  hexagon: use asm-generic/mmu_context.h for no-op implementations
  ia64: use asm-generic/mmu_context.h for no-op implementations
  m68k: use asm-generic/mmu_context.h for no-op implementations
  microblaze: use asm-generic/mmu_context.h for no-op implementations
  mips: use asm-generic/mmu_context.h for no-op implementations
  nds32: use asm-generic/mmu_context.h for no-op implementations
  nios2: use asm-generic/mmu_context.h for no-op implementations
  openrisc: use asm-generic/mmu_context.h for no-op implementations
  parisc: use asm-generic/mmu_context.h for no-op implementations
  powerpc: use asm-generic/mmu_context.h for no-op implementations
  riscv: use asm-generic/mmu_context.h for no-op implementations
  s390: use asm-generic/mmu_context.h for no-op implementations
  sh: use asm-generic/mmu_context.h for no-op implementations
  sparc: use asm-generic/mmu_context.h for no-op implementations
  um: use asm-generic/mmu_context.h for no-op implementations
  unicore32: use asm-generic/mmu_context.h for no-op implementations
  x86: use asm-generic/mmu_context.h for no-op implementations
  xtensa: use asm-generic/mmu_context.h for no-op implementations

 arch/alpha/include/asm/mmu_context.h         | 12 ++---
 arch/arc/include/asm/mmu_context.h           | 16 +++---
 arch/arm/include/asm/mmu_context.h           | 26 ++-------
 arch/arm64/include/asm/mmu_context.h         |  7 ++-
 arch/csky/include/asm/mmu_context.h          |  8 ++-
 arch/hexagon/include/asm/mmu_context.h       | 33 ++----------
 arch/ia64/include/asm/mmu_context.h          | 17 ++----
 arch/m68k/include/asm/mmu_context.h          | 47 +++-------------
 arch/microblaze/include/asm/mmu_context.h    |  2 +-
 arch/microblaze/include/asm/mmu_context_mm.h |  8 +--
 arch/microblaze/include/asm/processor.h      |  3 --
 arch/mips/include/asm/mmu_context.h          | 11 ++--
 arch/nds32/include/asm/mmu_context.h         | 10 +---
 arch/nios2/include/asm/mmu_context.h         | 21 ++------
 arch/nios2/mm/mmu_context.c                  |  1 +
 arch/openrisc/include/asm/mmu_context.h      |  8 ++-
 arch/openrisc/mm/tlb.c                       |  2 +
 arch/parisc/include/asm/mmu_context.h        | 12 ++---
 arch/powerpc/include/asm/mmu_context.h       | 22 +++-----
 arch/riscv/include/asm/mmu_context.h         | 22 +-------
 arch/s390/include/asm/mmu_context.h          |  9 ++--
 arch/sh/include/asm/mmu_context.h            |  7 ++-
 arch/sh/include/asm/mmu_context_32.h         |  9 ----
 arch/sparc/include/asm/mmu_context_32.h      | 10 ++--
 arch/sparc/include/asm/mmu_context_64.h      | 10 ++--
 arch/um/include/asm/mmu_context.h            | 12 ++---
 arch/unicore32/include/asm/mmu_context.h     | 24 ++-------
 arch/x86/include/asm/mmu_context.h           |  6 +++
 arch/xtensa/include/asm/mmu_context.h        | 11 ++--
 arch/xtensa/include/asm/nommu_context.h      | 26 +--------
 include/asm-generic/mmu_context.h            | 57 +++++++++++++++-----
 include/asm-generic/nommu_context.h          | 19 +++++++
 32 files changed, 170 insertions(+), 318 deletions(-)
 create mode 100644 include/asm-generic/nommu_context.h

-- 
2.23.0



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

* [PATCH 01/24] asm-generic: add generic versions of mmu context functions
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  4:01   ` Vineet Gupta
                     ` (2 more replies)
  2020-07-28  3:33 ` [PATCH 02/24] alpha: use asm-generic/mmu_context.h for no-op implementations Nicholas Piggin
                   ` (22 subsequent siblings)
  23 siblings, 3 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch; +Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann

Many of these are no-ops on many architectures, so extend mmu_context.h
to cover MMU and NOMMU, and split the NOMMU bits out to nommu_context.h

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: linux-arch@vger.kernel.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/microblaze/include/asm/mmu_context.h |  2 +-
 arch/sh/include/asm/mmu_context.h         |  2 +-
 include/asm-generic/mmu_context.h         | 57 +++++++++++++++++------
 include/asm-generic/nommu_context.h       | 19 ++++++++
 4 files changed, 64 insertions(+), 16 deletions(-)
 create mode 100644 include/asm-generic/nommu_context.h

diff --git a/arch/microblaze/include/asm/mmu_context.h b/arch/microblaze/include/asm/mmu_context.h
index f74f9da07fdc..34004efb3def 100644
--- a/arch/microblaze/include/asm/mmu_context.h
+++ b/arch/microblaze/include/asm/mmu_context.h
@@ -2,5 +2,5 @@
 #ifdef CONFIG_MMU
 # include <asm/mmu_context_mm.h>
 #else
-# include <asm-generic/mmu_context.h>
+# include <asm-generic/nommu_context.h>
 #endif
diff --git a/arch/sh/include/asm/mmu_context.h b/arch/sh/include/asm/mmu_context.h
index 48e67d544d53..9470d17c71c2 100644
--- a/arch/sh/include/asm/mmu_context.h
+++ b/arch/sh/include/asm/mmu_context.h
@@ -134,7 +134,7 @@ static inline void switch_mm(struct mm_struct *prev,
 #define set_TTB(pgd)			do { } while (0)
 #define get_TTB()			(0)
 
-#include <asm-generic/mmu_context.h>
+#include <asm-generic/nommu_context.h>
 
 #endif /* CONFIG_MMU */
 
diff --git a/include/asm-generic/mmu_context.h b/include/asm-generic/mmu_context.h
index 6be9106fb6fb..86cea80a50df 100644
--- a/include/asm-generic/mmu_context.h
+++ b/include/asm-generic/mmu_context.h
@@ -3,44 +3,73 @@
 #define __ASM_GENERIC_MMU_CONTEXT_H
 
 /*
- * Generic hooks for NOMMU architectures, which do not need to do
- * anything special here.
+ * Generic hooks to implement no-op functionality.
  */
 
-#include <asm-generic/mm_hooks.h>
-
 struct task_struct;
 struct mm_struct;
 
+/*
+ * enter_lazy_tlb - Called when "tsk" is about to enter lazy TLB mode.
+ *
+ * @mm:  the currently active mm context which is becoming lazy
+ * @tsk: task which is entering lazy tlb
+ *
+ * tsk->mm will be NULL
+ */
+#ifndef enter_lazy_tlb
 static inline void enter_lazy_tlb(struct mm_struct *mm,
 			struct task_struct *tsk)
 {
 }
+#endif
 
+/**
+ * init_new_context - Initialize context of a new mm_struct.
+ * @tsk: task struct for the mm
+ * @mm:  the new mm struct
+ */
+#ifndef init_new_context
 static inline int init_new_context(struct task_struct *tsk,
 			struct mm_struct *mm)
 {
 	return 0;
 }
+#endif
 
+/**
+ * destroy_context - Undo init_new_context when the mm is going away
+ * @mm: old mm struct
+ */
+#ifndef destroy_context
 static inline void destroy_context(struct mm_struct *mm)
 {
 }
+#endif
 
-static inline void deactivate_mm(struct task_struct *task,
-			struct mm_struct *mm)
-{
-}
-
-static inline void switch_mm(struct mm_struct *prev,
-			struct mm_struct *next,
-			struct task_struct *tsk)
+/**
+ * activate_mm - called after exec switches the current task to a new mm, to switch to it
+ * @prev_mm: previous mm of this task
+ * @next_mm: new mm
+ */
+#ifndef activate_mm
+static inline void activate_mm(struct mm_struct *prev_mm,
+			       struct mm_struct *next_mm)
 {
+	switch_mm(prev_mm, next_mm, current);
 }
+#endif
 
-static inline void activate_mm(struct mm_struct *prev_mm,
-			       struct mm_struct *next_mm)
+/**
+ * dectivate_mm - called when an mm is released after exit or exec switches away from it
+ * @tsk: the task
+ * @mm:  the old mm
+ */
+#ifndef deactivate_mm
+static inline void deactivate_mm(struct task_struct *tsk,
+			struct mm_struct *mm)
 {
 }
+#endif
 
 #endif /* __ASM_GENERIC_MMU_CONTEXT_H */
diff --git a/include/asm-generic/nommu_context.h b/include/asm-generic/nommu_context.h
new file mode 100644
index 000000000000..72b8d8b1d81e
--- /dev/null
+++ b/include/asm-generic/nommu_context.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __ASM_GENERIC_NOMMU_H
+#define __ASM_GENERIC_NOMMU_H
+
+/*
+ * Generic hooks for NOMMU architectures, which do not need to do
+ * anything special here.
+ */
+
+#include <asm-generic/mm_hooks.h>
+#include <asm-generic/mmu_context.h>
+
+static inline void switch_mm(struct mm_struct *prev,
+			struct mm_struct *next,
+			struct task_struct *tsk)
+{
+}
+
+#endif /* __ASM_GENERIC_NOMMU_H */
-- 
2.23.0



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

* [PATCH 02/24] alpha: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 01/24] asm-generic: add generic versions of mmu context functions Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 03/24] arc: " Nicholas Piggin
                   ` (21 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Richard Henderson, Ivan Kokshaysky, Matt Turner, linux-alpha

Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Matt Turner <mattst88@gmail.com>
Cc: linux-alpha@vger.kernel.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/alpha/include/asm/mmu_context.h | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/arch/alpha/include/asm/mmu_context.h b/arch/alpha/include/asm/mmu_context.h
index 6d7d9bc1b4b8..4eea7c616992 100644
--- a/arch/alpha/include/asm/mmu_context.h
+++ b/arch/alpha/include/asm/mmu_context.h
@@ -214,8 +214,6 @@ ev4_activate_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm)
 	tbiap();
 }
 
-#define deactivate_mm(tsk,mm)	do { } while (0)
-
 #ifdef CONFIG_ALPHA_GENERIC
 # define switch_mm(a,b,c)	alpha_mv.mv_switch_mm((a),(b),(c))
 # define activate_mm(x,y)	alpha_mv.mv_activate_mm((x),(y))
@@ -229,6 +227,7 @@ ev4_activate_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm)
 # endif
 #endif
 
+#define init_new_context init_new_context
 static inline int
 init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 {
@@ -242,12 +241,7 @@ init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 	return 0;
 }
 
-extern inline void
-destroy_context(struct mm_struct *mm)
-{
-	/* Nothing to do.  */
-}
-
+#define enter_lazy_tlb enter_lazy_tlb
 static inline void
 enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
 {
@@ -255,6 +249,8 @@ enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
 	  = ((unsigned long)mm->pgd - IDENT_ADDR) >> PAGE_SHIFT;
 }
 
+#include <asm-generic/mmu_context.h>
+
 #ifdef __MMU_EXTERN_INLINE
 #undef __EXTERN_INLINE
 #undef __MMU_EXTERN_INLINE
-- 
2.23.0



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

* [PATCH 03/24] arc: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 01/24] asm-generic: add generic versions of mmu context functions Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 02/24] alpha: use asm-generic/mmu_context.h for no-op implementations Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:58   ` Vineet Gupta
  2020-07-28  3:33 ` [PATCH 04/24] arm: " Nicholas Piggin
                   ` (20 subsequent siblings)
  23 siblings, 1 reply; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Vineet Gupta, linux-snps-arc

Cc: Vineet Gupta <vgupta@synopsys.com>
Cc: linux-snps-arc@lists.infradead.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/arc/include/asm/mmu_context.h | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/arch/arc/include/asm/mmu_context.h b/arch/arc/include/asm/mmu_context.h
index 3a5e6a5b9ed6..586d31902a99 100644
--- a/arch/arc/include/asm/mmu_context.h
+++ b/arch/arc/include/asm/mmu_context.h
@@ -102,6 +102,7 @@ static inline void get_new_mmu_context(struct mm_struct *mm)
  * Initialize the context related info for a new mm_struct
  * instance.
  */
+#define init_new_context init_new_context
 static inline int
 init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 {
@@ -113,6 +114,7 @@ init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 	return 0;
 }
 
+#define destroy_context destroy_context
 static inline void destroy_context(struct mm_struct *mm)
 {
 	unsigned long flags;
@@ -153,13 +155,12 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 }
 
 /*
- * Called at the time of execve() to get a new ASID
- * Note the subtlety here: get_new_mmu_context() behaves differently here
- * vs. in switch_mm(). Here it always returns a new ASID, because mm has
- * an unallocated "initial" value, while in latter, it moves to a new ASID,
- * only if it was unallocated
+ * activate_mm defaults to switch_mm and is called at the time of execve() to
+ * get a new ASID Note the subtlety here: get_new_mmu_context() behaves
+ * differently here vs. in switch_mm(). Here it always returns a new ASID,
+ * because mm has an unallocated "initial" value, while in latter, it moves to
+ * a new ASID, only if it was unallocated
  */
-#define activate_mm(prev, next)		switch_mm(prev, next, NULL)
 
 /* it seemed that deactivate_mm( ) is a reasonable place to do book-keeping
  * for retiring-mm. However destroy_context( ) still needs to do that because
@@ -168,8 +169,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
  * there is a good chance that task gets sched-out/in, making it's ASID valid
  * again (this teased me for a whole day).
  */
-#define deactivate_mm(tsk, mm)   do { } while (0)
 
-#define enter_lazy_tlb(mm, tsk)
+#include <asm-generic/mmu_context.h>
 
 #endif /* __ASM_ARC_MMU_CONTEXT_H */
-- 
2.23.0



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

* [PATCH 04/24] arm: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (2 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 03/24] arc: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  4:14   ` Vineet Gupta
  2020-07-28  3:33 ` [PATCH 05/24] arm64: " Nicholas Piggin
                   ` (19 subsequent siblings)
  23 siblings, 1 reply; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Russell King, linux-arm-kernel

Cc: Russell King <linux@armlinux.org.uk>
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/arm/include/asm/mmu_context.h | 26 +++-----------------------
 1 file changed, 3 insertions(+), 23 deletions(-)

diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h
index f99ed524fe41..84e58956fcab 100644
--- a/arch/arm/include/asm/mmu_context.h
+++ b/arch/arm/include/asm/mmu_context.h
@@ -26,6 +26,8 @@ void __check_vmalloc_seq(struct mm_struct *mm);
 #ifdef CONFIG_CPU_HAS_ASID
 
 void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk);
+
+#define init_new_context init_new_context
 static inline int
 init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 {
@@ -92,32 +94,10 @@ static inline void finish_arch_post_lock_switch(void)
 
 #endif	/* CONFIG_MMU */
 
-static inline int
-init_new_context(struct task_struct *tsk, struct mm_struct *mm)
-{
-	return 0;
-}
-
-
 #endif	/* CONFIG_CPU_HAS_ASID */
 
-#define destroy_context(mm)		do { } while(0)
 #define activate_mm(prev,next)		switch_mm(prev, next, NULL)
 
-/*
- * This is called when "tsk" is about to enter lazy TLB mode.
- *
- * mm:  describes the currently active mm context
- * tsk: task which is entering lazy tlb
- * cpu: cpu number which is entering lazy tlb
- *
- * tsk->mm will be NULL
- */
-static inline void
-enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 /*
  * This is the actual mm switch as far as the scheduler
  * is concerned.  No registers are touched.  We avoid
@@ -149,6 +129,6 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
 #endif
 }
 
-#define deactivate_mm(tsk,mm)	do { } while (0)
+#include <asm-generic/mmu_context.h>
 
 #endif
-- 
2.23.0



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

* [PATCH 05/24] arm64: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (3 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 04/24] arm: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 06/24] csky: " Nicholas Piggin
                   ` (18 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Catalin Marinas, Will Deacon, linux-arm-kernel

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/arm64/include/asm/mmu_context.h | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
index b0bd9b55594c..0f5e351f586a 100644
--- a/arch/arm64/include/asm/mmu_context.h
+++ b/arch/arm64/include/asm/mmu_context.h
@@ -174,7 +174,6 @@ static inline void cpu_replace_ttbr1(pgd_t *pgdp)
  * Setting a reserved TTBR0 or EPD0 would work, but it all gets ugly when you
  * take CPU migration into account.
  */
-#define destroy_context(mm)		do { } while(0)
 void check_and_switch_context(struct mm_struct *mm, unsigned int cpu);
 
 #define init_new_context(tsk,mm)	({ atomic64_set(&(mm)->context.id, 0); 0; })
@@ -202,6 +201,7 @@ static inline void update_saved_ttbr0(struct task_struct *tsk,
 }
 #endif
 
+#define enter_lazy_tlb enter_lazy_tlb
 static inline void
 enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
 {
@@ -244,12 +244,11 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
 	update_saved_ttbr0(tsk, next);
 }
 
-#define deactivate_mm(tsk,mm)	do { } while (0)
-#define activate_mm(prev,next)	switch_mm(prev, next, current)
-
 void verify_cpu_asid_bits(void);
 void post_ttbr_update_workaround(void);
 
+#include <asm-generic/mmu_context.h>
+
 #endif /* !__ASSEMBLY__ */
 
 #endif /* !__ASM_MMU_CONTEXT_H */
-- 
2.23.0



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

* [PATCH 06/24] csky: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (4 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 05/24] arm64: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  4:09   ` Guo Ren
  2020-07-28  3:33 ` [PATCH 07/24] hexagon: " Nicholas Piggin
                   ` (17 subsequent siblings)
  23 siblings, 1 reply; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann, Guo Ren,
	linux-csky

Cc: Guo Ren <guoren@kernel.org>
Cc: linux-csky@vger.kernel.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/csky/include/asm/mmu_context.h | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/arch/csky/include/asm/mmu_context.h b/arch/csky/include/asm/mmu_context.h
index abdf1f1cb6ec..b227d29393a8 100644
--- a/arch/csky/include/asm/mmu_context.h
+++ b/arch/csky/include/asm/mmu_context.h
@@ -24,11 +24,6 @@
 #define cpu_asid(mm)		(atomic64_read(&mm->context.asid) & ASID_MASK)
 
 #define init_new_context(tsk,mm)	({ atomic64_set(&(mm)->context.asid, 0); 0; })
-#define activate_mm(prev,next)		switch_mm(prev, next, current)
-
-#define destroy_context(mm)		do {} while (0)
-#define enter_lazy_tlb(mm, tsk)		do {} while (0)
-#define deactivate_mm(tsk, mm)		do {} while (0)
 
 void check_and_switch_context(struct mm_struct *mm, unsigned int cpu);
 
@@ -46,4 +41,7 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
 
 	flush_icache_deferred(next);
 }
+
+#include <asm-generic/mmu_context.h>
+
 #endif /* __ASM_CSKY_MMU_CONTEXT_H */
-- 
2.23.0



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

* [PATCH 07/24] hexagon: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (5 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 06/24] csky: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-08-11 18:34   ` Brian Cain
  2020-07-28  3:33 ` [PATCH 08/24] ia64: " Nicholas Piggin
                   ` (16 subsequent siblings)
  23 siblings, 1 reply; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Brian Cain, linux-hexagon

Cc: Brian Cain <bcain@codeaurora.org>
Cc: linux-hexagon@vger.kernel.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/hexagon/include/asm/mmu_context.h | 33 ++++----------------------
 1 file changed, 5 insertions(+), 28 deletions(-)

diff --git a/arch/hexagon/include/asm/mmu_context.h b/arch/hexagon/include/asm/mmu_context.h
index cdc4adc0300a..81947764c47d 100644
--- a/arch/hexagon/include/asm/mmu_context.h
+++ b/arch/hexagon/include/asm/mmu_context.h
@@ -15,39 +15,13 @@
 #include <asm/pgalloc.h>
 #include <asm/mem-layout.h>
 
-static inline void destroy_context(struct mm_struct *mm)
-{
-}
-
 /*
  * VM port hides all TLB management, so "lazy TLB" isn't very
  * meaningful.  Even for ports to architectures with visble TLBs,
  * this is almost invariably a null function.
+ *
+ * mm->context is set up by pgd_alloc, so no init_new_context required.
  */
-static inline void enter_lazy_tlb(struct mm_struct *mm,
-	struct task_struct *tsk)
-{
-}
-
-/*
- * Architecture-specific actions, if any, for memory map deactivation.
- */
-static inline void deactivate_mm(struct task_struct *tsk,
-	struct mm_struct *mm)
-{
-}
-
-/**
- * init_new_context - initialize context related info for new mm_struct instance
- * @tsk: pointer to a task struct
- * @mm: pointer to a new mm struct
- */
-static inline int init_new_context(struct task_struct *tsk,
-					struct mm_struct *mm)
-{
-	/* mm->context is set up by pgd_alloc */
-	return 0;
-}
 
 /*
  *  Switch active mm context
@@ -74,6 +48,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 /*
  *  Activate new memory map for task
  */
+#define activate_mm activate_mm
 static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
 {
 	unsigned long flags;
@@ -86,4 +61,6 @@ static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
 /*  Generic hooks for arch_dup_mmap and arch_exit_mmap  */
 #include <asm-generic/mm_hooks.h>
 
+#include <asm-generic/mmu_context.h>
+
 #endif
-- 
2.23.0



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

* [PATCH 08/24] ia64: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (6 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 07/24] hexagon: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 09/24] m68k: " Nicholas Piggin
                   ` (15 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Tony Luck, Fenghua Yu, linux-ia64

Cc: Tony Luck <tony.luck@intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: linux-ia64@vger.kernel.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/ia64/include/asm/mmu_context.h | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)

diff --git a/arch/ia64/include/asm/mmu_context.h b/arch/ia64/include/asm/mmu_context.h
index 2da0e2eb036b..87a0d5bc11ef 100644
--- a/arch/ia64/include/asm/mmu_context.h
+++ b/arch/ia64/include/asm/mmu_context.h
@@ -49,11 +49,6 @@ DECLARE_PER_CPU(u8, ia64_need_tlb_flush);
 extern void mmu_context_init (void);
 extern void wrap_mmu_context (struct mm_struct *mm);
 
-static inline void
-enter_lazy_tlb (struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 /*
  * When the context counter wraps around all TLBs need to be flushed because
  * an old context number might have been reused. This is signalled by the
@@ -116,6 +111,7 @@ get_mmu_context (struct mm_struct *mm)
  * Initialize context number to some sane value.  MM is guaranteed to be a
  * brand-new address-space, so no TLB flushing is needed, ever.
  */
+#define init_new_context init_new_context
 static inline int
 init_new_context (struct task_struct *p, struct mm_struct *mm)
 {
@@ -123,12 +119,6 @@ init_new_context (struct task_struct *p, struct mm_struct *mm)
 	return 0;
 }
 
-static inline void
-destroy_context (struct mm_struct *mm)
-{
-	/* Nothing to do.  */
-}
-
 static inline void
 reload_context (nv_mm_context_t context)
 {
@@ -178,11 +168,10 @@ activate_context (struct mm_struct *mm)
 	} while (unlikely(context != mm->context));
 }
 
-#define deactivate_mm(tsk,mm)	do { } while (0)
-
 /*
  * Switch from address space PREV to address space NEXT.
  */
+#define activate_mm activate_mm
 static inline void
 activate_mm (struct mm_struct *prev, struct mm_struct *next)
 {
@@ -196,5 +185,7 @@ activate_mm (struct mm_struct *prev, struct mm_struct *next)
 
 #define switch_mm(prev_mm,next_mm,next_task)	activate_mm(prev_mm, next_mm)
 
+#include <asm-generic/mmu_context.h>
+
 # endif /* ! __ASSEMBLY__ */
 #endif /* _ASM_IA64_MMU_CONTEXT_H */
-- 
2.23.0



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

* [PATCH 09/24] m68k: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (7 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 08/24] ia64: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-30  8:11   ` kernel test robot
  2020-07-28  3:33 ` [PATCH 10/24] microblaze: " Nicholas Piggin
                   ` (14 subsequent siblings)
  23 siblings, 1 reply; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Geert Uytterhoeven, linux-m68k

Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-m68k@lists.linux-m68k.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/m68k/include/asm/mmu_context.h | 47 +++++------------------------
 1 file changed, 8 insertions(+), 39 deletions(-)

diff --git a/arch/m68k/include/asm/mmu_context.h b/arch/m68k/include/asm/mmu_context.h
index cac9f289d1f6..56ae27322178 100644
--- a/arch/m68k/include/asm/mmu_context.h
+++ b/arch/m68k/include/asm/mmu_context.h
@@ -5,10 +5,6 @@
 #include <asm-generic/mm_hooks.h>
 #include <linux/mm_types.h>
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 #ifdef CONFIG_MMU
 
 #if defined(CONFIG_COLDFIRE)
@@ -58,6 +54,7 @@ static inline void get_mmu_context(struct mm_struct *mm)
 /*
  * We're finished using the context for an address space.
  */
+#define destroy_context destroy_context
 static inline void destroy_context(struct mm_struct *mm)
 {
 	if (mm->context != NO_CONTEXT) {
@@ -79,19 +76,6 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 	set_context(tsk->mm->context, next->pgd);
 }
 
-/*
- * After we have set current->mm to a new value, this activates
- * the context for the new mm so we see the new mappings.
- */
-static inline void activate_mm(struct mm_struct *active_mm,
-	struct mm_struct *mm)
-{
-	get_mmu_context(mm);
-	set_context(mm->context, mm->pgd);
-}
-
-#define deactivate_mm(tsk, mm) do { } while (0)
-
 #define prepare_arch_switch(next) load_ksp_mmu(next)
 
 static inline void load_ksp_mmu(struct task_struct *task)
@@ -176,6 +160,7 @@ extern unsigned long get_free_context(struct mm_struct *mm);
 extern void clear_context(unsigned long context);
 
 /* set the context for a new task to unmapped */
+#define init_new_context init_new_context
 static inline int init_new_context(struct task_struct *tsk,
 				   struct mm_struct *mm)
 {
@@ -210,8 +195,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 	activate_context(tsk->mm);
 }
 
-#define deactivate_mm(tsk, mm)	do { } while (0)
-
+#define activate_mm activate_mm
 static inline void activate_mm(struct mm_struct *prev_mm,
 			       struct mm_struct *next_mm)
 {
@@ -224,6 +208,7 @@ static inline void activate_mm(struct mm_struct *prev_mm,
 #include <asm/page.h>
 #include <asm/pgalloc.h>
 
+#define init_new_context init_new_context
 static inline int init_new_context(struct task_struct *tsk,
 				   struct mm_struct *mm)
 {
@@ -231,8 +216,6 @@ static inline int init_new_context(struct task_struct *tsk,
 	return 0;
 }
 
-#define destroy_context(mm)		do { } while(0)
-
 static inline void switch_mm_0230(struct mm_struct *mm)
 {
 	unsigned long crp[2] = {
@@ -300,8 +283,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, str
 	}
 }
 
-#define deactivate_mm(tsk,mm)	do { } while (0)
-
+#define activate_mm activate_mm
 static inline void activate_mm(struct mm_struct *prev_mm,
 			       struct mm_struct *next_mm)
 {
@@ -315,24 +297,11 @@ static inline void activate_mm(struct mm_struct *prev_mm,
 
 #endif
 
-#else /* !CONFIG_MMU */
+#include <asm-generic/mmu_context.h>
 
-static inline int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
-{
-	return 0;
-}
-
-
-static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk)
-{
-}
-
-#define destroy_context(mm)	do { } while (0)
-#define deactivate_mm(tsk,mm)	do { } while (0)
+#else /* !CONFIG_MMU */
 
-static inline void activate_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm)
-{
-}
+#include <asm-generic/nommu_context.h>
 
 #endif /* CONFIG_MMU */
 #endif /* __M68K_MMU_CONTEXT_H */
-- 
2.23.0



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

* [PATCH 10/24] microblaze: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (8 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 09/24] m68k: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 11/24] mips: " Nicholas Piggin
                   ` (13 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann, Michal Simek

Cc: Michal Simek <monstr@monstr.eu>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/microblaze/include/asm/mmu_context_mm.h | 8 ++++----
 arch/microblaze/include/asm/processor.h      | 3 ---
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/arch/microblaze/include/asm/mmu_context_mm.h b/arch/microblaze/include/asm/mmu_context_mm.h
index a1c7dd48454c..c2c77f708455 100644
--- a/arch/microblaze/include/asm/mmu_context_mm.h
+++ b/arch/microblaze/include/asm/mmu_context_mm.h
@@ -33,10 +33,6 @@
    to represent all kernel pages as shared among all contexts.
  */
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 # define NO_CONTEXT	256
 # define LAST_CONTEXT	255
 # define FIRST_CONTEXT	1
@@ -105,6 +101,7 @@ static inline void get_mmu_context(struct mm_struct *mm)
 /*
  * We're finished using the context for an address space.
  */
+#define destroy_context destroy_context
 static inline void destroy_context(struct mm_struct *mm)
 {
 	if (mm->context != NO_CONTEXT) {
@@ -126,6 +123,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
  * After we have set current->mm to a new value, this activates
  * the context for the new mm so we see the new mappings.
  */
+#define activate_mm activate_mm
 static inline void activate_mm(struct mm_struct *active_mm,
 			struct mm_struct *mm)
 {
@@ -136,5 +134,7 @@ static inline void activate_mm(struct mm_struct *active_mm,
 
 extern void mmu_context_init(void);
 
+#include <asm-generic/mmu_context.h>
+
 # endif /* __KERNEL__ */
 #endif /* _ASM_MICROBLAZE_MMU_CONTEXT_H */
diff --git a/arch/microblaze/include/asm/processor.h b/arch/microblaze/include/asm/processor.h
index 1ff5a82b76b6..616211871a6e 100644
--- a/arch/microblaze/include/asm/processor.h
+++ b/arch/microblaze/include/asm/processor.h
@@ -122,9 +122,6 @@ unsigned long get_wchan(struct task_struct *p);
 #  define KSTK_EIP(task)	(task_pc(task))
 #  define KSTK_ESP(task)	(task_sp(task))
 
-/* FIXME */
-#  define deactivate_mm(tsk, mm)	do { } while (0)
-
 #  define STACK_TOP	TASK_SIZE
 #  define STACK_TOP_MAX	STACK_TOP
 
-- 
2.23.0



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

* [PATCH 11/24] mips: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (9 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 10/24] microblaze: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 12/24] nds32: " Nicholas Piggin
                   ` (12 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Thomas Bogendoerfer, linux-mips

Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: linux-mips@vger.kernel.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/mips/include/asm/mmu_context.h | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/arch/mips/include/asm/mmu_context.h b/arch/mips/include/asm/mmu_context.h
index cddead91acd4..ed9f2d748f63 100644
--- a/arch/mips/include/asm/mmu_context.h
+++ b/arch/mips/include/asm/mmu_context.h
@@ -124,10 +124,6 @@ static inline void set_cpu_context(unsigned int cpu,
 #define cpu_asid(cpu, mm) \
 	(cpu_context((cpu), (mm)) & cpu_asid_mask(&cpu_data[cpu]))
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 extern void get_new_mmu_context(struct mm_struct *mm);
 extern void check_mmu_context(struct mm_struct *mm);
 extern void check_switch_mmu_context(struct mm_struct *mm);
@@ -136,6 +132,7 @@ extern void check_switch_mmu_context(struct mm_struct *mm);
  * Initialize the context related info for a new mm_struct
  * instance.
  */
+#define init_new_context init_new_context
 static inline int
 init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 {
@@ -180,14 +177,12 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
  * Destroy context related info for an mm_struct that is about
  * to be put to rest.
  */
+#define destroy_context destroy_context
 static inline void destroy_context(struct mm_struct *mm)
 {
 	dsemul_mm_cleanup(mm);
 }
 
-#define activate_mm(prev, next)	switch_mm(prev, next, current)
-#define deactivate_mm(tsk, mm)	do { } while (0)
-
 static inline void
 drop_mmu_context(struct mm_struct *mm)
 {
@@ -237,4 +232,6 @@ drop_mmu_context(struct mm_struct *mm)
 	local_irq_restore(flags);
 }
 
+#include <asm-generic/mmu_context.h>
+
 #endif /* _ASM_MMU_CONTEXT_H */
-- 
2.23.0



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

* [PATCH 12/24] nds32: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (10 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 11/24] mips: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 13/24] nios2: " Nicholas Piggin
                   ` (11 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann, Nick Hu,
	Greentime Hu, Vincent Chen

Cc: Nick Hu <nickhu@andestech.com>
Cc: Greentime Hu <green.hu@gmail.com>
Cc: Vincent Chen <deanbo422@gmail.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/nds32/include/asm/mmu_context.h | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/arch/nds32/include/asm/mmu_context.h b/arch/nds32/include/asm/mmu_context.h
index b8fd3d189fdc..c651bc8cacdc 100644
--- a/arch/nds32/include/asm/mmu_context.h
+++ b/arch/nds32/include/asm/mmu_context.h
@@ -9,6 +9,7 @@
 #include <asm/proc-fns.h>
 #include <asm-generic/mm_hooks.h>
 
+#define init_new_context init_new_context
 static inline int
 init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 {
@@ -16,8 +17,6 @@ init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 	return 0;
 }
 
-#define destroy_context(mm)	do { } while(0)
-
 #define CID_BITS	9
 extern spinlock_t cid_lock;
 extern unsigned int cpu_last_cid;
@@ -47,10 +46,6 @@ static inline void check_context(struct mm_struct *mm)
 		__new_context(mm);
 }
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 			     struct task_struct *tsk)
 {
@@ -62,7 +57,6 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 	}
 }
 
-#define deactivate_mm(tsk,mm)	do { } while (0)
-#define activate_mm(prev,next)	switch_mm(prev, next, NULL)
+#include <asm-generic/mmu_context.h>
 
 #endif
-- 
2.23.0



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

* [PATCH 13/24] nios2: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (11 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 12/24] nds32: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 14/24] openrisc: " Nicholas Piggin
                   ` (10 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann, Ley Foon Tan

Cc: Ley Foon Tan <ley.foon.tan@intel.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/nios2/include/asm/mmu_context.h | 21 ++++-----------------
 arch/nios2/mm/mmu_context.c          |  1 +
 2 files changed, 5 insertions(+), 17 deletions(-)

diff --git a/arch/nios2/include/asm/mmu_context.h b/arch/nios2/include/asm/mmu_context.h
index 78ab3dacf579..4f99ed09b5a7 100644
--- a/arch/nios2/include/asm/mmu_context.h
+++ b/arch/nios2/include/asm/mmu_context.h
@@ -26,16 +26,13 @@ extern unsigned long get_pid_from_context(mm_context_t *ctx);
  */
 extern pgd_t *pgd_current;
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 /*
  * Initialize the context related info for a new mm_struct instance.
  *
  * Set all new contexts to 0, that way the generation will never match
  * the currently running generation when this context is switched in.
  */
+#define init_new_context init_new_context
 static inline int init_new_context(struct task_struct *tsk,
 					struct mm_struct *mm)
 {
@@ -43,26 +40,16 @@ static inline int init_new_context(struct task_struct *tsk,
 	return 0;
 }
 
-/*
- * Destroy context related info for an mm_struct that is about
- * to be put to rest.
- */
-static inline void destroy_context(struct mm_struct *mm)
-{
-}
-
 void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 		struct task_struct *tsk);
 
-static inline void deactivate_mm(struct task_struct *tsk,
-				struct mm_struct *mm)
-{
-}
-
 /*
  * After we have set current->mm to a new value, this activates
  * the context for the new mm so we see the new mappings.
  */
+#define activate_mm activate_mm
 void activate_mm(struct mm_struct *prev, struct mm_struct *next);
 
+#include <asm-generic/mmu_context.h>
+
 #endif /* _ASM_NIOS2_MMU_CONTEXT_H */
diff --git a/arch/nios2/mm/mmu_context.c b/arch/nios2/mm/mmu_context.c
index 45d6b9c58d67..d77aa542deb2 100644
--- a/arch/nios2/mm/mmu_context.c
+++ b/arch/nios2/mm/mmu_context.c
@@ -103,6 +103,7 @@ void switch_mm(struct mm_struct *prev, struct mm_struct *next,
  * After we have set current->mm to a new value, this activates
  * the context for the new mm so we see the new mappings.
  */
+#define activate_mm activate_mm
 void activate_mm(struct mm_struct *prev, struct mm_struct *next)
 {
 	next->context = get_new_context();
-- 
2.23.0



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

* [PATCH 14/24] openrisc: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (12 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 13/24] nios2: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-29 11:45   ` Stafford Horne
  2020-07-28  3:33 ` [PATCH 15/24] parisc: " Nicholas Piggin
                   ` (9 subsequent siblings)
  23 siblings, 1 reply; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Jonas Bonn, Stefan Kristiansson, Stafford Horne, openrisc

Cc: Jonas Bonn <jonas@southpole.se>
Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
Cc: Stafford Horne <shorne@gmail.com>
Cc: openrisc@lists.librecores.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/openrisc/include/asm/mmu_context.h | 8 +++-----
 arch/openrisc/mm/tlb.c                  | 2 ++
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/openrisc/include/asm/mmu_context.h b/arch/openrisc/include/asm/mmu_context.h
index ced577542e29..a6702384c77d 100644
--- a/arch/openrisc/include/asm/mmu_context.h
+++ b/arch/openrisc/include/asm/mmu_context.h
@@ -17,13 +17,13 @@
 
 #include <asm-generic/mm_hooks.h>
 
+#define init_new_context init_new_context
 extern int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
+#define destroy_context destroy_context
 extern void destroy_context(struct mm_struct *mm);
 extern void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 		      struct task_struct *tsk);
 
-#define deactivate_mm(tsk, mm)	do { } while (0)
-
 #define activate_mm(prev, next) switch_mm((prev), (next), NULL)
 
 /* current active pgd - this is similar to other processors pgd
@@ -32,8 +32,6 @@ extern void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 
 extern volatile pgd_t *current_pgd[]; /* defined in arch/openrisc/mm/fault.c */
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
+#include <asm-generic/mmu_context.h>
 
 #endif
diff --git a/arch/openrisc/mm/tlb.c b/arch/openrisc/mm/tlb.c
index 4b680aed8f5f..821aab4cf3be 100644
--- a/arch/openrisc/mm/tlb.c
+++ b/arch/openrisc/mm/tlb.c
@@ -159,6 +159,7 @@ void switch_mm(struct mm_struct *prev, struct mm_struct *next,
  * instance.
  */
 
+#define init_new_context init_new_context
 int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 {
 	mm->context = NO_CONTEXT;
@@ -170,6 +171,7 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
  * drops it.
  */
 
+#define destroy_context destroy_context
 void destroy_context(struct mm_struct *mm)
 {
 	flush_tlb_mm(mm);
-- 
2.23.0



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

* [PATCH 15/24] parisc: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (13 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 14/24] openrisc: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 16/24] powerpc: " Nicholas Piggin
                   ` (8 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	James E.J. Bottomley, Helge Deller, linux-parisc

Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Helge Deller <deller@gmx.de>
Cc: linux-parisc@vger.kernel.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/parisc/include/asm/mmu_context.h | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/parisc/include/asm/mmu_context.h b/arch/parisc/include/asm/mmu_context.h
index 07b89c74abeb..71f8a3679b83 100644
--- a/arch/parisc/include/asm/mmu_context.h
+++ b/arch/parisc/include/asm/mmu_context.h
@@ -8,16 +8,13 @@
 #include <asm/pgalloc.h>
 #include <asm-generic/mm_hooks.h>
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 /* on PA-RISC, we actually have enough contexts to justify an allocator
  * for them.  prumpf */
 
 extern unsigned long alloc_sid(void);
 extern void free_sid(unsigned long);
 
+#define init_new_context init_new_context
 static inline int
 init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 {
@@ -27,6 +24,7 @@ init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 	return 0;
 }
 
+#define destroy_context destroy_context
 static inline void
 destroy_context(struct mm_struct *mm)
 {
@@ -72,8 +70,7 @@ static inline void switch_mm(struct mm_struct *prev,
 }
 #define switch_mm_irqs_off switch_mm_irqs_off
 
-#define deactivate_mm(tsk,mm)	do { } while (0)
-
+#define activate_mm activate_mm
 static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
 {
 	/*
@@ -91,4 +88,7 @@ static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
 
 	switch_mm(prev,next,current);
 }
+
+#include <asm-generic/mmu_context.h>
+
 #endif
-- 
2.23.0



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

* [PATCH 16/24] powerpc: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (14 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 15/24] parisc: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:33 ` [PATCH 17/24] riscv: " Nicholas Piggin
                   ` (7 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Michael Ellerman, Benjamin Herrenschmidt, Paul Mackerras,
	linuxppc-dev

Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@ozlabs.org>
Cc: linuxppc-dev@lists.ozlabs.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/powerpc/include/asm/mmu_context.h | 22 +++++++---------------
 1 file changed, 7 insertions(+), 15 deletions(-)

diff --git a/arch/powerpc/include/asm/mmu_context.h b/arch/powerpc/include/asm/mmu_context.h
index 1a474f6b1992..242bd987247b 100644
--- a/arch/powerpc/include/asm/mmu_context.h
+++ b/arch/powerpc/include/asm/mmu_context.h
@@ -14,7 +14,9 @@
 /*
  * Most if the context management is out of line
  */
+#define init_new_context init_new_context
 extern int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
+#define destroy_context destroy_context
 extern void destroy_context(struct mm_struct *mm);
 #ifdef CONFIG_SPAPR_TCE_IOMMU
 struct mm_iommu_table_group_mem_t;
@@ -237,27 +239,15 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 }
 #define switch_mm_irqs_off switch_mm_irqs_off
 
-
-#define deactivate_mm(tsk,mm)	do { } while (0)
-
-/*
- * After we have set current->mm to a new value, this activates
- * the context for the new mm so we see the new mappings.
- */
-static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
-{
-	switch_mm(prev, next, current);
-}
-
-/* We don't currently use enter_lazy_tlb() for anything */
+#ifdef CONFIG_PPC_BOOK3E_64
+#define enter_lazy_tlb enter_lazy_tlb
 static inline void enter_lazy_tlb(struct mm_struct *mm,
 				  struct task_struct *tsk)
 {
 	/* 64-bit Book3E keeps track of current PGD in the PACA */
-#ifdef CONFIG_PPC_BOOK3E_64
 	get_paca()->pgd = NULL;
-#endif
 }
+#endif
 
 extern void arch_exit_mmap(struct mm_struct *mm);
 
@@ -300,5 +290,7 @@ static inline int arch_dup_mmap(struct mm_struct *oldmm,
 	return 0;
 }
 
+#include <asm-generic/mmu_context.h>
+
 #endif /* __KERNEL__ */
 #endif /* __ASM_POWERPC_MMU_CONTEXT_H */
-- 
2.23.0



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

* [PATCH 17/24] riscv: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (15 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 16/24] powerpc: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-30 21:20   ` Palmer Dabbelt
  2020-07-28  3:33 ` [PATCH 18/24] s390: " Nicholas Piggin
                   ` (6 subsequent siblings)
  23 siblings, 1 reply; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, linux-riscv

Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: linux-riscv@lists.infradead.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/riscv/include/asm/mmu_context.h | 22 ++--------------------
 1 file changed, 2 insertions(+), 20 deletions(-)

diff --git a/arch/riscv/include/asm/mmu_context.h b/arch/riscv/include/asm/mmu_context.h
index 67c463812e2d..250defa06f3a 100644
--- a/arch/riscv/include/asm/mmu_context.h
+++ b/arch/riscv/include/asm/mmu_context.h
@@ -13,34 +13,16 @@
 #include <linux/mm.h>
 #include <linux/sched.h>
 
-static inline void enter_lazy_tlb(struct mm_struct *mm,
-	struct task_struct *task)
-{
-}
-
-/* Initialize context-related info for a new mm_struct */
-static inline int init_new_context(struct task_struct *task,
-	struct mm_struct *mm)
-{
-	return 0;
-}
-
-static inline void destroy_context(struct mm_struct *mm)
-{
-}
-
 void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 	struct task_struct *task);
 
+#define activate_mm activate_mm
 static inline void activate_mm(struct mm_struct *prev,
 			       struct mm_struct *next)
 {
 	switch_mm(prev, next, NULL);
 }
 
-static inline void deactivate_mm(struct task_struct *task,
-	struct mm_struct *mm)
-{
-}
+#include <asm-generic/mmu_context.h>
 
 #endif /* _ASM_RISCV_MMU_CONTEXT_H */
-- 
2.23.0



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

* [PATCH 18/24] s390: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (16 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 17/24] riscv: " Nicholas Piggin
@ 2020-07-28  3:33 ` Nicholas Piggin
  2020-07-28  3:34 ` [PATCH 19/24] sh: " Nicholas Piggin
                   ` (5 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:33 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Heiko Carstens, Vasily Gorbik, Christian Borntraeger, linux-s390

Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: linux-s390@vger.kernel.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/s390/include/asm/mmu_context.h | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/arch/s390/include/asm/mmu_context.h b/arch/s390/include/asm/mmu_context.h
index c9f3d8a52756..66f9cf0a07e3 100644
--- a/arch/s390/include/asm/mmu_context.h
+++ b/arch/s390/include/asm/mmu_context.h
@@ -15,6 +15,7 @@
 #include <asm/ctl_reg.h>
 #include <asm-generic/mm_hooks.h>
 
+#define init_new_context init_new_context
 static inline int init_new_context(struct task_struct *tsk,
 				   struct mm_struct *mm)
 {
@@ -69,8 +70,6 @@ static inline int init_new_context(struct task_struct *tsk,
 	return 0;
 }
 
-#define destroy_context(mm)             do { } while (0)
-
 static inline void set_user_asce(struct mm_struct *mm)
 {
 	S390_lowcore.user_asce = mm->context.asce;
@@ -125,9 +124,7 @@ static inline void finish_arch_post_lock_switch(void)
 	set_fs(current->thread.mm_segment);
 }
 
-#define enter_lazy_tlb(mm,tsk)	do { } while (0)
-#define deactivate_mm(tsk,mm)	do { } while (0)
-
+#define activate_mm activate_mm
 static inline void activate_mm(struct mm_struct *prev,
                                struct mm_struct *next)
 {
@@ -136,4 +133,6 @@ static inline void activate_mm(struct mm_struct *prev,
 	set_user_asce(next);
 }
 
+#include <asm-generic/mmu_context.h>
+
 #endif /* __S390_MMU_CONTEXT_H */
-- 
2.23.0



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

* [PATCH 19/24] sh: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (17 preceding siblings ...)
  2020-07-28  3:33 ` [PATCH 18/24] s390: " Nicholas Piggin
@ 2020-07-28  3:34 ` Nicholas Piggin
  2020-07-28  3:34 ` [PATCH 20/24] sparc: " Nicholas Piggin
                   ` (4 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:34 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Yoshinori Sato, Rich Felker, linux-sh

Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Rich Felker <dalias@libc.org>
Cc: linux-sh@vger.kernel.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/sh/include/asm/mmu_context.h    | 5 ++---
 arch/sh/include/asm/mmu_context_32.h | 9 ---------
 2 files changed, 2 insertions(+), 12 deletions(-)

diff --git a/arch/sh/include/asm/mmu_context.h b/arch/sh/include/asm/mmu_context.h
index 9470d17c71c2..ce40147d4a7d 100644
--- a/arch/sh/include/asm/mmu_context.h
+++ b/arch/sh/include/asm/mmu_context.h
@@ -85,6 +85,7 @@ static inline void get_mmu_context(struct mm_struct *mm, unsigned int cpu)
  * Initialize the context related info for a new mm_struct
  * instance.
  */
+#define init_new_context init_new_context
 static inline int init_new_context(struct task_struct *tsk,
 				   struct mm_struct *mm)
 {
@@ -121,9 +122,7 @@ static inline void switch_mm(struct mm_struct *prev,
 			activate_context(next, cpu);
 }
 
-#define activate_mm(prev, next)		switch_mm((prev),(next),NULL)
-#define deactivate_mm(tsk,mm)		do { } while (0)
-#define enter_lazy_tlb(mm,tsk)		do { } while (0)
+#include <asm-generic/mmu_context.h>
 
 #else
 
diff --git a/arch/sh/include/asm/mmu_context_32.h b/arch/sh/include/asm/mmu_context_32.h
index 71bf12ef1f65..bc5034fa6249 100644
--- a/arch/sh/include/asm/mmu_context_32.h
+++ b/arch/sh/include/asm/mmu_context_32.h
@@ -2,15 +2,6 @@
 #ifndef __ASM_SH_MMU_CONTEXT_32_H
 #define __ASM_SH_MMU_CONTEXT_32_H
 
-/*
- * Destroy context related info for an mm_struct that is about
- * to be put to rest.
- */
-static inline void destroy_context(struct mm_struct *mm)
-{
-	/* Do nothing */
-}
-
 #ifdef CONFIG_CPU_HAS_PTEAEX
 static inline void set_asid(unsigned long asid)
 {
-- 
2.23.0



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

* [PATCH 20/24] sparc: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (18 preceding siblings ...)
  2020-07-28  3:34 ` [PATCH 19/24] sh: " Nicholas Piggin
@ 2020-07-28  3:34 ` Nicholas Piggin
  2020-07-28  3:34 ` [PATCH 21/24] um: " Nicholas Piggin
                   ` (3 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:34 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	David S. Miller, sparclinux

Cc: "David S. Miller" <davem@davemloft.net>
Cc: sparclinux@vger.kernel.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/sparc/include/asm/mmu_context_32.h | 10 ++++------
 arch/sparc/include/asm/mmu_context_64.h | 10 +++++-----
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/arch/sparc/include/asm/mmu_context_32.h b/arch/sparc/include/asm/mmu_context_32.h
index 7ddcb8badf70..509043f81560 100644
--- a/arch/sparc/include/asm/mmu_context_32.h
+++ b/arch/sparc/include/asm/mmu_context_32.h
@@ -6,13 +6,10 @@
 
 #include <asm-generic/mm_hooks.h>
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 /* Initialize a new mmu context.  This is invoked when a new
  * address space instance (unique or shared) is instantiated.
  */
+#define init_new_context init_new_context
 int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
 
 /* Destroy a dead context.  This occurs when mmput drops the
@@ -20,17 +17,18 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
  * all the page tables have been flushed.  Our job is to destroy
  * any remaining processor-specific state.
  */
+#define destroy_context destroy_context
 void destroy_context(struct mm_struct *mm);
 
 /* Switch the current MM context. */
 void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm,
 	       struct task_struct *tsk);
 
-#define deactivate_mm(tsk,mm)	do { } while (0)
-
 /* Activate a new MM instance for the current task. */
 #define activate_mm(active_mm, mm) switch_mm((active_mm), (mm), NULL)
 
+#include <asm-generic/mmu_context.h>
+
 #endif /* !(__ASSEMBLY__) */
 
 #endif /* !(__SPARC_MMU_CONTEXT_H) */
diff --git a/arch/sparc/include/asm/mmu_context_64.h b/arch/sparc/include/asm/mmu_context_64.h
index 312fcee8df2b..7a8380c63aab 100644
--- a/arch/sparc/include/asm/mmu_context_64.h
+++ b/arch/sparc/include/asm/mmu_context_64.h
@@ -16,17 +16,16 @@
 #include <asm-generic/mm_hooks.h>
 #include <asm/percpu.h>
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 extern spinlock_t ctx_alloc_lock;
 extern unsigned long tlb_context_cache;
 extern unsigned long mmu_context_bmap[];
 
 DECLARE_PER_CPU(struct mm_struct *, per_cpu_secondary_mm);
 void get_new_mmu_context(struct mm_struct *mm);
+
+#define init_new_context init_new_context
 int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
+#define destroy_context destroy_context
 void destroy_context(struct mm_struct *mm);
 
 void __tsb_context_switch(unsigned long pgd_pa,
@@ -136,7 +135,6 @@ static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, str
 	spin_unlock_irqrestore(&mm->context.lock, flags);
 }
 
-#define deactivate_mm(tsk,mm)	do { } while (0)
 #define activate_mm(active_mm, mm) switch_mm(active_mm, mm, NULL)
 
 #define  __HAVE_ARCH_START_CONTEXT_SWITCH
@@ -187,6 +185,8 @@ static inline void finish_arch_post_lock_switch(void)
 	}
 }
 
+#include <asm-generic/mmu_context.h>
+
 #endif /* !(__ASSEMBLY__) */
 
 #endif /* !(__SPARC64_MMU_CONTEXT_H) */
-- 
2.23.0



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

* [PATCH 21/24] um: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (19 preceding siblings ...)
  2020-07-28  3:34 ` [PATCH 20/24] sparc: " Nicholas Piggin
@ 2020-07-28  3:34 ` Nicholas Piggin
  2020-07-28  3:34 ` [PATCH 22/24] unicore32: " Nicholas Piggin
                   ` (2 subsequent siblings)
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:34 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Jeff Dike, Richard Weinberger, Anton Ivanov, linux-um

Cc: Jeff Dike <jdike@addtoit.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
Cc: linux-um@lists.infradead.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/um/include/asm/mmu_context.h | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/arch/um/include/asm/mmu_context.h b/arch/um/include/asm/mmu_context.h
index 17ddd4edf875..f8a100770691 100644
--- a/arch/um/include/asm/mmu_context.h
+++ b/arch/um/include/asm/mmu_context.h
@@ -37,10 +37,9 @@ static inline bool arch_vma_access_permitted(struct vm_area_struct *vma,
  * end asm-generic/mm_hooks.h functions
  */
 
-#define deactivate_mm(tsk,mm)	do { } while (0)
-
 extern void force_flush_all(void);
 
+#define activate_mm activate_mm
 static inline void activate_mm(struct mm_struct *old, struct mm_struct *new)
 {
 	/*
@@ -66,13 +65,12 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 	}
 }
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, 
-				  struct task_struct *tsk)
-{
-}
-
+#define init_new_context init_new_context
 extern int init_new_context(struct task_struct *task, struct mm_struct *mm);
 
+#define destroy_context destroy_context
 extern void destroy_context(struct mm_struct *mm);
 
+#include <asm-generic/mmu_context.h>
+
 #endif
-- 
2.23.0



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

* [PATCH 22/24] unicore32: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (20 preceding siblings ...)
  2020-07-28  3:34 ` [PATCH 21/24] um: " Nicholas Piggin
@ 2020-07-28  3:34 ` Nicholas Piggin
  2020-07-28  3:34 ` [PATCH 23/24] x86: " Nicholas Piggin
  2020-07-28  3:34 ` [PATCH 24/24] xtensa: " Nicholas Piggin
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:34 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann, Guan Xuetao

Cc: Guan Xuetao <gxt@pku.edu.cn>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/unicore32/include/asm/mmu_context.h | 24 +++---------------------
 1 file changed, 3 insertions(+), 21 deletions(-)

diff --git a/arch/unicore32/include/asm/mmu_context.h b/arch/unicore32/include/asm/mmu_context.h
index 388c0c811c68..e1751cb5439c 100644
--- a/arch/unicore32/include/asm/mmu_context.h
+++ b/arch/unicore32/include/asm/mmu_context.h
@@ -18,24 +18,6 @@
 #include <asm/cacheflush.h>
 #include <asm/cpu-single.h>
 
-#define init_new_context(tsk, mm)	0
-
-#define destroy_context(mm)		do { } while (0)
-
-/*
- * This is called when "tsk" is about to enter lazy TLB mode.
- *
- * mm:  describes the currently active mm context
- * tsk: task which is entering lazy tlb
- * cpu: cpu number which is entering lazy tlb
- *
- * tsk->mm will be NULL
- */
-static inline void
-enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
 /*
  * This is the actual mm switch as far as the scheduler
  * is concerned.  No registers are touched.  We avoid
@@ -52,9 +34,6 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
 		cpu_switch_mm(next->pgd, next);
 }
 
-#define deactivate_mm(tsk, mm)	do { } while (0)
-#define activate_mm(prev, next)	switch_mm(prev, next, NULL)
-
 /*
  * We are inserting a "fake" vma for the user-accessible vector page so
  * gdb and friends can get to it through ptrace and /proc/<pid>/mem.
@@ -95,4 +74,7 @@ static inline bool arch_vma_access_permitted(struct vm_area_struct *vma,
 	/* by default, allow everything */
 	return true;
 }
+
+#include <asm-generic/mmu_context.h>
+
 #endif
-- 
2.23.0



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

* [PATCH 23/24] x86: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (21 preceding siblings ...)
  2020-07-28  3:34 ` [PATCH 22/24] unicore32: " Nicholas Piggin
@ 2020-07-28  3:34 ` Nicholas Piggin
  2020-07-28 10:54   ` peterz
  2020-07-28  3:34 ` [PATCH 24/24] xtensa: " Nicholas Piggin
  23 siblings, 1 reply; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:34 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86,
	H. Peter Anvin

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: x86@kernel.org
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/x86/include/asm/mmu_context.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
index 47562147e70b..255750548433 100644
--- a/arch/x86/include/asm/mmu_context.h
+++ b/arch/x86/include/asm/mmu_context.h
@@ -92,12 +92,14 @@ static inline void switch_ldt(struct mm_struct *prev, struct mm_struct *next)
 }
 #endif
 
+#define enter_lazy_tlb enter_lazy_tlb
 extern void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk);
 
 /*
  * Init a new mm.  Used on mm copies, like at fork()
  * and on mm's that are brand-new, like at execve().
  */
+#define init_new_context init_new_context
 static inline int init_new_context(struct task_struct *tsk,
 				   struct mm_struct *mm)
 {
@@ -117,6 +119,8 @@ static inline int init_new_context(struct task_struct *tsk,
 	init_new_context_ldt(mm);
 	return 0;
 }
+
+#define destroy_context destroy_context
 static inline void destroy_context(struct mm_struct *mm)
 {
 	destroy_context_ldt(mm);
@@ -215,4 +219,6 @@ static inline bool arch_vma_access_permitted(struct vm_area_struct *vma,
 
 unsigned long __get_current_cr3_fast(void);
 
+#include <asm-generic/mmu_context.h>
+
 #endif /* _ASM_X86_MMU_CONTEXT_H */
-- 
2.23.0



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

* [PATCH 24/24] xtensa: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
                   ` (22 preceding siblings ...)
  2020-07-28  3:34 ` [PATCH 23/24] x86: " Nicholas Piggin
@ 2020-07-28  3:34 ` Nicholas Piggin
  23 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28  3:34 UTC (permalink / raw)
  To: linux-arch
  Cc: Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann,
	Chris Zankel, Max Filippov, linux-xtensa

Cc: Chris Zankel <chris@zankel.net>
Cc: Max Filippov <jcmvbkbc@gmail.com>
Cc: linux-xtensa@linux-xtensa.org
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/xtensa/include/asm/mmu_context.h   | 11 +++--------
 arch/xtensa/include/asm/nommu_context.h | 26 +------------------------
 2 files changed, 4 insertions(+), 33 deletions(-)

diff --git a/arch/xtensa/include/asm/mmu_context.h b/arch/xtensa/include/asm/mmu_context.h
index 74923ef3b228..e337ba9686e9 100644
--- a/arch/xtensa/include/asm/mmu_context.h
+++ b/arch/xtensa/include/asm/mmu_context.h
@@ -111,6 +111,7 @@ static inline void activate_context(struct mm_struct *mm, unsigned int cpu)
  * to -1 says the process has never run on any core.
  */
 
+#define init_new_context init_new_context
 static inline int init_new_context(struct task_struct *tsk,
 		struct mm_struct *mm)
 {
@@ -136,24 +137,18 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 		activate_context(next, cpu);
 }
 
-#define activate_mm(prev, next)	switch_mm((prev), (next), NULL)
-#define deactivate_mm(tsk, mm)	do { } while (0)
-
 /*
  * Destroy context related info for an mm_struct that is about
  * to be put to rest.
  */
+#define destroy_context destroy_context
 static inline void destroy_context(struct mm_struct *mm)
 {
 	invalidate_page_directory();
 }
 
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-	/* Nothing to do. */
-
-}
+#include <asm-generic/mmu_context.h>
 
 #endif /* CONFIG_MMU */
 #endif /* _XTENSA_MMU_CONTEXT_H */
diff --git a/arch/xtensa/include/asm/nommu_context.h b/arch/xtensa/include/asm/nommu_context.h
index 37251b2ef871..7c9d1918dc41 100644
--- a/arch/xtensa/include/asm/nommu_context.h
+++ b/arch/xtensa/include/asm/nommu_context.h
@@ -7,28 +7,4 @@ static inline void init_kio(void)
 {
 }
 
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
-{
-}
-
-static inline int init_new_context(struct task_struct *tsk,struct mm_struct *mm)
-{
-	return 0;
-}
-
-static inline void destroy_context(struct mm_struct *mm)
-{
-}
-
-static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
-{
-}
-
-static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
-				struct task_struct *tsk)
-{
-}
-
-static inline void deactivate_mm(struct task_struct *tsk, struct mm_struct *mm)
-{
-}
+#include <asm-generic/nommu_context.h>
-- 
2.23.0



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

* Re: [PATCH 03/24] arc: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 ` [PATCH 03/24] arc: " Nicholas Piggin
@ 2020-07-28  3:58   ` Vineet Gupta
  0 siblings, 0 replies; 40+ messages in thread
From: Vineet Gupta @ 2020-07-28  3:58 UTC (permalink / raw)
  To: Nicholas Piggin, linux-arch
  Cc: linux-kernel, linux-mm, Arnd Bergmann, linux-snps-arc

On 7/27/20 8:33 PM, Nicholas Piggin wrote:

>  /*
> - * Called at the time of execve() to get a new ASID
> - * Note the subtlety here: get_new_mmu_context() behaves differently here
> - * vs. in switch_mm(). Here it always returns a new ASID, because mm has
> - * an unallocated "initial" value, while in latter, it moves to a new ASID,
> - * only if it was unallocated
> + * activate_mm defaults to switch_mm and is called at the time of execve() to

With activate_mm() definition actually gone, perhaps add "activate_mm() comes from
generic code..." to provide next reader about the "spurious looking comment"

> + * get a new ASID Note the subtlety here: get_new_mmu_context() behaves
> + * differently here vs. in switch_mm(). Here it always returns a new ASID,
> + * because mm has an unallocated "initial" value, while in latter, it moves to
> + * a new ASID, only if it was unallocated
>   */
> -#define activate_mm(prev, next)		switch_mm(prev, next, NULL)
>  
>  /* it seemed that deactivate_mm( ) is a reasonable place to do book-keeping
>   * for retiring-mm. However destroy_context( ) still needs to do that because
> @@ -168,8 +169,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
>   * there is a good chance that task gets sched-out/in, making it's ASID valid
>   * again (this teased me for a whole day).
>   */
> -#define deactivate_mm(tsk, mm)   do { } while (0)

same for deactivate_mm()

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

* Re: [PATCH 01/24] asm-generic: add generic versions of mmu context functions
  2020-07-28  3:33 ` [PATCH 01/24] asm-generic: add generic versions of mmu context functions Nicholas Piggin
@ 2020-07-28  4:01   ` Vineet Gupta
  2020-07-28 10:37     ` Nicholas Piggin
  2020-08-26 13:59     ` Nicholas Piggin
  2020-07-28  5:53   ` kernel test robot
  2020-07-28 23:52   ` kernel test robot
  2 siblings, 2 replies; 40+ messages in thread
From: Vineet Gupta @ 2020-07-28  4:01 UTC (permalink / raw)
  To: Nicholas Piggin, linux-arch; +Cc: linux-kernel, linux-mm, Arnd Bergmann

On 7/27/20 8:33 PM, Nicholas Piggin wrote:
> Many of these are no-ops on many architectures, so extend mmu_context.h
> to cover MMU and NOMMU, and split the NOMMU bits out to nommu_context.h
> 

> -static inline void switch_mm(struct mm_struct *prev,
> -			struct mm_struct *next,
> -			struct task_struct *tsk)
> +/**
> + * activate_mm - called after exec switches the current task to a new mm, to switch to it
> + * @prev_mm: previous mm of this task
> + * @next_mm: new mm
> + */
> +#ifndef activate_mm
> +static inline void activate_mm(struct mm_struct *prev_mm,
> +			       struct mm_struct *next_mm)
>  {
> +	switch_mm(prev_mm, next_mm, current);
>  }
> +#endif

Is activate_mm() really needed now. It seems most arches have
   activate_mm(p, n) -> switch_mm(p, n, NULL)

And if we are passing current, that can be pushed inside switch_mm()

>  
> -static inline void activate_mm(struct mm_struct *prev_mm,
> -			       struct mm_struct *next_mm)

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

* Re: [PATCH 06/24] csky: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 ` [PATCH 06/24] csky: " Nicholas Piggin
@ 2020-07-28  4:09   ` Guo Ren
  0 siblings, 0 replies; 40+ messages in thread
From: Guo Ren @ 2020-07-28  4:09 UTC (permalink / raw)
  To: Nicholas Piggin
  Cc: linux-arch, Linux Kernel Mailing List, linux-mm, Arnd Bergmann,
	linux-csky

Acked-by: Guo Ren <guoren@kernel.org>

On Tue, Jul 28, 2020 at 11:34 AM Nicholas Piggin <npiggin@gmail.com> wrote:
>
> Cc: Guo Ren <guoren@kernel.org>
> Cc: linux-csky@vger.kernel.org
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>  arch/csky/include/asm/mmu_context.h | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/arch/csky/include/asm/mmu_context.h b/arch/csky/include/asm/mmu_context.h
> index abdf1f1cb6ec..b227d29393a8 100644
> --- a/arch/csky/include/asm/mmu_context.h
> +++ b/arch/csky/include/asm/mmu_context.h
> @@ -24,11 +24,6 @@
>  #define cpu_asid(mm)           (atomic64_read(&mm->context.asid) & ASID_MASK)
>
>  #define init_new_context(tsk,mm)       ({ atomic64_set(&(mm)->context.asid, 0); 0; })
> -#define activate_mm(prev,next)         switch_mm(prev, next, current)
> -
> -#define destroy_context(mm)            do {} while (0)
> -#define enter_lazy_tlb(mm, tsk)                do {} while (0)
> -#define deactivate_mm(tsk, mm)         do {} while (0)
>
>  void check_and_switch_context(struct mm_struct *mm, unsigned int cpu);
>
> @@ -46,4 +41,7 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
>
>         flush_icache_deferred(next);
>  }
> +
> +#include <asm-generic/mmu_context.h>
> +
>  #endif /* __ASM_CSKY_MMU_CONTEXT_H */
> --
> 2.23.0
>


-- 
Best Regards
 Guo Ren

ML: https://lore.kernel.org/linux-csky/


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

* Re: [PATCH 04/24] arm: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 ` [PATCH 04/24] arm: " Nicholas Piggin
@ 2020-07-28  4:14   ` Vineet Gupta
  2020-08-26 14:14     ` Nicholas Piggin
  0 siblings, 1 reply; 40+ messages in thread
From: Vineet Gupta @ 2020-07-28  4:14 UTC (permalink / raw)
  To: Nicholas Piggin, linux-arch
  Cc: linux-kernel, linux-mm, Arnd Bergmann, Russell King,
	linux-arm-kernel, arcml

On 7/27/20 8:33 PM, Nicholas Piggin wrote:
> Cc: Russell King <linux@armlinux.org.uk>
> Cc: linux-arm-kernel@lists.infradead.org
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>  arch/arm/include/asm/mmu_context.h | 26 +++-----------------------
>  1 file changed, 3 insertions(+), 23 deletions(-)
> 
> diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h
> index f99ed524fe41..84e58956fcab 100644
> --- a/arch/arm/include/asm/mmu_context.h
> +++ b/arch/arm/include/asm/mmu_context.h
> @@ -26,6 +26,8 @@ void __check_vmalloc_seq(struct mm_struct *mm);
>  #ifdef CONFIG_CPU_HAS_ASID
>  
>  void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk);
> +
> +#define init_new_context init_new_context
>  static inline int
>  init_new_context(struct task_struct *tsk, struct mm_struct *mm)
>  {
> @@ -92,32 +94,10 @@ static inline void finish_arch_post_lock_switch(void)
>  
>  #endif	/* CONFIG_MMU */
>  
> -static inline int
> -init_new_context(struct task_struct *tsk, struct mm_struct *mm)
> -{
> -	return 0;
> -}
> -
> -
>  #endif	/* CONFIG_CPU_HAS_ASID */
>  
> -#define destroy_context(mm)		do { } while(0)
>  #define activate_mm(prev,next)		switch_mm(prev, next, NULL)

Actually this can also go away too.

ARM switch_mm(prev, next, tsk) -> check_and_switch_context(next, tsk) but latter
doesn't use @tsk at all. With patch below, you can remove above as well...

-------->
From 672e0f78a94892794057a5a7542d85b71c1369c4 Mon Sep 17 00:00:00 2001
From: Vineet Gupta <vgupta@synopsys.com>
Date: Mon, 27 Jul 2020 21:12:42 -0700
Subject: [PATCH] ARM: mm: check_and_switch_context() doesn't use @tsk arg

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 arch/arm/include/asm/efi.h         | 2 +-
 arch/arm/include/asm/mmu_context.h | 5 ++---
 arch/arm/mm/context.c              | 2 +-
 3 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/arch/arm/include/asm/efi.h b/arch/arm/include/asm/efi.h
index 5dcf3c6011b7..0995b308149d 100644
--- a/arch/arm/include/asm/efi.h
+++ b/arch/arm/include/asm/efi.h
@@ -37,7 +37,7 @@ int efi_set_mapping_permissions(struct mm_struct *mm,
efi_memory_desc_t *md);

 static inline void efi_set_pgd(struct mm_struct *mm)
 {
-	check_and_switch_context(mm, NULL);
+	check_and_switch_context(mm);
 }

 void efi_virtmap_load(void);
diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h
index f99ed524fe41..c96360fa3466 100644
--- a/arch/arm/include/asm/mmu_context.h
+++ b/arch/arm/include/asm/mmu_context.h
@@ -25,7 +25,7 @@ void __check_vmalloc_seq(struct mm_struct *mm);

 #ifdef CONFIG_CPU_HAS_ASID

-void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk);
+void check_and_switch_context(struct mm_struct *mm);
 static inline int
 init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 {
@@ -47,8 +47,7 @@ static inline void a15_erratum_get_cpumask(int this_cpu, struct
mm_struct *mm,

 #ifdef CONFIG_MMU

-static inline void check_and_switch_context(struct mm_struct *mm,
-					    struct task_struct *tsk)
+static inline void check_and_switch_context(struct mm_struct *mm)
 {
 	if (unlikely(mm->context.vmalloc_seq != init_mm.context.vmalloc_seq))
 		__check_vmalloc_seq(mm);
diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c
index b7525b433f3e..86c411e1d7cb 100644
--- a/arch/arm/mm/context.c
+++ b/arch/arm/mm/context.c
@@ -234,7 +234,7 @@ static u64 new_context(struct mm_struct *mm, unsigned int cpu)
 	return asid | generation;
 }

-void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk)
+void check_and_switch_context(struct mm_struct *mm)
 {
 	unsigned long flags;
 	unsigned int cpu = smp_processor_id();
-- 
2.20.1


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

* Re: [PATCH 01/24] asm-generic: add generic versions of mmu context functions
  2020-07-28  3:33 ` [PATCH 01/24] asm-generic: add generic versions of mmu context functions Nicholas Piggin
  2020-07-28  4:01   ` Vineet Gupta
@ 2020-07-28  5:53   ` kernel test robot
  2020-07-28 23:52   ` kernel test robot
  2 siblings, 0 replies; 40+ messages in thread
From: kernel test robot @ 2020-07-28  5:53 UTC (permalink / raw)
  To: Nicholas Piggin, linux-arch
  Cc: kbuild-all, Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann


[-- Attachment #1: Type: text/plain, Size: 3096 bytes --]

Hi Nicholas,

I love your patch! Yet something to improve:

[auto build test ERROR on openrisc/for-next]
[also build test ERROR on sparc/master linus/master asm-generic/master v5.8-rc7 next-20200727]
[cannot apply to nios2/for-linus]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Nicholas-Piggin/Use-asm-generic-for-mmu_context-no-op-functions/20200728-113854
base:   https://github.com/openrisc/linux.git for-next
config: c6x-allyesconfig (attached as .config)
compiler: c6x-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=c6x 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from ./arch/c6x/include/generated/asm/mmu_context.h:1,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/core.c:9:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
>> include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   cc1: some warnings being treated as errors
--
   In file included from ./arch/c6x/include/generated/asm/mmu_context.h:1,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/rt.c:6:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
>> include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   kernel//sched/rt.c: At top level:
   kernel//sched/rt.c:668:6: warning: no previous prototype for 'sched_rt_bandwidth_account' [-Wmissing-prototypes]
     668 | bool sched_rt_bandwidth_account(struct rt_rq *rt_rq)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/switch_mm +59 include/asm-generic/mmu_context.h

    49	
    50	/**
    51	 * activate_mm - called after exec switches the current task to a new mm, to switch to it
    52	 * @prev_mm: previous mm of this task
    53	 * @next_mm: new mm
    54	 */
    55	#ifndef activate_mm
    56	static inline void activate_mm(struct mm_struct *prev_mm,
    57				       struct mm_struct *next_mm)
    58	{
  > 59		switch_mm(prev_mm, next_mm, current);
    60	}
    61	#endif
    62	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 53627 bytes --]

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

* Re: [PATCH 01/24] asm-generic: add generic versions of mmu context functions
  2020-07-28  4:01   ` Vineet Gupta
@ 2020-07-28 10:37     ` Nicholas Piggin
  2020-08-26 13:59     ` Nicholas Piggin
  1 sibling, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-07-28 10:37 UTC (permalink / raw)
  To: linux-arch, Vineet Gupta; +Cc: Arnd Bergmann, linux-kernel, linux-mm

Excerpts from Vineet Gupta's message of July 28, 2020 2:01 pm:
> On 7/27/20 8:33 PM, Nicholas Piggin wrote:
>> Many of these are no-ops on many architectures, so extend mmu_context.h
>> to cover MMU and NOMMU, and split the NOMMU bits out to nommu_context.h
>> 
> 
>> -static inline void switch_mm(struct mm_struct *prev,
>> -			struct mm_struct *next,
>> -			struct task_struct *tsk)
>> +/**
>> + * activate_mm - called after exec switches the current task to a new mm, to switch to it
>> + * @prev_mm: previous mm of this task
>> + * @next_mm: new mm
>> + */
>> +#ifndef activate_mm
>> +static inline void activate_mm(struct mm_struct *prev_mm,
>> +			       struct mm_struct *next_mm)
>>  {
>> +	switch_mm(prev_mm, next_mm, current);
>>  }
>> +#endif
> 
> Is activate_mm() really needed now. It seems most arches have
>    activate_mm(p, n) -> switch_mm(p, n, NULL)
> 
> And if we are passing current, that can be pushed inside switch_mm()

Thanks for taking a look, I think there may be more consolidation
like this possible, and certainly some of the arch patches could
have gone a bit further.

I wanted to be fairly careful to make only quite trivial changes
(only the obvious no-ops) for the first iteration, but once this
is in the tree it should become a fair bit easier to do some
of your suggestions.

There's a few things that make activate_mm->switch_mm not quite
simple - alpha, nios2, parisc, s390, maybe x86.

Thanks,
Nick


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

* Re: [PATCH 23/24] x86: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:34 ` [PATCH 23/24] x86: " Nicholas Piggin
@ 2020-07-28 10:54   ` peterz
  0 siblings, 0 replies; 40+ messages in thread
From: peterz @ 2020-07-28 10:54 UTC (permalink / raw)
  To: Nicholas Piggin
  Cc: linux-arch, linux-kernel, linux-mm, Arnd Bergmann,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86,
	H. Peter Anvin

On Tue, Jul 28, 2020 at 01:34:04PM +1000, Nicholas Piggin wrote:
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: Borislav Petkov <bp@alien8.de>
> Cc: x86@kernel.org
> Cc: "H. Peter Anvin" <hpa@zytor.com>
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>

Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>

> ---
>  arch/x86/include/asm/mmu_context.h | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
> index 47562147e70b..255750548433 100644
> --- a/arch/x86/include/asm/mmu_context.h
> +++ b/arch/x86/include/asm/mmu_context.h
> @@ -92,12 +92,14 @@ static inline void switch_ldt(struct mm_struct *prev, struct mm_struct *next)
>  }
>  #endif
>  
> +#define enter_lazy_tlb enter_lazy_tlb
>  extern void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk);
>  
>  /*
>   * Init a new mm.  Used on mm copies, like at fork()
>   * and on mm's that are brand-new, like at execve().
>   */
> +#define init_new_context init_new_context
>  static inline int init_new_context(struct task_struct *tsk,
>  				   struct mm_struct *mm)
>  {
> @@ -117,6 +119,8 @@ static inline int init_new_context(struct task_struct *tsk,
>  	init_new_context_ldt(mm);
>  	return 0;
>  }
> +
> +#define destroy_context destroy_context
>  static inline void destroy_context(struct mm_struct *mm)
>  {
>  	destroy_context_ldt(mm);
> @@ -215,4 +219,6 @@ static inline bool arch_vma_access_permitted(struct vm_area_struct *vma,
>  
>  unsigned long __get_current_cr3_fast(void);
>  
> +#include <asm-generic/mmu_context.h>
> +
>  #endif /* _ASM_X86_MMU_CONTEXT_H */
> -- 
> 2.23.0
> 


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

* Re: [PATCH 01/24] asm-generic: add generic versions of mmu context functions
  2020-07-28  3:33 ` [PATCH 01/24] asm-generic: add generic versions of mmu context functions Nicholas Piggin
  2020-07-28  4:01   ` Vineet Gupta
  2020-07-28  5:53   ` kernel test robot
@ 2020-07-28 23:52   ` kernel test robot
  2 siblings, 0 replies; 40+ messages in thread
From: kernel test robot @ 2020-07-28 23:52 UTC (permalink / raw)
  To: Nicholas Piggin, linux-arch
  Cc: kbuild-all, Nicholas Piggin, linux-kernel, linux-mm, Arnd Bergmann


[-- Attachment #1: Type: text/plain, Size: 13783 bytes --]

Hi Nicholas,

I love your patch! Yet something to improve:

[auto build test ERROR on openrisc/for-next]
[also build test ERROR on sparc-next/master sparc/master linus/master asm-generic/master xtensa/for_next v5.8-rc7 next-20200728]
[cannot apply to nios2/for-linus]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Nicholas-Piggin/Use-asm-generic-for-mmu_context-no-op-functions/20200728-113854
base:   https://github.com/openrisc/linux.git for-next
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sh 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/process_32.c:26:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
   include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/process_32.c:26:
   include/asm-generic/nommu_context.h: At top level:
   include/asm-generic/nommu_context.h:13:20: error: conflicting types for 'switch_mm' [-Werror]
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
>> include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/process_32.c:26:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   cc1: all warnings being treated as errors
--
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/setup.c:44:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
   include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/setup.c:44:
   include/asm-generic/nommu_context.h: At top level:
   include/asm-generic/nommu_context.h:13:20: error: conflicting types for 'switch_mm' [-Werror]
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
>> include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/setup.c:44:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   arch/sh/kernel/setup.c:248:12: error: no previous prototype for 'sh_fdt_init' [-Werror=missing-prototypes]
     248 | void __ref sh_fdt_init(phys_addr_t dt_phys)
         |            ^~~~~~~~~~~
   cc1: all warnings being treated as errors
--
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/hw_breakpoint.c:21:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
   include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/hw_breakpoint.c:21:
   include/asm-generic/nommu_context.h: At top level:
   include/asm-generic/nommu_context.h:13:20: error: conflicting types for 'switch_mm' [-Werror]
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
>> include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/hw_breakpoint.c:21:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   arch/sh/kernel/hw_breakpoint.c:135:5: error: no previous prototype for 'arch_bp_generic_fields' [-Werror=missing-prototypes]
     135 | int arch_bp_generic_fields(int sh_len, int sh_type,
         |     ^~~~~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors
--
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/cpu/init.c:14:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
   include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/cpu/init.c:14:
   include/asm-generic/nommu_context.h: At top level:
>> include/asm-generic/nommu_context.h:13:20: warning: conflicting types for 'switch_mm'
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
>> include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from arch/sh/kernel/cpu/init.c:14:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   arch/sh/kernel/cpu/init.c:99:29: warning: no previous prototype for 'l2_cache_init' [-Wmissing-prototypes]
      99 | void __attribute__ ((weak)) l2_cache_init(void)
         |                             ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from kernel/fork.c:101:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
   include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/sh/include/asm/mmu_context.h:137,
                    from kernel/fork.c:101:
   include/asm-generic/nommu_context.h: At top level:
>> include/asm-generic/nommu_context.h:13:20: warning: conflicting types for 'switch_mm'
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
>> include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from kernel/fork.c:101:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   cc1: some warnings being treated as errors
--
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from kernel/exit.c:69:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
   include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/sh/include/asm/mmu_context.h:137,
                    from kernel/exit.c:69:
   include/asm-generic/nommu_context.h: At top level:
>> include/asm-generic/nommu_context.h:13:20: warning: conflicting types for 'switch_mm'
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
>> include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from kernel/exit.c:69:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   kernel/exit.c:1714:13: warning: no previous prototype for 'abort' [-Wmissing-prototypes]
    1714 | __weak void abort(void)
         |             ^~~~~
   cc1: some warnings being treated as errors
--
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from include/linux/mmu_context.h:5,
                    from kernel/sched/sched.h:54,
                    from kernel/sched/rt.c:6:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
   include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/sh/include/asm/mmu_context.h:137,
                    from include/linux/mmu_context.h:5,
                    from kernel/sched/sched.h:54,
                    from kernel/sched/rt.c:6:
   include/asm-generic/nommu_context.h: At top level:
>> include/asm-generic/nommu_context.h:13:20: warning: conflicting types for 'switch_mm'
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
>> include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from include/linux/mmu_context.h:5,
                    from kernel/sched/sched.h:54,
                    from kernel/sched/rt.c:6:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   kernel/sched/rt.c:668:6: warning: no previous prototype for 'sched_rt_bandwidth_account' [-Wmissing-prototypes]
     668 | bool sched_rt_bandwidth_account(struct rt_rq *rt_rq)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from mm/nommu.c:43:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
   include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/sh/include/asm/mmu_context.h:137,
                    from mm/nommu.c:43:
   include/asm-generic/nommu_context.h: At top level:
>> include/asm-generic/nommu_context.h:13:20: warning: conflicting types for 'switch_mm'
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
>> include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/sh/include/asm/mmu_context.h:137,
                    from mm/nommu.c:43:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   mm/nommu.c:1665:15: warning: no previous prototype for 'arch_get_unmapped_area' [-Wmissing-prototypes]
    1665 | unsigned long arch_get_unmapped_area(struct file *file, unsigned long addr,
         |               ^~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/switch_mm +13 include/asm-generic/nommu_context.h

    12	
  > 13	static inline void switch_mm(struct mm_struct *prev,
    14				struct mm_struct *next,
    15				struct task_struct *tsk)
    16	{
    17	}
    18	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 53840 bytes --]

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

* Re: [PATCH 14/24] openrisc: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 ` [PATCH 14/24] openrisc: " Nicholas Piggin
@ 2020-07-29 11:45   ` Stafford Horne
  2020-08-26 14:33     ` Nicholas Piggin
  0 siblings, 1 reply; 40+ messages in thread
From: Stafford Horne @ 2020-07-29 11:45 UTC (permalink / raw)
  To: Nicholas Piggin
  Cc: linux-arch, linux-kernel, linux-mm, Arnd Bergmann, Jonas Bonn,
	Stefan Kristiansson, openrisc

On Tue, Jul 28, 2020 at 01:33:55PM +1000, Nicholas Piggin wrote:
> Cc: Jonas Bonn <jonas@southpole.se>
> Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
> Cc: Stafford Horne <shorne@gmail.com>
> Cc: openrisc@lists.librecores.org
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>  arch/openrisc/include/asm/mmu_context.h | 8 +++-----
>  arch/openrisc/mm/tlb.c                  | 2 ++
>  2 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/openrisc/include/asm/mmu_context.h b/arch/openrisc/include/asm/mmu_context.h
> index ced577542e29..a6702384c77d 100644
> --- a/arch/openrisc/include/asm/mmu_context.h
> +++ b/arch/openrisc/include/asm/mmu_context.h
> @@ -17,13 +17,13 @@
>  
>  #include <asm-generic/mm_hooks.h>
>  
> +#define init_new_context init_new_context
>  extern int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
> +#define destroy_context destroy_context
>  extern void destroy_context(struct mm_struct *mm);
>  extern void switch_mm(struct mm_struct *prev, struct mm_struct *next,
>  		      struct task_struct *tsk);
>  
> -#define deactivate_mm(tsk, mm)	do { } while (0)
> -
>  #define activate_mm(prev, next) switch_mm((prev), (next), NULL)
>  
>  /* current active pgd - this is similar to other processors pgd
> @@ -32,8 +32,6 @@ extern void switch_mm(struct mm_struct *prev, struct mm_struct *next,
>  
>  extern volatile pgd_t *current_pgd[]; /* defined in arch/openrisc/mm/fault.c */
>  
> -static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
> -{
> -}
> +#include <asm-generic/mmu_context.h>

This looks ok.

>  #endif
> diff --git a/arch/openrisc/mm/tlb.c b/arch/openrisc/mm/tlb.c
> index 4b680aed8f5f..821aab4cf3be 100644
> --- a/arch/openrisc/mm/tlb.c
> +++ b/arch/openrisc/mm/tlb.c
> @@ -159,6 +159,7 @@ void switch_mm(struct mm_struct *prev, struct mm_struct *next,
>   * instance.
>   */
>  
> +#define init_new_context init_new_context
>  int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
>  {
>  	mm->context = NO_CONTEXT;
> @@ -170,6 +171,7 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
>   * drops it.
>   */
>  
> +#define destroy_context destroy_context
>  void destroy_context(struct mm_struct *mm)
>  {
>  	flush_tlb_mm(mm);

I don't think we need the #define's in the .c file.  Do we?

-Stafford

> -- 
> 2.23.0
> 


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

* Re: [PATCH 09/24] m68k: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 ` [PATCH 09/24] m68k: " Nicholas Piggin
@ 2020-07-30  8:11   ` kernel test robot
  0 siblings, 0 replies; 40+ messages in thread
From: kernel test robot @ 2020-07-30  8:11 UTC (permalink / raw)
  To: Nicholas Piggin, linux-arch
  Cc: kbuild-all, Nicholas Piggin, linux-kernel, linux-mm,
	Arnd Bergmann, Geert Uytterhoeven, linux-m68k


[-- Attachment #1: Type: text/plain, Size: 11466 bytes --]

Hi Nicholas,

I love your patch! Yet something to improve:

[auto build test ERROR on openrisc/for-next]
[also build test ERROR on sparc-next/master sparc/master linus/master asm-generic/master v5.8-rc7 next-20200729]
[cannot apply to nios2/for-linus xtensa/for_next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Nicholas-Piggin/Use-asm-generic-for-mmu_context-no-op-functions/20200728-113854
base:   https://github.com/openrisc/linux.git for-next
config: m68k-randconfig-r005-20200729 (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=m68k 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/asm-generic/bug.h:5,
                    from arch/m68k/include/asm/bug.h:32,
                    from include/linux/bug.h:5,
                    from include/linux/thread_info.h:12,
                    from arch/m68k/include/asm/current.h:16,
                    from include/linux/sched.h:12,
                    from kernel//sched/sched.h:5,
                    from kernel//sched/core.c:9:
   include/linux/scatterlist.h: In function 'sg_set_buf':
   arch/m68k/include/asm/page_no.h:33:50: warning: ordered comparison of pointer with null pointer [-Wextra]
      33 | #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
         |                                                  ^~
   include/linux/compiler.h:78:42: note: in definition of macro 'unlikely'
      78 | # define unlikely(x) __builtin_expect(!!(x), 0)
         |                                          ^
   include/linux/scatterlist.h:143:2: note: in expansion of macro 'BUG_ON'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |  ^~~~~~
   include/linux/scatterlist.h:143:10: note: in expansion of macro 'virt_addr_valid'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |          ^~~~~~~~~~~~~~~
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/m68k/include/asm/mmu_context.h:304,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/core.c:9:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
>> include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/m68k/include/asm/mmu_context.h:304,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/core.c:9:
   include/asm-generic/nommu_context.h: At top level:
   include/asm-generic/nommu_context.h:13:20: warning: conflicting types for 'switch_mm'
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
   include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/m68k/include/asm/mmu_context.h:304,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/core.c:9:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   kernel//sched/core.c: In function 'ttwu_stat':
   kernel//sched/core.c:2154:13: warning: variable 'rq' set but not used [-Wunused-but-set-variable]
    2154 |  struct rq *rq;
         |             ^~
   cc1: some warnings being treated as errors
--
   In file included from include/asm-generic/bug.h:5,
                    from arch/m68k/include/asm/bug.h:32,
                    from include/linux/bug.h:5,
                    from include/linux/thread_info.h:12,
                    from arch/m68k/include/asm/current.h:16,
                    from include/linux/sched.h:12,
                    from kernel//sched/sched.h:5,
                    from kernel//sched/loadavg.c:9:
   include/linux/scatterlist.h: In function 'sg_set_buf':
   arch/m68k/include/asm/page_no.h:33:50: warning: ordered comparison of pointer with null pointer [-Wextra]
      33 | #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
         |                                                  ^~
   include/linux/compiler.h:78:42: note: in definition of macro 'unlikely'
      78 | # define unlikely(x) __builtin_expect(!!(x), 0)
         |                                          ^
   include/linux/scatterlist.h:143:2: note: in expansion of macro 'BUG_ON'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |  ^~~~~~
   include/linux/scatterlist.h:143:10: note: in expansion of macro 'virt_addr_valid'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |          ^~~~~~~~~~~~~~~
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/m68k/include/asm/mmu_context.h:304,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/loadavg.c:9:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
>> include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/m68k/include/asm/mmu_context.h:304,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/loadavg.c:9:
   include/asm-generic/nommu_context.h: At top level:
   include/asm-generic/nommu_context.h:13:20: warning: conflicting types for 'switch_mm'
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
   include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/m68k/include/asm/mmu_context.h:304,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/loadavg.c:9:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   cc1: some warnings being treated as errors
--
   In file included from include/asm-generic/bug.h:5,
                    from arch/m68k/include/asm/bug.h:32,
                    from include/linux/bug.h:5,
                    from include/linux/thread_info.h:12,
                    from arch/m68k/include/asm/current.h:16,
                    from include/linux/sched.h:12,
                    from kernel//sched/sched.h:5,
                    from kernel//sched/rt.c:6:
   include/linux/scatterlist.h: In function 'sg_set_buf':
   arch/m68k/include/asm/page_no.h:33:50: warning: ordered comparison of pointer with null pointer [-Wextra]
      33 | #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
         |                                                  ^~
   include/linux/compiler.h:78:42: note: in definition of macro 'unlikely'
      78 | # define unlikely(x) __builtin_expect(!!(x), 0)
         |                                          ^
   include/linux/scatterlist.h:143:2: note: in expansion of macro 'BUG_ON'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |  ^~~~~~
   include/linux/scatterlist.h:143:10: note: in expansion of macro 'virt_addr_valid'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |          ^~~~~~~~~~~~~~~
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/m68k/include/asm/mmu_context.h:304,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/rt.c:6:
   include/asm-generic/mmu_context.h: In function 'activate_mm':
>> include/asm-generic/mmu_context.h:59:2: error: implicit declaration of function 'switch_mm' [-Werror=implicit-function-declaration]
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   In file included from arch/m68k/include/asm/mmu_context.h:304,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/rt.c:6:
   include/asm-generic/nommu_context.h: At top level:
   include/asm-generic/nommu_context.h:13:20: warning: conflicting types for 'switch_mm'
      13 | static inline void switch_mm(struct mm_struct *prev,
         |                    ^~~~~~~~~
   include/asm-generic/nommu_context.h:13:20: error: static declaration of 'switch_mm' follows non-static declaration
   In file included from include/asm-generic/nommu_context.h:11,
                    from arch/m68k/include/asm/mmu_context.h:304,
                    from include/linux/mmu_context.h:5,
                    from kernel//sched/sched.h:54,
                    from kernel//sched/rt.c:6:
   include/asm-generic/mmu_context.h:59:2: note: previous implicit declaration of 'switch_mm' was here
      59 |  switch_mm(prev_mm, next_mm, current);
         |  ^~~~~~~~~
   kernel//sched/rt.c:668:6: warning: no previous prototype for 'sched_rt_bandwidth_account' [-Wmissing-prototypes]
     668 | bool sched_rt_bandwidth_account(struct rt_rq *rt_rq)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/switch_mm +59 include/asm-generic/mmu_context.h

5c01b46bb6bb8f2 Arnd Bergmann   2009-05-13  49  
49435c52fb90a3c Nicholas Piggin 2020-07-28  50  /**
49435c52fb90a3c Nicholas Piggin 2020-07-28  51   * activate_mm - called after exec switches the current task to a new mm, to switch to it
49435c52fb90a3c Nicholas Piggin 2020-07-28  52   * @prev_mm: previous mm of this task
49435c52fb90a3c Nicholas Piggin 2020-07-28  53   * @next_mm: new mm
49435c52fb90a3c Nicholas Piggin 2020-07-28  54   */
49435c52fb90a3c Nicholas Piggin 2020-07-28  55  #ifndef activate_mm
49435c52fb90a3c Nicholas Piggin 2020-07-28  56  static inline void activate_mm(struct mm_struct *prev_mm,
49435c52fb90a3c Nicholas Piggin 2020-07-28  57  			       struct mm_struct *next_mm)
5c01b46bb6bb8f2 Arnd Bergmann   2009-05-13  58  {
49435c52fb90a3c Nicholas Piggin 2020-07-28 @59  	switch_mm(prev_mm, next_mm, current);
5c01b46bb6bb8f2 Arnd Bergmann   2009-05-13  60  }
49435c52fb90a3c Nicholas Piggin 2020-07-28  61  #endif
5c01b46bb6bb8f2 Arnd Bergmann   2009-05-13  62  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28172 bytes --]

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

* Re: [PATCH 17/24] riscv: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 ` [PATCH 17/24] riscv: " Nicholas Piggin
@ 2020-07-30 21:20   ` Palmer Dabbelt
  0 siblings, 0 replies; 40+ messages in thread
From: Palmer Dabbelt @ 2020-07-30 21:20 UTC (permalink / raw)
  To: npiggin
  Cc: linux-arch, npiggin, linux-kernel, linux-mm, Arnd Bergmann,
	Paul Walmsley, aou, linux-riscv

On Mon, 27 Jul 2020 20:33:58 PDT (-0700), npiggin@gmail.com wrote:
> Cc: Paul Walmsley <paul.walmsley@sifive.com>
> Cc: Palmer Dabbelt <palmer@dabbelt.com>
> Cc: Albert Ou <aou@eecs.berkeley.edu>
> Cc: linux-riscv@lists.infradead.org
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>  arch/riscv/include/asm/mmu_context.h | 22 ++--------------------
>  1 file changed, 2 insertions(+), 20 deletions(-)
>
> diff --git a/arch/riscv/include/asm/mmu_context.h b/arch/riscv/include/asm/mmu_context.h
> index 67c463812e2d..250defa06f3a 100644
> --- a/arch/riscv/include/asm/mmu_context.h
> +++ b/arch/riscv/include/asm/mmu_context.h
> @@ -13,34 +13,16 @@
>  #include <linux/mm.h>
>  #include <linux/sched.h>
>
> -static inline void enter_lazy_tlb(struct mm_struct *mm,
> -	struct task_struct *task)
> -{
> -}
> -
> -/* Initialize context-related info for a new mm_struct */
> -static inline int init_new_context(struct task_struct *task,
> -	struct mm_struct *mm)
> -{
> -	return 0;
> -}
> -
> -static inline void destroy_context(struct mm_struct *mm)
> -{
> -}
> -
>  void switch_mm(struct mm_struct *prev, struct mm_struct *next,
>  	struct task_struct *task);
>
> +#define activate_mm activate_mm
>  static inline void activate_mm(struct mm_struct *prev,
>  			       struct mm_struct *next)
>  {
>  	switch_mm(prev, next, NULL);
>  }
>
> -static inline void deactivate_mm(struct task_struct *task,
> -	struct mm_struct *mm)
> -{
> -}
> +#include <asm-generic/mmu_context.h>
>
>  #endif /* _ASM_RISCV_MMU_CONTEXT_H */

Acked-by: Palmer Dabbelt <palmerdabbelt@google.com>

I'm assuming this is going in along with the others.  Thanks!


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

* RE: [PATCH 07/24] hexagon: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  3:33 ` [PATCH 07/24] hexagon: " Nicholas Piggin
@ 2020-08-11 18:34   ` Brian Cain
  0 siblings, 0 replies; 40+ messages in thread
From: Brian Cain @ 2020-08-11 18:34 UTC (permalink / raw)
  To: 'Nicholas Piggin', linux-arch
  Cc: linux-kernel, linux-mm, 'Arnd Bergmann', linux-hexagon


> -----Original Message-----
> From: linux-arch-owner@vger.kernel.org <linux-arch-owner@vger.kernel.org>
> On Behalf Of Nicholas Piggin

Acked-by: Brian Cain <bcain@codeaurora.org>

 
> Cc: Brian Cain <bcain@codeaurora.org>
> Cc: linux-hexagon@vger.kernel.org
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>  arch/hexagon/include/asm/mmu_context.h | 33 ++++----------------------
>  1 file changed, 5 insertions(+), 28 deletions(-)
> 
> diff --git a/arch/hexagon/include/asm/mmu_context.h
> b/arch/hexagon/include/asm/mmu_context.h
> index cdc4adc0300a..81947764c47d 100644
> --- a/arch/hexagon/include/asm/mmu_context.h
> +++ b/arch/hexagon/include/asm/mmu_context.h
> @@ -15,39 +15,13 @@
>  #include <asm/pgalloc.h>
>  #include <asm/mem-layout.h>
> 
> -static inline void destroy_context(struct mm_struct *mm) -{ -}
> -
>  /*
>   * VM port hides all TLB management, so "lazy TLB" isn't very
>   * meaningful.  Even for ports to architectures with visble TLBs,
>   * this is almost invariably a null function.
> + *
> + * mm->context is set up by pgd_alloc, so no init_new_context required.
>   */
> -static inline void enter_lazy_tlb(struct mm_struct *mm,
> -	struct task_struct *tsk)
> -{
> -}
> -
> -/*
> - * Architecture-specific actions, if any, for memory map deactivation.
> - */
> -static inline void deactivate_mm(struct task_struct *tsk,
> -	struct mm_struct *mm)
> -{
> -}
> -
> -/**
> - * init_new_context - initialize context related info for new mm_struct
> instance
> - * @tsk: pointer to a task struct
> - * @mm: pointer to a new mm struct
> - */
> -static inline int init_new_context(struct task_struct *tsk,
> -					struct mm_struct *mm)
> -{
> -	/* mm->context is set up by pgd_alloc */
> -	return 0;
> -}
> 
>  /*
>   *  Switch active mm context
> @@ -74,6 +48,7 @@ static inline void switch_mm(struct mm_struct *prev,
> struct mm_struct *next,
>  /*
>   *  Activate new memory map for task
>   */
> +#define activate_mm activate_mm
>  static inline void activate_mm(struct mm_struct *prev, struct mm_struct
> *next)  {
>  	unsigned long flags;
> @@ -86,4 +61,6 @@ static inline void activate_mm(struct mm_struct *prev,
> struct mm_struct *next)
>  /*  Generic hooks for arch_dup_mmap and arch_exit_mmap  */  #include
> <asm-generic/mm_hooks.h>
> 
> +#include <asm-generic/mmu_context.h>
> +
>  #endif
> --
> 2.23.0




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

* Re: [PATCH 01/24] asm-generic: add generic versions of mmu context functions
  2020-07-28  4:01   ` Vineet Gupta
  2020-07-28 10:37     ` Nicholas Piggin
@ 2020-08-26 13:59     ` Nicholas Piggin
  1 sibling, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-08-26 13:59 UTC (permalink / raw)
  To: linux-arch, Vineet Gupta; +Cc: Arnd Bergmann, linux-kernel, linux-mm

Excerpts from Vineet Gupta's message of July 28, 2020 2:01 pm:
> On 7/27/20 8:33 PM, Nicholas Piggin wrote:
>> Many of these are no-ops on many architectures, so extend mmu_context.h
>> to cover MMU and NOMMU, and split the NOMMU bits out to nommu_context.h
>> 
> 
>> -static inline void switch_mm(struct mm_struct *prev,
>> -			struct mm_struct *next,
>> -			struct task_struct *tsk)
>> +/**
>> + * activate_mm - called after exec switches the current task to a new mm, to switch to it
>> + * @prev_mm: previous mm of this task
>> + * @next_mm: new mm
>> + */
>> +#ifndef activate_mm
>> +static inline void activate_mm(struct mm_struct *prev_mm,
>> +			       struct mm_struct *next_mm)
>>  {
>> +	switch_mm(prev_mm, next_mm, current);
>>  }
>> +#endif
> 
> Is activate_mm() really needed now. It seems most arches have
>    activate_mm(p, n) -> switch_mm(p, n, NULL)

Alpha, nios2, parisc, s390, um, x86 have non-trivial differences,
so it seems to be still needed.

Thanks,
Nick


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

* Re: [PATCH 04/24] arm: use asm-generic/mmu_context.h for no-op implementations
  2020-07-28  4:14   ` Vineet Gupta
@ 2020-08-26 14:14     ` Nicholas Piggin
  0 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-08-26 14:14 UTC (permalink / raw)
  To: linux-arch, Vineet Gupta
  Cc: Arnd Bergmann, linux-arm-kernel, Russell King, linux-kernel,
	linux-mm, arcml

Excerpts from Vineet Gupta's message of July 28, 2020 2:14 pm:
> On 7/27/20 8:33 PM, Nicholas Piggin wrote:
>> Cc: Russell King <linux@armlinux.org.uk>
>> Cc: linux-arm-kernel@lists.infradead.org
>> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
>> ---
>>  arch/arm/include/asm/mmu_context.h | 26 +++-----------------------
>>  1 file changed, 3 insertions(+), 23 deletions(-)
>> 
>> diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h
>> index f99ed524fe41..84e58956fcab 100644
>> --- a/arch/arm/include/asm/mmu_context.h
>> +++ b/arch/arm/include/asm/mmu_context.h
>> @@ -26,6 +26,8 @@ void __check_vmalloc_seq(struct mm_struct *mm);
>>  #ifdef CONFIG_CPU_HAS_ASID
>>  
>>  void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk);
>> +
>> +#define init_new_context init_new_context
>>  static inline int
>>  init_new_context(struct task_struct *tsk, struct mm_struct *mm)
>>  {
>> @@ -92,32 +94,10 @@ static inline void finish_arch_post_lock_switch(void)
>>  
>>  #endif	/* CONFIG_MMU */
>>  
>> -static inline int
>> -init_new_context(struct task_struct *tsk, struct mm_struct *mm)
>> -{
>> -	return 0;
>> -}
>> -
>> -
>>  #endif	/* CONFIG_CPU_HAS_ASID */
>>  
>> -#define destroy_context(mm)		do { } while(0)
>>  #define activate_mm(prev,next)		switch_mm(prev, next, NULL)
> 
> Actually this can also go away too.
> 
> ARM switch_mm(prev, next, tsk) -> check_and_switch_context(next, tsk) but latter
> doesn't use @tsk at all. With patch below, you can remove above as well...

Thanks for reviewing. I did notice that might be possible but I was 
avoiding any change that wasn't completely trivial. It's a good point
to continue consolidating and simplifying though.

Thanks,
Nick

> 
> -------->
> From 672e0f78a94892794057a5a7542d85b71c1369c4 Mon Sep 17 00:00:00 2001
> From: Vineet Gupta <vgupta@synopsys.com>
> Date: Mon, 27 Jul 2020 21:12:42 -0700
> Subject: [PATCH] ARM: mm: check_and_switch_context() doesn't use @tsk arg
> 
> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
> ---
>  arch/arm/include/asm/efi.h         | 2 +-
>  arch/arm/include/asm/mmu_context.h | 5 ++---
>  arch/arm/mm/context.c              | 2 +-
>  3 files changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm/include/asm/efi.h b/arch/arm/include/asm/efi.h
> index 5dcf3c6011b7..0995b308149d 100644
> --- a/arch/arm/include/asm/efi.h
> +++ b/arch/arm/include/asm/efi.h
> @@ -37,7 +37,7 @@ int efi_set_mapping_permissions(struct mm_struct *mm,
> efi_memory_desc_t *md);
> 
>  static inline void efi_set_pgd(struct mm_struct *mm)
>  {
> -	check_and_switch_context(mm, NULL);
> +	check_and_switch_context(mm);
>  }
> 
>  void efi_virtmap_load(void);
> diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h
> index f99ed524fe41..c96360fa3466 100644
> --- a/arch/arm/include/asm/mmu_context.h
> +++ b/arch/arm/include/asm/mmu_context.h
> @@ -25,7 +25,7 @@ void __check_vmalloc_seq(struct mm_struct *mm);
> 
>  #ifdef CONFIG_CPU_HAS_ASID
> 
> -void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk);
> +void check_and_switch_context(struct mm_struct *mm);
>  static inline int
>  init_new_context(struct task_struct *tsk, struct mm_struct *mm)
>  {
> @@ -47,8 +47,7 @@ static inline void a15_erratum_get_cpumask(int this_cpu, struct
> mm_struct *mm,
> 
>  #ifdef CONFIG_MMU
> 
> -static inline void check_and_switch_context(struct mm_struct *mm,
> -					    struct task_struct *tsk)
> +static inline void check_and_switch_context(struct mm_struct *mm)
>  {
>  	if (unlikely(mm->context.vmalloc_seq != init_mm.context.vmalloc_seq))
>  		__check_vmalloc_seq(mm);
> diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c
> index b7525b433f3e..86c411e1d7cb 100644
> --- a/arch/arm/mm/context.c
> +++ b/arch/arm/mm/context.c
> @@ -234,7 +234,7 @@ static u64 new_context(struct mm_struct *mm, unsigned int cpu)
>  	return asid | generation;
>  }
> 
> -void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk)
> +void check_and_switch_context(struct mm_struct *mm)
>  {
>  	unsigned long flags;
>  	unsigned int cpu = smp_processor_id();
> -- 
> 2.20.1
> 
> 


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

* Re: [PATCH 14/24] openrisc: use asm-generic/mmu_context.h for no-op implementations
  2020-07-29 11:45   ` Stafford Horne
@ 2020-08-26 14:33     ` Nicholas Piggin
  0 siblings, 0 replies; 40+ messages in thread
From: Nicholas Piggin @ 2020-08-26 14:33 UTC (permalink / raw)
  To: Stafford Horne
  Cc: Arnd Bergmann, Jonas Bonn, linux-arch, linux-kernel, linux-mm,
	openrisc, Stefan Kristiansson

Excerpts from Stafford Horne's message of July 29, 2020 9:45 pm:
> On Tue, Jul 28, 2020 at 01:33:55PM +1000, Nicholas Piggin wrote:
>> Cc: Jonas Bonn <jonas@southpole.se>
>> Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
>> Cc: Stafford Horne <shorne@gmail.com>
>> Cc: openrisc@lists.librecores.org
>> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
>> ---
>>  arch/openrisc/include/asm/mmu_context.h | 8 +++-----
>>  arch/openrisc/mm/tlb.c                  | 2 ++
>>  2 files changed, 5 insertions(+), 5 deletions(-)
>> 
>> diff --git a/arch/openrisc/include/asm/mmu_context.h b/arch/openrisc/include/asm/mmu_context.h
>> index ced577542e29..a6702384c77d 100644
>> --- a/arch/openrisc/include/asm/mmu_context.h
>> +++ b/arch/openrisc/include/asm/mmu_context.h
>> @@ -17,13 +17,13 @@
>>  
>>  #include <asm-generic/mm_hooks.h>
>>  
>> +#define init_new_context init_new_context
>>  extern int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
>> +#define destroy_context destroy_context
>>  extern void destroy_context(struct mm_struct *mm);
>>  extern void switch_mm(struct mm_struct *prev, struct mm_struct *next,
>>  		      struct task_struct *tsk);
>>  
>> -#define deactivate_mm(tsk, mm)	do { } while (0)
>> -
>>  #define activate_mm(prev, next) switch_mm((prev), (next), NULL)
>>  
>>  /* current active pgd - this is similar to other processors pgd
>> @@ -32,8 +32,6 @@ extern void switch_mm(struct mm_struct *prev, struct mm_struct *next,
>>  
>>  extern volatile pgd_t *current_pgd[]; /* defined in arch/openrisc/mm/fault.c */
>>  
>> -static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
>> -{
>> -}
>> +#include <asm-generic/mmu_context.h>
> 
> This looks ok.
> 
>>  #endif
>> diff --git a/arch/openrisc/mm/tlb.c b/arch/openrisc/mm/tlb.c
>> index 4b680aed8f5f..821aab4cf3be 100644
>> --- a/arch/openrisc/mm/tlb.c
>> +++ b/arch/openrisc/mm/tlb.c
>> @@ -159,6 +159,7 @@ void switch_mm(struct mm_struct *prev, struct mm_struct *next,
>>   * instance.
>>   */
>>  
>> +#define init_new_context init_new_context
>>  int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
>>  {
>>  	mm->context = NO_CONTEXT;
>> @@ -170,6 +171,7 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
>>   * drops it.
>>   */
>>  
>> +#define destroy_context destroy_context
>>  void destroy_context(struct mm_struct *mm)
>>  {
>>  	flush_tlb_mm(mm);
> 
> I don't think we need the #define's in the .c file.  Do we?

You're right, I fixed that and the same issue in another arch.

Thanks,
Nick


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

end of thread, back to index

Thread overview: 40+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-28  3:33 [PATCH 00/24] Use asm-generic for mmu_context no-op functions Nicholas Piggin
2020-07-28  3:33 ` [PATCH 01/24] asm-generic: add generic versions of mmu context functions Nicholas Piggin
2020-07-28  4:01   ` Vineet Gupta
2020-07-28 10:37     ` Nicholas Piggin
2020-08-26 13:59     ` Nicholas Piggin
2020-07-28  5:53   ` kernel test robot
2020-07-28 23:52   ` kernel test robot
2020-07-28  3:33 ` [PATCH 02/24] alpha: use asm-generic/mmu_context.h for no-op implementations Nicholas Piggin
2020-07-28  3:33 ` [PATCH 03/24] arc: " Nicholas Piggin
2020-07-28  3:58   ` Vineet Gupta
2020-07-28  3:33 ` [PATCH 04/24] arm: " Nicholas Piggin
2020-07-28  4:14   ` Vineet Gupta
2020-08-26 14:14     ` Nicholas Piggin
2020-07-28  3:33 ` [PATCH 05/24] arm64: " Nicholas Piggin
2020-07-28  3:33 ` [PATCH 06/24] csky: " Nicholas Piggin
2020-07-28  4:09   ` Guo Ren
2020-07-28  3:33 ` [PATCH 07/24] hexagon: " Nicholas Piggin
2020-08-11 18:34   ` Brian Cain
2020-07-28  3:33 ` [PATCH 08/24] ia64: " Nicholas Piggin
2020-07-28  3:33 ` [PATCH 09/24] m68k: " Nicholas Piggin
2020-07-30  8:11   ` kernel test robot
2020-07-28  3:33 ` [PATCH 10/24] microblaze: " Nicholas Piggin
2020-07-28  3:33 ` [PATCH 11/24] mips: " Nicholas Piggin
2020-07-28  3:33 ` [PATCH 12/24] nds32: " Nicholas Piggin
2020-07-28  3:33 ` [PATCH 13/24] nios2: " Nicholas Piggin
2020-07-28  3:33 ` [PATCH 14/24] openrisc: " Nicholas Piggin
2020-07-29 11:45   ` Stafford Horne
2020-08-26 14:33     ` Nicholas Piggin
2020-07-28  3:33 ` [PATCH 15/24] parisc: " Nicholas Piggin
2020-07-28  3:33 ` [PATCH 16/24] powerpc: " Nicholas Piggin
2020-07-28  3:33 ` [PATCH 17/24] riscv: " Nicholas Piggin
2020-07-30 21:20   ` Palmer Dabbelt
2020-07-28  3:33 ` [PATCH 18/24] s390: " Nicholas Piggin
2020-07-28  3:34 ` [PATCH 19/24] sh: " Nicholas Piggin
2020-07-28  3:34 ` [PATCH 20/24] sparc: " Nicholas Piggin
2020-07-28  3:34 ` [PATCH 21/24] um: " Nicholas Piggin
2020-07-28  3:34 ` [PATCH 22/24] unicore32: " Nicholas Piggin
2020-07-28  3:34 ` [PATCH 23/24] x86: " Nicholas Piggin
2020-07-28 10:54   ` peterz
2020-07-28  3:34 ` [PATCH 24/24] xtensa: " Nicholas Piggin

Linux-mm Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-mm/0 linux-mm/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-mm linux-mm/ https://lore.kernel.org/linux-mm \
		linux-mm@kvack.org
	public-inbox-index linux-mm

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kvack.linux-mm


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git