cregit-Linux how code gets into the kernel

Release 4.14 arch/mips/lib/mips-atomic.c

Directory: arch/mips/lib
/*
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (C) 1994, 95, 96, 97, 98, 99, 2003 by Ralf Baechle
 * Copyright (C) 1996 by Paul M. Antoine
 * Copyright (C) 1999 Silicon Graphics
 * Copyright (C) 2000 MIPS Technologies, Inc.
 */
#include <asm/irqflags.h>
#include <asm/hazards.h>
#include <linux/compiler.h>
#include <linux/preempt.h>
#include <linux/export.h>
#include <linux/stringify.h>

#if !defined(CONFIG_CPU_MIPSR2) && !defined(CONFIG_CPU_MIPSR6)

/*
 * For cli() we have to insert nops to make sure that the new value
 * has actually arrived in the status register before the end of this
 * macro.
 * R4000/R4400 need three nops, the R4600 two nops and the R10000 needs
 * no nops at all.
 */
/*
 * For TX49, operating only IE bit is not enough.
 *
 * If mfc0 $12 follows store and the mfc0 is last instruction of a
 * page and fetching the next instruction causes TLB miss, the result
 * of the mfc0 might wrongly contain EXL bit.
 *
 * ERT-TX49H2-027, ERT-TX49H3-012, ERT-TX49HL3-006, ERT-TX49H4-008
 *
 * Workaround: mask EXL bit of the result or place a nop before mfc0.
 */

notrace void arch_local_irq_disable(void) { preempt_disable(); __asm__ __volatile__( " .set push \n" " .set noat \n" " mfc0 $1,$12 \n" " ori $1,0x1f \n" " xori $1,0x1f \n" " .set noreorder \n" " mtc0 $1,$12 \n" " " __stringify(__irq_disable_hazard) " \n" " .set pop \n" : /* no outputs */ : /* no inputs */ : "memory"); preempt_enable(); }

Contributors

PersonTokensPropCommitsCommitProp
Ralf Bächle1257.14%133.33%
Jim Quinlan838.10%133.33%
Markos Chandras14.76%133.33%
Total21100.00%3100.00%

EXPORT_SYMBOL(arch_local_irq_disable);
notrace unsigned long arch_local_irq_save(void) { unsigned long flags; preempt_disable(); __asm__ __volatile__( " .set push \n" " .set reorder \n" " .set noat \n" " mfc0 %[flags], $12 \n" " ori $1, %[flags], 0x1f \n" " xori $1, 0x1f \n" " .set noreorder \n" " mtc0 $1, $12 \n" " " __stringify(__irq_disable_hazard) " \n" " .set pop \n" : [flags] "=r" (flags) : /* no inputs */ : "memory"); preempt_enable(); return flags; }

Contributors

PersonTokensPropCommitsCommitProp
Jim Quinlan2385.19%125.00%
Ralf Bächle27.41%125.00%
Al Cooper13.70%125.00%
Markos Chandras13.70%125.00%
Total27100.00%4100.00%

EXPORT_SYMBOL(arch_local_irq_save);
notrace void arch_local_irq_restore(unsigned long flags) { unsigned long __tmp1; preempt_disable(); __asm__ __volatile__( " .set push \n" " .set noreorder \n" " .set noat \n" " mfc0 $1, $12 \n" " andi %[flags], 1 \n" " ori $1, 0x1f \n" " xori $1, 0x1f \n" " or %[flags], $1 \n" " mtc0 %[flags], $12 \n" " " __stringify(__irq_disable_hazard) " \n" " .set pop \n" : [flags] "=r" (__tmp1) : "0" (flags) : "memory"); preempt_enable(); }

Contributors

PersonTokensPropCommitsCommitProp
Jim Quinlan2191.30%133.33%
Al Cooper14.35%133.33%
Markos Chandras14.35%133.33%
Total23100.00%3100.00%

EXPORT_SYMBOL(arch_local_irq_restore); #endif /* !CONFIG_CPU_MIPSR2 && !CONFIG_CPU_MIPSR6 */

Overall Contributors

PersonTokensPropCommitsCommitProp
Jim Quinlan8871.54%116.67%
Ralf Bächle1713.82%116.67%
Markos Chandras1512.20%233.33%
Al Cooper21.63%116.67%
Huacai Chen10.81%116.67%
Total123100.00%6100.00%
Directory: arch/mips/lib
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.