1 // SPDX-License-Identifier: GPL-2.0-or-later 1 2 /* 3 * This file contains the routines for handlin 4 * 5 * Copyright (C) 2007 Xilinx, Inc. All rig 6 * 7 * Derived from arch/ppc/mm/4xx_mmu.c: 8 * -- paulus 9 * 10 * Derived from arch/ppc/mm/init.c: 11 * Copyright (C) 1995-1996 Gary Thomas (gdt 12 * 13 * Modifications by Paul Mackerras (PowerMac) 14 * and Cort Dougan (PReP) (cort@cs.nmt.edu) 15 * Copyright (C) 1996 Paul Mackerras 16 * Amiga/APUS changes by Jesper Skov (jskov@c 17 * 18 * Derived from "arch/i386/mm/init.c" 19 * Copyright (C) 1991, 1992, 1993, 1994 Li 20 */ 21 22 #include <linux/mm.h> 23 #include <linux/init.h> 24 25 #include <asm/tlbflush.h> 26 #include <asm/mmu_context.h> 27 28 mm_context_t next_mmu_context; 29 unsigned long context_map[LAST_CONTEXT / BITS_ 30 atomic_t nr_free_contexts; 31 struct mm_struct *context_mm[LAST_CONTEXT+1]; 32 33 /* 34 * Initialize the context management stuff. 35 */ 36 void __init mmu_context_init(void) 37 { 38 /* 39 * The use of context zero is reserved 40 * This code assumes FIRST_CONTEXT < 3 41 */ 42 context_map[0] = (1 << FIRST_CONTEXT) 43 next_mmu_context = FIRST_CONTEXT; 44 atomic_set(&nr_free_contexts, LAST_CON 45 } 46 47 /* 48 * Steal a context from a task that has one at 49 * 50 * This isn't an LRU system, it just frees up 51 * turn (sort-of pseudo-random replacement :). 52 * place to implement an LRU scheme if anyone 53 */ 54 void steal_context(void) 55 { 56 struct mm_struct *mm; 57 58 /* free up context `next_mmu_context' 59 /* if we shouldn't free context 0, don 60 if (next_mmu_context < FIRST_CONTEXT) 61 next_mmu_context = FIRST_CONTE 62 mm = context_mm[next_mmu_context]; 63 flush_tlb_mm(mm); 64 destroy_context(mm); 65 } 66
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.