cregit-Linux how code gets into the kernel

Release 4.14 arch/mips/kernel/csrc-r4k.c

Directory: arch/mips/kernel
/*
 * 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) 2007 by Ralf Baechle
 */
#include <linux/clocksource.h>
#include <linux/init.h>
#include <linux/sched_clock.h>

#include <asm/time.h>


static u64 c0_hpt_read(struct clocksource *cs) { return read_c0_count(); }

Contributors

PersonTokensPropCommitsCommitProp
Ralf Bächle1066.67%133.33%
Magnus Damm426.67%133.33%
Thomas Gleixner16.67%133.33%
Total15100.00%3100.00%

static struct clocksource clocksource_mips = { .name = "MIPS", .read = c0_hpt_read, .mask = CLOCKSOURCE_MASK(32), .flags = CLOCK_SOURCE_IS_CONTINUOUS, };
static u64 __maybe_unused notrace r4k_read_sched_clock(void) { return read_c0_count(); }

Contributors

PersonTokensPropCommitsCommitProp
Deng-Cheng Zhu1392.86%150.00%
Huacai Chen17.14%150.00%
Total14100.00%2100.00%


static inline unsigned int rdhwr_count(void) { unsigned int count; __asm__ __volatile__( " .set push\n" " .set mips32r2\n" " rdhwr %0, $2\n" " .set pop\n" : "=r" (count)); return count; }

Contributors

PersonTokensPropCommitsCommitProp
Alex Smith20100.00%1100.00%
Total20100.00%1100.00%


static bool rdhwr_count_usable(void) { unsigned int prev, curr, i; /* * Older QEMUs have a broken implementation of RDHWR for the CP0 count * which always returns a constant value. Try to identify this and don't * use it in the VDSO if it is broken. This workaround can be removed * once the fix has been in QEMU stable for a reasonable amount of time. */ for (i = 0, prev = rdhwr_count(); i < 100; i++) { curr = rdhwr_count(); if (curr != prev) return true; prev = curr; } pr_warn("Not using R4K clocksource in VDSO due to broken RDHWR\n"); return false; }

Contributors

PersonTokensPropCommitsCommitProp
Alex Smith63100.00%1100.00%
Total63100.00%1100.00%


int __init init_r4k_clocksource(void) { if (!cpu_has_counter || !mips_hpt_frequency) return -ENXIO; /* Calculate a somewhat reasonable rating value */ clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000; /* * R2 onwards makes the count accessible to user mode so it can be used * by the VDSO (HWREna is configured by configure_hwrena()). */ if (cpu_has_mips_r2_r6 && rdhwr_count_usable()) clocksource_mips.archdata.vdso_clock_mode = VDSO_CLOCK_R4K; clocksource_register_hz(&clocksource_mips, mips_hpt_frequency); #ifndef CONFIG_CPU_FREQ sched_clock_register(r4k_read_sched_clock, 32, mips_hpt_frequency); #endif return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Ralf Bächle4055.56%337.50%
Alex Smith1622.22%112.50%
Deng-Cheng Zhu912.50%112.50%
Huacai Chen56.94%112.50%
John Stultz11.39%112.50%
Manuel Lauss11.39%112.50%
Total72100.00%8100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Alex Smith9943.61%19.09%
Ralf Bächle9039.65%436.36%
Deng-Cheng Zhu2511.01%19.09%
Huacai Chen62.64%19.09%
Magnus Damm41.76%19.09%
John Stultz10.44%19.09%
Manuel Lauss10.44%19.09%
Thomas Gleixner10.44%19.09%
Total227100.00%11100.00%
Directory: arch/mips/kernel
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.