// SPDX-License-Identifier: GPL-2.0-or-later
/*
* This file contains the routines for handling the MMU .
*
* Copyright ( C ) 2007 Xilinx , Inc . All rights reserved .
*
* Derived from arch / ppc / mm / 4 xx_mmu . c :
* - - paulus
*
* Derived from arch / ppc / mm / init . c :
* Copyright ( C ) 1995 - 1996 Gary Thomas ( gdt @ linuxppc . org )
*
* Modifications by Paul Mackerras ( PowerMac ) ( paulus @ cs . anu . edu . au )
* and Cort Dougan ( PReP ) ( cort @ cs . nmt . edu )
* Copyright ( C ) 1996 Paul Mackerras
* Amiga / APUS changes by Jesper Skov ( jskov @ cygnus . co . uk ) .
*
* Derived from " arch / i386 / mm / init . c "
* Copyright ( C ) 1991 , 1992 , 1993 , 1994 Linus Torvalds
*/
#include <linux/mm.h>
#include <linux/init.h>
#include <asm /tlbflush.h>
#include <asm /mmu_context.h>
mm_context_t next_mmu_context;
unsigned long context_map[LAST_CONTEXT / BITS_PER_LONG + 1 ];
atomic_t nr_free_contexts;
struct mm_struct *context_mm[LAST_CONTEXT+1 ];
/*
* Initialize the context management stuff .
*/
void __init mmu_context_init(void )
{
/*
* The use of context zero is reserved for the kernel .
* This code assumes FIRST_CONTEXT < 32 .
*/
context_map[0 ] = (1 << FIRST_CONTEXT) - 1 ;
next_mmu_context = FIRST_CONTEXT;
atomic_set(&nr_free_contexts, LAST_CONTEXT - FIRST_CONTEXT + 1 );
}
/*
* Steal a context from a task that has one at the moment .
*
* This isn ' t an LRU system , it just frees up each context in
* turn ( sort - of pseudo - random replacement : ) . This would be the
* place to implement an LRU scheme if anyone were motivated to do it .
*/
void steal_context(void )
{
struct mm_struct *mm;
/* free up context `next_mmu_context' */
/* if we shouldn't free context 0, don't... */
if (next_mmu_context < FIRST_CONTEXT)
next_mmu_context = FIRST_CONTEXT;
mm = context_mm[next_mmu_context];
flush_tlb_mm(mm);
destroy_context(mm);
}
Messung V0.5 in Prozent C=92 H=74 G=83
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-09-28)
¤
*© Formatika GbR, Deutschland