mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
Merge tag 'asm-generic-mmu-context-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic
Pull asm-generic mmu-context cleanup from Arnd Bergmann: "This is a cleanup series from Nicholas Piggin, preparing for later changes. The asm/mmu_context.h header are generalized and common code moved to asm-gneneric/mmu_context.h. This saves a bit of code and makes it easier to change in the future" * tag 'asm-generic-mmu-context-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic: (25 commits) h8300: Fix generic mmu_context build m68k: mmu_context: Fix Sun-3 build xtensa: use asm-generic/mmu_context.h for no-op implementations x86: use asm-generic/mmu_context.h for no-op implementations um: use asm-generic/mmu_context.h for no-op implementations sparc: use asm-generic/mmu_context.h for no-op implementations sh: use asm-generic/mmu_context.h for no-op implementations s390: use asm-generic/mmu_context.h for no-op implementations riscv: use asm-generic/mmu_context.h for no-op implementations powerpc: use asm-generic/mmu_context.h for no-op implementations parisc: use asm-generic/mmu_context.h for no-op implementations openrisc: use asm-generic/mmu_context.h for no-op implementations nios2: use asm-generic/mmu_context.h for no-op implementations nds32: use asm-generic/mmu_context.h for no-op implementations mips: use asm-generic/mmu_context.h for no-op implementations microblaze: use asm-generic/mmu_context.h for no-op implementations m68k: use asm-generic/mmu_context.h for no-op implementations ia64: use asm-generic/mmu_context.h for no-op implementations hexagon: use asm-generic/mmu_context.h for no-op implementations csky: use asm-generic/mmu_context.h for no-op implementations ...
This commit is contained in:
@@ -214,8 +214,6 @@ ev4_activate_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm)
|
|||||||
tbiap();
|
tbiap();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define deactivate_mm(tsk,mm) do { } while (0)
|
|
||||||
|
|
||||||
#ifdef CONFIG_ALPHA_GENERIC
|
#ifdef CONFIG_ALPHA_GENERIC
|
||||||
# define switch_mm(a,b,c) alpha_mv.mv_switch_mm((a),(b),(c))
|
# 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))
|
# 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
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define init_new_context init_new_context
|
||||||
static inline int
|
static inline int
|
||||||
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern inline void
|
#define enter_lazy_tlb enter_lazy_tlb
|
||||||
destroy_context(struct mm_struct *mm)
|
|
||||||
{
|
|
||||||
/* Nothing to do. */
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
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;
|
= ((unsigned long)mm->pgd - IDENT_ADDR) >> PAGE_SHIFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#ifdef __MMU_EXTERN_INLINE
|
#ifdef __MMU_EXTERN_INLINE
|
||||||
#undef __EXTERN_INLINE
|
#undef __EXTERN_INLINE
|
||||||
#undef __MMU_EXTERN_INLINE
|
#undef __MMU_EXTERN_INLINE
|
||||||
|
@@ -102,6 +102,7 @@ set_hw:
|
|||||||
* Initialize the context related info for a new mm_struct
|
* Initialize the context related info for a new mm_struct
|
||||||
* instance.
|
* instance.
|
||||||
*/
|
*/
|
||||||
|
#define init_new_context init_new_context
|
||||||
static inline int
|
static inline int
|
||||||
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define destroy_context destroy_context
|
||||||
static inline void destroy_context(struct mm_struct *mm)
|
static inline void destroy_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
@@ -153,13 +155,13 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called at the time of execve() to get a new ASID
|
* activate_mm defaults (in asm-generic) to switch_mm and is called at the
|
||||||
* Note the subtlety here: get_new_mmu_context() behaves differently here
|
* time of execve() to get a new ASID Note the subtlety here:
|
||||||
* vs. in switch_mm(). Here it always returns a new ASID, because mm has
|
* get_new_mmu_context() behaves differently here vs. in switch_mm(). Here
|
||||||
* an unallocated "initial" value, while in latter, it moves to a new ASID,
|
* it always returns a new ASID, because mm has an unallocated "initial"
|
||||||
* only if it was unallocated
|
* 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
|
/* 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
|
* for retiring-mm. However destroy_context( ) still needs to do that because
|
||||||
@@ -168,8 +170,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
|
* there is a good chance that task gets sched-out/in, making it's ASID valid
|
||||||
* again (this teased me for a whole day).
|
* 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 */
|
#endif /* __ASM_ARC_MMU_CONTEXT_H */
|
||||||
|
@@ -26,6 +26,8 @@ void __check_vmalloc_seq(struct mm_struct *mm);
|
|||||||
#ifdef CONFIG_CPU_HAS_ASID
|
#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, struct task_struct *tsk);
|
||||||
|
|
||||||
|
#define init_new_context init_new_context
|
||||||
static inline int
|
static inline int
|
||||||
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
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 */
|
#endif /* CONFIG_MMU */
|
||||||
|
|
||||||
static inline int
|
|
||||||
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* CONFIG_CPU_HAS_ASID */
|
#endif /* CONFIG_CPU_HAS_ASID */
|
||||||
|
|
||||||
#define destroy_context(mm) do { } while(0)
|
|
||||||
#define activate_mm(prev,next) switch_mm(prev, next, NULL)
|
#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
|
* This is the actual mm switch as far as the scheduler
|
||||||
* is concerned. No registers are touched. We avoid
|
* is concerned. No registers are touched. We avoid
|
||||||
@@ -149,6 +129,6 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define deactivate_mm(tsk,mm) do { } while (0)
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -174,9 +174,9 @@ static inline void cpu_replace_ttbr1(pgd_t *pgdp)
|
|||||||
* Setting a reserved TTBR0 or EPD0 would work, but it all gets ugly when you
|
* Setting a reserved TTBR0 or EPD0 would work, but it all gets ugly when you
|
||||||
* take CPU migration into account.
|
* take CPU migration into account.
|
||||||
*/
|
*/
|
||||||
#define destroy_context(mm) do { } while(0)
|
|
||||||
void check_and_switch_context(struct mm_struct *mm);
|
void check_and_switch_context(struct mm_struct *mm);
|
||||||
|
|
||||||
|
#define init_new_context(tsk, mm) init_new_context(tsk, mm)
|
||||||
static inline int
|
static inline int
|
||||||
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -208,6 +208,7 @@ static inline void update_saved_ttbr0(struct task_struct *tsk,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define enter_lazy_tlb enter_lazy_tlb
|
||||||
static inline void
|
static inline void
|
||||||
enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
||||||
{
|
{
|
||||||
@@ -248,15 +249,14 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
|||||||
update_saved_ttbr0(tsk, 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 verify_cpu_asid_bits(void);
|
||||||
void post_ttbr_update_workaround(void);
|
void post_ttbr_update_workaround(void);
|
||||||
|
|
||||||
unsigned long arm64_mm_context_get(struct mm_struct *mm);
|
unsigned long arm64_mm_context_get(struct mm_struct *mm);
|
||||||
void arm64_mm_context_put(struct mm_struct *mm);
|
void arm64_mm_context_put(struct mm_struct *mm);
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif /* !__ASSEMBLY__ */
|
#endif /* !__ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* !__ASM_MMU_CONTEXT_H */
|
#endif /* !__ASM_MMU_CONTEXT_H */
|
||||||
|
6
arch/c6x/include/asm/mmu_context.h
Normal file
6
arch/c6x/include/asm/mmu_context.h
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#ifndef _ASM_C6X_MMU_CONTEXT_H
|
||||||
|
#define _ASM_C6X_MMU_CONTEXT_H
|
||||||
|
|
||||||
|
#include <asm-generic/nommu_context.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_C6X_MMU_CONTEXT_H */
|
@@ -24,11 +24,6 @@
|
|||||||
#define cpu_asid(mm) (atomic64_read(&mm->context.asid) & ASID_MASK)
|
#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 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);
|
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);
|
flush_icache_deferred(next);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif /* __ASM_CSKY_MMU_CONTEXT_H */
|
#endif /* __ASM_CSKY_MMU_CONTEXT_H */
|
||||||
|
6
arch/h8300/include/asm/mmu_context.h
Normal file
6
arch/h8300/include/asm/mmu_context.h
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#ifndef _ASM_H8300_MMU_CONTEXT_H
|
||||||
|
#define _ASM_H8300_MMU_CONTEXT_H
|
||||||
|
|
||||||
|
#include <asm-generic/nommu_context.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_H8300_MMU_CONTEXT_H */
|
@@ -15,39 +15,13 @@
|
|||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <asm/mem-layout.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
|
* VM port hides all TLB management, so "lazy TLB" isn't very
|
||||||
* meaningful. Even for ports to architectures with visble TLBs,
|
* meaningful. Even for ports to architectures with visble TLBs,
|
||||||
* this is almost invariably a null function.
|
* 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
|
* 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
|
* Activate new memory map for task
|
||||||
*/
|
*/
|
||||||
|
#define activate_mm activate_mm
|
||||||
static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
|
static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
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 */
|
/* Generic hooks for arch_dup_mmap and arch_exit_mmap */
|
||||||
#include <asm-generic/mm_hooks.h>
|
#include <asm-generic/mm_hooks.h>
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -49,11 +49,6 @@ DECLARE_PER_CPU(u8, ia64_need_tlb_flush);
|
|||||||
extern void mmu_context_init (void);
|
extern void mmu_context_init (void);
|
||||||
extern void wrap_mmu_context (struct mm_struct *mm);
|
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
|
* 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
|
* an old context number might have been reused. This is signalled by the
|
||||||
@@ -116,6 +111,7 @@ out:
|
|||||||
* Initialize context number to some sane value. MM is guaranteed to be a
|
* Initialize context number to some sane value. MM is guaranteed to be a
|
||||||
* brand-new address-space, so no TLB flushing is needed, ever.
|
* brand-new address-space, so no TLB flushing is needed, ever.
|
||||||
*/
|
*/
|
||||||
|
#define init_new_context init_new_context
|
||||||
static inline int
|
static inline int
|
||||||
init_new_context (struct task_struct *p, struct mm_struct *mm)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
|
||||||
destroy_context (struct mm_struct *mm)
|
|
||||||
{
|
|
||||||
/* Nothing to do. */
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
reload_context (nv_mm_context_t context)
|
reload_context (nv_mm_context_t context)
|
||||||
{
|
{
|
||||||
@@ -178,11 +168,10 @@ activate_context (struct mm_struct *mm)
|
|||||||
} while (unlikely(context != mm->context));
|
} while (unlikely(context != mm->context));
|
||||||
}
|
}
|
||||||
|
|
||||||
#define deactivate_mm(tsk,mm) do { } while (0)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Switch from address space PREV to address space NEXT.
|
* Switch from address space PREV to address space NEXT.
|
||||||
*/
|
*/
|
||||||
|
#define activate_mm activate_mm
|
||||||
static inline void
|
static inline void
|
||||||
activate_mm (struct mm_struct *prev, struct mm_struct *next)
|
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)
|
#define switch_mm(prev_mm,next_mm,next_task) activate_mm(prev_mm, next_mm)
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
# endif /* ! __ASSEMBLY__ */
|
# endif /* ! __ASSEMBLY__ */
|
||||||
#endif /* _ASM_IA64_MMU_CONTEXT_H */
|
#endif /* _ASM_IA64_MMU_CONTEXT_H */
|
||||||
|
@@ -5,10 +5,6 @@
|
|||||||
#include <asm-generic/mm_hooks.h>
|
#include <asm-generic/mm_hooks.h>
|
||||||
#include <linux/mm_types.h>
|
#include <linux/mm_types.h>
|
||||||
|
|
||||||
static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
|
|
||||||
#if defined(CONFIG_COLDFIRE)
|
#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.
|
* We're finished using the context for an address space.
|
||||||
*/
|
*/
|
||||||
|
#define destroy_context destroy_context
|
||||||
static inline void destroy_context(struct mm_struct *mm)
|
static inline void destroy_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
if (mm->context != NO_CONTEXT) {
|
if (mm->context != NO_CONTEXT) {
|
||||||
@@ -83,6 +80,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
|
* After we have set current->mm to a new value, this activates
|
||||||
* the context for the new mm so we see the new mappings.
|
* 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,
|
static inline void activate_mm(struct mm_struct *active_mm,
|
||||||
struct mm_struct *mm)
|
struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -90,8 +88,6 @@ static inline void activate_mm(struct mm_struct *active_mm,
|
|||||||
set_context(mm->context, mm->pgd);
|
set_context(mm->context, mm->pgd);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define deactivate_mm(tsk, mm) do { } while (0)
|
|
||||||
|
|
||||||
#define prepare_arch_switch(next) load_ksp_mmu(next)
|
#define prepare_arch_switch(next) load_ksp_mmu(next)
|
||||||
|
|
||||||
static inline void load_ksp_mmu(struct task_struct *task)
|
static inline void load_ksp_mmu(struct task_struct *task)
|
||||||
@@ -176,6 +172,7 @@ extern unsigned long get_free_context(struct mm_struct *mm);
|
|||||||
extern void clear_context(unsigned long context);
|
extern void clear_context(unsigned long context);
|
||||||
|
|
||||||
/* set the context for a new task to unmapped */
|
/* 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,
|
static inline int init_new_context(struct task_struct *tsk,
|
||||||
struct mm_struct *mm)
|
struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -192,6 +189,7 @@ static inline void get_mmu_context(struct mm_struct *mm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* flush context if allocated... */
|
/* flush context if allocated... */
|
||||||
|
#define destroy_context destroy_context
|
||||||
static inline void destroy_context(struct mm_struct *mm)
|
static inline void destroy_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
if (mm->context != SUN3_INVALID_CONTEXT)
|
if (mm->context != SUN3_INVALID_CONTEXT)
|
||||||
@@ -210,8 +208,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
|||||||
activate_context(tsk->mm);
|
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,
|
static inline void activate_mm(struct mm_struct *prev_mm,
|
||||||
struct mm_struct *next_mm)
|
struct mm_struct *next_mm)
|
||||||
{
|
{
|
||||||
@@ -224,6 +221,7 @@ static inline void activate_mm(struct mm_struct *prev_mm,
|
|||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
|
|
||||||
|
#define init_new_context init_new_context
|
||||||
static inline int init_new_context(struct task_struct *tsk,
|
static inline int init_new_context(struct task_struct *tsk,
|
||||||
struct mm_struct *mm)
|
struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -231,8 +229,6 @@ static inline int init_new_context(struct task_struct *tsk,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define destroy_context(mm) do { } while(0)
|
|
||||||
|
|
||||||
static inline void switch_mm_0230(struct mm_struct *mm)
|
static inline void switch_mm_0230(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
unsigned long crp[2] = {
|
unsigned long crp[2] = {
|
||||||
@@ -300,8 +296,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,
|
static inline void activate_mm(struct mm_struct *prev_mm,
|
||||||
struct mm_struct *next_mm)
|
struct mm_struct *next_mm)
|
||||||
{
|
{
|
||||||
@@ -315,24 +310,11 @@ static inline void activate_mm(struct mm_struct *prev_mm,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#else /* !CONFIG_MMU */
|
#else /* !CONFIG_MMU */
|
||||||
|
|
||||||
static inline int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
#include <asm-generic/nommu_context.h>
|
||||||
{
|
|
||||||
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)
|
|
||||||
|
|
||||||
static inline void activate_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* CONFIG_MMU */
|
#endif /* CONFIG_MMU */
|
||||||
#endif /* __M68K_MMU_CONTEXT_H */
|
#endif /* __M68K_MMU_CONTEXT_H */
|
||||||
|
@@ -2,5 +2,5 @@
|
|||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
# include <asm/mmu_context_mm.h>
|
# include <asm/mmu_context_mm.h>
|
||||||
#else
|
#else
|
||||||
# include <asm-generic/mmu_context.h>
|
# include <asm-generic/nommu_context.h>
|
||||||
#endif
|
#endif
|
||||||
|
@@ -33,10 +33,6 @@
|
|||||||
to represent all kernel pages as shared among all contexts.
|
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 NO_CONTEXT 256
|
||||||
# define LAST_CONTEXT 255
|
# define LAST_CONTEXT 255
|
||||||
# define FIRST_CONTEXT 1
|
# 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.
|
* We're finished using the context for an address space.
|
||||||
*/
|
*/
|
||||||
|
#define destroy_context destroy_context
|
||||||
static inline void destroy_context(struct mm_struct *mm)
|
static inline void destroy_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
if (mm->context != NO_CONTEXT) {
|
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
|
* After we have set current->mm to a new value, this activates
|
||||||
* the context for the new mm so we see the new mappings.
|
* 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,
|
static inline void activate_mm(struct mm_struct *active_mm,
|
||||||
struct mm_struct *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);
|
extern void mmu_context_init(void);
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
# endif /* __KERNEL__ */
|
# endif /* __KERNEL__ */
|
||||||
#endif /* _ASM_MICROBLAZE_MMU_CONTEXT_H */
|
#endif /* _ASM_MICROBLAZE_MMU_CONTEXT_H */
|
||||||
|
@@ -122,9 +122,6 @@ unsigned long get_wchan(struct task_struct *p);
|
|||||||
# define KSTK_EIP(task) (task_pc(task))
|
# define KSTK_EIP(task) (task_pc(task))
|
||||||
# define KSTK_ESP(task) (task_sp(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 TASK_SIZE
|
||||||
# define STACK_TOP_MAX STACK_TOP
|
# define STACK_TOP_MAX STACK_TOP
|
||||||
|
|
||||||
|
@@ -124,10 +124,6 @@ static inline void set_cpu_context(unsigned int cpu,
|
|||||||
#define cpu_asid(cpu, mm) \
|
#define cpu_asid(cpu, mm) \
|
||||||
(cpu_context((cpu), (mm)) & cpu_asid_mask(&cpu_data[cpu]))
|
(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 get_new_mmu_context(struct mm_struct *mm);
|
||||||
extern void check_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);
|
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
|
* Initialize the context related info for a new mm_struct
|
||||||
* instance.
|
* instance.
|
||||||
*/
|
*/
|
||||||
|
#define init_new_context init_new_context
|
||||||
static inline int
|
static inline int
|
||||||
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
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
|
* Destroy context related info for an mm_struct that is about
|
||||||
* to be put to rest.
|
* to be put to rest.
|
||||||
*/
|
*/
|
||||||
|
#define destroy_context destroy_context
|
||||||
static inline void destroy_context(struct mm_struct *mm)
|
static inline void destroy_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
dsemul_mm_cleanup(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
|
static inline void
|
||||||
drop_mmu_context(struct mm_struct *mm)
|
drop_mmu_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -237,4 +232,6 @@ drop_mmu_context(struct mm_struct *mm)
|
|||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif /* _ASM_MMU_CONTEXT_H */
|
#endif /* _ASM_MMU_CONTEXT_H */
|
||||||
|
@@ -9,6 +9,7 @@
|
|||||||
#include <asm/proc-fns.h>
|
#include <asm/proc-fns.h>
|
||||||
#include <asm-generic/mm_hooks.h>
|
#include <asm-generic/mm_hooks.h>
|
||||||
|
|
||||||
|
#define init_new_context init_new_context
|
||||||
static inline int
|
static inline int
|
||||||
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define destroy_context(mm) do { } while(0)
|
|
||||||
|
|
||||||
#define CID_BITS 9
|
#define CID_BITS 9
|
||||||
extern spinlock_t cid_lock;
|
extern spinlock_t cid_lock;
|
||||||
extern unsigned int cpu_last_cid;
|
extern unsigned int cpu_last_cid;
|
||||||
@@ -47,10 +46,6 @@ static inline void check_context(struct mm_struct *mm)
|
|||||||
__new_context(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,
|
static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
||||||
struct task_struct *tsk)
|
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)
|
#include <asm-generic/mmu_context.h>
|
||||||
#define activate_mm(prev,next) switch_mm(prev, next, NULL)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -26,16 +26,13 @@ extern unsigned long get_pid_from_context(mm_context_t *ctx);
|
|||||||
*/
|
*/
|
||||||
extern pgd_t *pgd_current;
|
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.
|
* Initialize the context related info for a new mm_struct instance.
|
||||||
*
|
*
|
||||||
* Set all new contexts to 0, that way the generation will never match
|
* Set all new contexts to 0, that way the generation will never match
|
||||||
* the currently running generation when this context is switched in.
|
* 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,
|
static inline int init_new_context(struct task_struct *tsk,
|
||||||
struct mm_struct *mm)
|
struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -43,26 +40,16 @@ static inline int init_new_context(struct task_struct *tsk,
|
|||||||
return 0;
|
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,
|
void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
||||||
struct task_struct *tsk);
|
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
|
* After we have set current->mm to a new value, this activates
|
||||||
* the context for the new mm so we see the new mappings.
|
* 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);
|
void activate_mm(struct mm_struct *prev, struct mm_struct *next);
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif /* _ASM_NIOS2_MMU_CONTEXT_H */
|
#endif /* _ASM_NIOS2_MMU_CONTEXT_H */
|
||||||
|
@@ -17,13 +17,13 @@
|
|||||||
|
|
||||||
#include <asm-generic/mm_hooks.h>
|
#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);
|
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 destroy_context(struct mm_struct *mm);
|
||||||
extern void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
extern void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
||||||
struct task_struct *tsk);
|
struct task_struct *tsk);
|
||||||
|
|
||||||
#define deactivate_mm(tsk, mm) do { } while (0)
|
|
||||||
|
|
||||||
#define activate_mm(prev, next) switch_mm((prev), (next), NULL)
|
#define activate_mm(prev, next) switch_mm((prev), (next), NULL)
|
||||||
|
|
||||||
/* current active pgd - this is similar to other processors pgd
|
/* 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 */
|
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
|
#endif
|
||||||
|
@@ -7,16 +7,13 @@
|
|||||||
#include <linux/atomic.h>
|
#include <linux/atomic.h>
|
||||||
#include <asm-generic/mm_hooks.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
|
/* on PA-RISC, we actually have enough contexts to justify an allocator
|
||||||
* for them. prumpf */
|
* for them. prumpf */
|
||||||
|
|
||||||
extern unsigned long alloc_sid(void);
|
extern unsigned long alloc_sid(void);
|
||||||
extern void free_sid(unsigned long);
|
extern void free_sid(unsigned long);
|
||||||
|
|
||||||
|
#define init_new_context init_new_context
|
||||||
static inline int
|
static inline int
|
||||||
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -26,6 +23,7 @@ init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define destroy_context destroy_context
|
||||||
static inline void
|
static inline void
|
||||||
destroy_context(struct mm_struct *mm)
|
destroy_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -71,8 +69,7 @@ static inline void switch_mm(struct mm_struct *prev,
|
|||||||
}
|
}
|
||||||
#define switch_mm_irqs_off switch_mm_irqs_off
|
#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)
|
static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -90,4 +87,7 @@ static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
|
|||||||
|
|
||||||
switch_mm(prev,next,current);
|
switch_mm(prev,next,current);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -14,7 +14,9 @@
|
|||||||
/*
|
/*
|
||||||
* Most if the context management is out of line
|
* 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);
|
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 destroy_context(struct mm_struct *mm);
|
||||||
#ifdef CONFIG_SPAPR_TCE_IOMMU
|
#ifdef CONFIG_SPAPR_TCE_IOMMU
|
||||||
struct mm_iommu_table_group_mem_t;
|
struct mm_iommu_table_group_mem_t;
|
||||||
@@ -235,27 +237,26 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
|||||||
}
|
}
|
||||||
#define switch_mm_irqs_off switch_mm_irqs_off
|
#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
|
* After we have set current->mm to a new value, this activates
|
||||||
* the context for the new mm so we see the new mappings.
|
* 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 *prev, struct mm_struct *next)
|
static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
|
||||||
{
|
{
|
||||||
switch_mm_irqs_off(prev, next, current);
|
switch_mm_irqs_off(prev, next, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We don't currently use enter_lazy_tlb() for anything */
|
/* 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,
|
static inline void enter_lazy_tlb(struct mm_struct *mm,
|
||||||
struct task_struct *tsk)
|
struct task_struct *tsk)
|
||||||
{
|
{
|
||||||
/* 64-bit Book3E keeps track of current PGD in the PACA */
|
/* 64-bit Book3E keeps track of current PGD in the PACA */
|
||||||
#ifdef CONFIG_PPC_BOOK3E_64
|
|
||||||
get_paca()->pgd = NULL;
|
get_paca()->pgd = NULL;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
extern void arch_exit_mmap(struct mm_struct *mm);
|
extern void arch_exit_mmap(struct mm_struct *mm);
|
||||||
|
|
||||||
@@ -298,5 +299,7 @@ static inline int arch_dup_mmap(struct mm_struct *oldmm,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
#endif /* __ASM_POWERPC_MMU_CONTEXT_H */
|
#endif /* __ASM_POWERPC_MMU_CONTEXT_H */
|
||||||
|
@@ -13,34 +13,16 @@
|
|||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/sched.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,
|
void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
||||||
struct task_struct *task);
|
struct task_struct *task);
|
||||||
|
|
||||||
|
#define activate_mm activate_mm
|
||||||
static inline void activate_mm(struct mm_struct *prev,
|
static inline void activate_mm(struct mm_struct *prev,
|
||||||
struct mm_struct *next)
|
struct mm_struct *next)
|
||||||
{
|
{
|
||||||
switch_mm(prev, next, NULL);
|
switch_mm(prev, next, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void deactivate_mm(struct task_struct *task,
|
#include <asm-generic/mmu_context.h>
|
||||||
struct mm_struct *mm)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _ASM_RISCV_MMU_CONTEXT_H */
|
#endif /* _ASM_RISCV_MMU_CONTEXT_H */
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
#include <asm/ctl_reg.h>
|
#include <asm/ctl_reg.h>
|
||||||
#include <asm-generic/mm_hooks.h>
|
#include <asm-generic/mm_hooks.h>
|
||||||
|
|
||||||
|
#define init_new_context init_new_context
|
||||||
static inline int init_new_context(struct task_struct *tsk,
|
static inline int init_new_context(struct task_struct *tsk,
|
||||||
struct mm_struct *mm)
|
struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -69,8 +70,6 @@ static inline int init_new_context(struct task_struct *tsk,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define destroy_context(mm) do { } while (0)
|
|
||||||
|
|
||||||
static inline void switch_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)
|
struct task_struct *tsk)
|
||||||
{
|
{
|
||||||
@@ -104,9 +103,7 @@ static inline void finish_arch_post_lock_switch(void)
|
|||||||
__ctl_load(S390_lowcore.user_asce, 7, 7);
|
__ctl_load(S390_lowcore.user_asce, 7, 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define enter_lazy_tlb(mm,tsk) do { } while (0)
|
#define activate_mm activate_mm
|
||||||
#define deactivate_mm(tsk,mm) do { } while (0)
|
|
||||||
|
|
||||||
static inline void activate_mm(struct mm_struct *prev,
|
static inline void activate_mm(struct mm_struct *prev,
|
||||||
struct mm_struct *next)
|
struct mm_struct *next)
|
||||||
{
|
{
|
||||||
@@ -115,4 +112,6 @@ static inline void activate_mm(struct mm_struct *prev,
|
|||||||
__ctl_load(S390_lowcore.user_asce, 7, 7);
|
__ctl_load(S390_lowcore.user_asce, 7, 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif /* __S390_MMU_CONTEXT_H */
|
#endif /* __S390_MMU_CONTEXT_H */
|
||||||
|
@@ -84,6 +84,7 @@ static inline void get_mmu_context(struct mm_struct *mm, unsigned int cpu)
|
|||||||
* Initialize the context related info for a new mm_struct
|
* Initialize the context related info for a new mm_struct
|
||||||
* instance.
|
* instance.
|
||||||
*/
|
*/
|
||||||
|
#define init_new_context init_new_context
|
||||||
static inline int init_new_context(struct task_struct *tsk,
|
static inline int init_new_context(struct task_struct *tsk,
|
||||||
struct mm_struct *mm)
|
struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -120,9 +121,7 @@ static inline void switch_mm(struct mm_struct *prev,
|
|||||||
activate_context(next, cpu);
|
activate_context(next, cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define activate_mm(prev, next) switch_mm((prev),(next),NULL)
|
#include <asm-generic/mmu_context.h>
|
||||||
#define deactivate_mm(tsk,mm) do { } while (0)
|
|
||||||
#define enter_lazy_tlb(mm,tsk) do { } while (0)
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@@ -133,7 +132,7 @@ static inline void switch_mm(struct mm_struct *prev,
|
|||||||
#define set_TTB(pgd) do { } while (0)
|
#define set_TTB(pgd) do { } while (0)
|
||||||
#define get_TTB() (0)
|
#define get_TTB() (0)
|
||||||
|
|
||||||
#include <asm-generic/mmu_context.h>
|
#include <asm-generic/nommu_context.h>
|
||||||
|
|
||||||
#endif /* CONFIG_MMU */
|
#endif /* CONFIG_MMU */
|
||||||
|
|
||||||
|
@@ -2,15 +2,6 @@
|
|||||||
#ifndef __ASM_SH_MMU_CONTEXT_32_H
|
#ifndef __ASM_SH_MMU_CONTEXT_32_H
|
||||||
#define __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
|
#ifdef CONFIG_CPU_HAS_PTEAEX
|
||||||
static inline void set_asid(unsigned long asid)
|
static inline void set_asid(unsigned long asid)
|
||||||
{
|
{
|
||||||
|
@@ -6,13 +6,10 @@
|
|||||||
|
|
||||||
#include <asm-generic/mm_hooks.h>
|
#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
|
/* Initialize a new mmu context. This is invoked when a new
|
||||||
* address space instance (unique or shared) is instantiated.
|
* 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);
|
int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
|
||||||
|
|
||||||
/* Destroy a dead context. This occurs when mmput drops the
|
/* 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
|
* all the page tables have been flushed. Our job is to destroy
|
||||||
* any remaining processor-specific state.
|
* any remaining processor-specific state.
|
||||||
*/
|
*/
|
||||||
|
#define destroy_context destroy_context
|
||||||
void destroy_context(struct mm_struct *mm);
|
void destroy_context(struct mm_struct *mm);
|
||||||
|
|
||||||
/* Switch the current MM context. */
|
/* Switch the current MM context. */
|
||||||
void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm,
|
void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm,
|
||||||
struct task_struct *tsk);
|
struct task_struct *tsk);
|
||||||
|
|
||||||
#define deactivate_mm(tsk,mm) do { } while (0)
|
|
||||||
|
|
||||||
/* Activate a new MM instance for the current task. */
|
/* Activate a new MM instance for the current task. */
|
||||||
#define activate_mm(active_mm, mm) switch_mm((active_mm), (mm), NULL)
|
#define activate_mm(active_mm, mm) switch_mm((active_mm), (mm), NULL)
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif /* !(__ASSEMBLY__) */
|
#endif /* !(__ASSEMBLY__) */
|
||||||
|
|
||||||
#endif /* !(__SPARC_MMU_CONTEXT_H) */
|
#endif /* !(__SPARC_MMU_CONTEXT_H) */
|
||||||
|
@@ -16,17 +16,16 @@
|
|||||||
#include <asm-generic/mm_hooks.h>
|
#include <asm-generic/mm_hooks.h>
|
||||||
#include <asm/percpu.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 spinlock_t ctx_alloc_lock;
|
||||||
extern unsigned long tlb_context_cache;
|
extern unsigned long tlb_context_cache;
|
||||||
extern unsigned long mmu_context_bmap[];
|
extern unsigned long mmu_context_bmap[];
|
||||||
|
|
||||||
DECLARE_PER_CPU(struct mm_struct *, per_cpu_secondary_mm);
|
DECLARE_PER_CPU(struct mm_struct *, per_cpu_secondary_mm);
|
||||||
void get_new_mmu_context(struct mm_struct *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);
|
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 destroy_context(struct mm_struct *mm);
|
||||||
|
|
||||||
void __tsb_context_switch(unsigned long pgd_pa,
|
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);
|
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 activate_mm(active_mm, mm) switch_mm(active_mm, mm, NULL)
|
||||||
|
|
||||||
#define __HAVE_ARCH_START_CONTEXT_SWITCH
|
#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 /* !(__ASSEMBLY__) */
|
||||||
|
|
||||||
#endif /* !(__SPARC64_MMU_CONTEXT_H) */
|
#endif /* !(__SPARC64_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
|
* end asm-generic/mm_hooks.h functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define deactivate_mm(tsk,mm) do { } while (0)
|
|
||||||
|
|
||||||
extern void force_flush_all(void);
|
extern void force_flush_all(void);
|
||||||
|
|
||||||
|
#define activate_mm activate_mm
|
||||||
static inline void activate_mm(struct mm_struct *old, struct mm_struct *new)
|
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,
|
#define init_new_context init_new_context
|
||||||
struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
extern int init_new_context(struct task_struct *task, struct mm_struct *mm);
|
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);
|
extern void destroy_context(struct mm_struct *mm);
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -91,12 +91,14 @@ static inline void switch_ldt(struct mm_struct *prev, struct mm_struct *next)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define enter_lazy_tlb enter_lazy_tlb
|
||||||
extern void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk);
|
extern void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Init a new mm. Used on mm copies, like at fork()
|
* Init a new mm. Used on mm copies, like at fork()
|
||||||
* and on mm's that are brand-new, like at execve().
|
* 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,
|
static inline int init_new_context(struct task_struct *tsk,
|
||||||
struct mm_struct *mm)
|
struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
@@ -116,6 +118,8 @@ static inline int init_new_context(struct task_struct *tsk,
|
|||||||
init_new_context_ldt(mm);
|
init_new_context_ldt(mm);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define destroy_context destroy_context
|
||||||
static inline void destroy_context(struct mm_struct *mm)
|
static inline void destroy_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
destroy_context_ldt(mm);
|
destroy_context_ldt(mm);
|
||||||
@@ -214,4 +218,6 @@ static inline bool arch_vma_access_permitted(struct vm_area_struct *vma,
|
|||||||
|
|
||||||
unsigned long __get_current_cr3_fast(void);
|
unsigned long __get_current_cr3_fast(void);
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
#endif /* _ASM_X86_MMU_CONTEXT_H */
|
#endif /* _ASM_X86_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.
|
* 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,
|
static inline int init_new_context(struct task_struct *tsk,
|
||||||
struct mm_struct *mm)
|
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);
|
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
|
* Destroy context related info for an mm_struct that is about
|
||||||
* to be put to rest.
|
* to be put to rest.
|
||||||
*/
|
*/
|
||||||
|
#define destroy_context destroy_context
|
||||||
static inline void destroy_context(struct mm_struct *mm)
|
static inline void destroy_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
invalidate_page_directory();
|
invalidate_page_directory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
#include <asm-generic/mmu_context.h>
|
||||||
{
|
|
||||||
/* Nothing to do. */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* CONFIG_MMU */
|
#endif /* CONFIG_MMU */
|
||||||
#endif /* _XTENSA_MMU_CONTEXT_H */
|
#endif /* _XTENSA_MMU_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)
|
#include <asm-generic/nommu_context.h>
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -3,44 +3,74 @@
|
|||||||
#define __ASM_GENERIC_MMU_CONTEXT_H
|
#define __ASM_GENERIC_MMU_CONTEXT_H
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generic hooks for NOMMU architectures, which do not need to do
|
* Generic hooks to implement no-op functionality.
|
||||||
* anything special here.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <asm-generic/mm_hooks.h>
|
|
||||||
|
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
struct mm_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,
|
static inline void enter_lazy_tlb(struct mm_struct *mm,
|
||||||
struct task_struct *tsk)
|
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
|
||||||
|
* @return: 0 on success, -errno on failure
|
||||||
|
*/
|
||||||
|
#ifndef init_new_context
|
||||||
static inline int init_new_context(struct task_struct *tsk,
|
static inline int init_new_context(struct task_struct *tsk,
|
||||||
struct mm_struct *mm)
|
struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
return 0;
|
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)
|
static inline void destroy_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline void deactivate_mm(struct task_struct *task,
|
/**
|
||||||
struct mm_struct *mm)
|
* 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
|
||||||
|
*/
|
||||||
static inline void switch_mm(struct mm_struct *prev,
|
#ifndef activate_mm
|
||||||
struct mm_struct *next,
|
|
||||||
struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void activate_mm(struct mm_struct *prev_mm,
|
static inline void activate_mm(struct mm_struct *prev_mm,
|
||||||
struct mm_struct *next_mm)
|
struct mm_struct *next_mm)
|
||||||
{
|
{
|
||||||
|
switch_mm(prev_mm, next_mm, current);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 */
|
#endif /* __ASM_GENERIC_MMU_CONTEXT_H */
|
||||||
|
19
include/asm-generic/nommu_context.h
Normal file
19
include/asm-generic/nommu_context.h
Normal file
@@ -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>
|
||||||
|
|
||||||
|
static inline void switch_mm(struct mm_struct *prev,
|
||||||
|
struct mm_struct *next,
|
||||||
|
struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <asm-generic/mmu_context.h>
|
||||||
|
|
||||||
|
#endif /* __ASM_GENERIC_NOMMU_H */
|
Reference in New Issue
Block a user