root/arch/hexagon/include/asm/mmu_context.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. destroy_context
  2. enter_lazy_tlb
  3. deactivate_mm
  4. init_new_context
  5. switch_mm
  6. activate_mm

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * MM context support for the Hexagon architecture
   4  *
   5  * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
   6  */
   7 
   8 #ifndef _ASM_MMU_CONTEXT_H
   9 #define _ASM_MMU_CONTEXT_H
  10 
  11 #include <linux/mm_types.h>
  12 
  13 #include <asm/setup.h>
  14 #include <asm/page.h>
  15 #include <asm/pgalloc.h>
  16 #include <asm/mem-layout.h>
  17 
  18 static inline void destroy_context(struct mm_struct *mm)
  19 {
  20 }
  21 
  22 /*
  23  * VM port hides all TLB management, so "lazy TLB" isn't very
  24  * meaningful.  Even for ports to architectures with visble TLBs,
  25  * this is almost invariably a null function.
  26  */
  27 static inline void enter_lazy_tlb(struct mm_struct *mm,
  28         struct task_struct *tsk)
  29 {
  30 }
  31 
  32 /*
  33  * Architecture-specific actions, if any, for memory map deactivation.
  34  */
  35 static inline void deactivate_mm(struct task_struct *tsk,
  36         struct mm_struct *mm)
  37 {
  38 }
  39 
  40 /**
  41  * init_new_context - initialize context related info for new mm_struct instance
  42  * @tsk: pointer to a task struct
  43  * @mm: pointer to a new mm struct
  44  */
  45 static inline int init_new_context(struct task_struct *tsk,
  46                                         struct mm_struct *mm)
  47 {
  48         /* mm->context is set up by pgd_alloc */
  49         return 0;
  50 }
  51 
  52 /*
  53  *  Switch active mm context
  54  */
  55 static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
  56                                 struct task_struct *tsk)
  57 {
  58         int l1;
  59 
  60         /*
  61          * For virtual machine, we have to update system map if it's been
  62          * touched.
  63          */
  64         if (next->context.generation < prev->context.generation) {
  65                 for (l1 = MIN_KERNEL_SEG; l1 <= max_kernel_seg; l1++)
  66                         next->pgd[l1] = init_mm.pgd[l1];
  67 
  68                 next->context.generation = prev->context.generation;
  69         }
  70 
  71         __vmnewmap((void *)next->context.ptbase);
  72 }
  73 
  74 /*
  75  *  Activate new memory map for task
  76  */
  77 static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
  78 {
  79         unsigned long flags;
  80 
  81         local_irq_save(flags);
  82         switch_mm(prev, next, current_thread_info()->task);
  83         local_irq_restore(flags);
  84 }
  85 
  86 /*  Generic hooks for arch_dup_mmap and arch_exit_mmap  */
  87 #include <asm-generic/mm_hooks.h>
  88 
  89 #endif

/* [<][>][^][v][top][bottom][index][help] */