cregit-Linux how code gets into the kernel

Release 4.14 arch/mn10300/include/asm/tlbflush.h

/* MN10300 TLB flushing functions
 *
 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
 * Written by David Howells (dhowells@redhat.com)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public Licence
 * as published by the Free Software Foundation; either version
 * 2 of the Licence, or (at your option) any later version.
 */
#ifndef _ASM_TLBFLUSH_H

#define _ASM_TLBFLUSH_H

#include <linux/mm.h>
#include <asm/processor.h>


struct tlb_state {
	
struct mm_struct	*active_mm;
	
int			state;
};
DECLARE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate);

/**
 * local_flush_tlb - Flush the current MM's entries from the local CPU's TLBs
 */

static inline void local_flush_tlb(void) { int w; asm volatile( " mov %1,%0 \n" " or %2,%0 \n" " mov %0,%1 \n" : "=d"(w) : "m"(MMUCTR), "i"(MMUCTR_IIV|MMUCTR_DIV) : "cc", "memory"); }

Contributors

PersonTokensPropCommitsCommitProp
David Howells15100.00%1100.00%
Total15100.00%1100.00%

/** * local_flush_tlb_all - Flush all entries from the local CPU's TLBs */
static inline void local_flush_tlb_all(void) { local_flush_tlb(); }

Contributors

PersonTokensPropCommitsCommitProp
Akira Takeuchi1191.67%150.00%
David Howells18.33%150.00%
Total12100.00%2100.00%

/** * local_flush_tlb_one - Flush one entry from the local CPU's TLBs */
static inline void local_flush_tlb_one(unsigned long addr) { local_flush_tlb(); }

Contributors

PersonTokensPropCommitsCommitProp
Akira Takeuchi1071.43%133.33%
David Howells428.57%266.67%
Total14100.00%3100.00%

/** * local_flush_tlb_page - Flush a page's entry from the local CPU's TLBs * @mm: The MM to flush for * @addr: The address of the target page in RAM (not its page struct) */
static inline void local_flush_tlb_page(struct mm_struct *mm, unsigned long addr) { unsigned long pteu, flags, cnx; addr &= PAGE_MASK; local_irq_save(flags); cnx = 1; #ifdef CONFIG_MN10300_TLB_USE_PIDR cnx = mm->context.tlbpid[smp_processor_id()]; #endif if (cnx) { pteu = addr; #ifdef CONFIG_MN10300_TLB_USE_PIDR pteu |= cnx & xPTEU_PID; #endif IPTEU = pteu; DPTEU = pteu; if (IPTEL & xPTEL_V) IPTEL = 0; if (DPTEL & xPTEL_V) DPTEL = 0; } local_irq_restore(flags); }

Contributors

PersonTokensPropCommitsCommitProp
Akira Takeuchi9688.89%150.00%
David Howells1211.11%150.00%
Total108100.00%2100.00%

/* * TLB flushing: * * - flush_tlb() flushes the current mm struct TLBs * - flush_tlb_all() flushes all processes TLBs * - flush_tlb_mm(mm) flushes the specified mm context TLB's * - flush_tlb_page(vma, vmaddr) flushes one page * - flush_tlb_range(mm, start, end) flushes a range of pages * - flush_tlb_pgtables(mm, start, end) flushes a range of page tables */ #ifdef CONFIG_SMP #include <asm/smp.h> extern void flush_tlb_all(void); extern void flush_tlb_current_task(void); extern void flush_tlb_mm(struct mm_struct *); extern void flush_tlb_page(struct vm_area_struct *, unsigned long); #define flush_tlb() flush_tlb_current_task()
static inline void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) { flush_tlb_mm(vma->vm_mm); }

Contributors

PersonTokensPropCommitsCommitProp
Akira Takeuchi2696.30%150.00%
David Howells13.70%150.00%
Total27100.00%2100.00%

#else /* CONFIG_SMP */
static inline void flush_tlb_all(void) { preempt_disable(); local_flush_tlb_all(); preempt_enable(); }

Contributors

PersonTokensPropCommitsCommitProp
Akira Takeuchi1794.44%150.00%
David Howells15.56%150.00%
Total18100.00%2100.00%


static inline void flush_tlb_mm(struct mm_struct *mm) { preempt_disable(); local_flush_tlb_all(); preempt_enable(); }

Contributors

PersonTokensPropCommitsCommitProp
Akira Takeuchi1990.48%150.00%
David Howells29.52%150.00%
Total21100.00%2100.00%


static inline void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) { preempt_disable(); local_flush_tlb_all(); preempt_enable(); }

Contributors

PersonTokensPropCommitsCommitProp
Akira Takeuchi2172.41%150.00%
David Howells827.59%150.00%
Total29100.00%2100.00%

#define flush_tlb_page(vma, addr) local_flush_tlb_page((vma)->vm_mm, addr) #define flush_tlb() flush_tlb_all() #endif /* CONFIG_SMP */
static inline void flush_tlb_kernel_range(unsigned long start, unsigned long end) { flush_tlb_all(); }

Contributors

PersonTokensPropCommitsCommitProp
Akira Takeuchi1266.67%150.00%
David Howells633.33%150.00%
Total18100.00%2100.00%


static inline void flush_tlb_pgtables(struct mm_struct *mm, unsigned long start, unsigned long end) { }

Contributors

PersonTokensPropCommitsCommitProp
Akira Takeuchi1157.89%150.00%
David Howells842.11%150.00%
Total19100.00%2100.00%

#endif /* _ASM_TLBFLUSH_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Akira Takeuchi29676.09%250.00%
David Howells9323.91%250.00%
Total389100.00%4100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.