Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/kernel/time/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  jiffies.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0+
/*
 * This file contains the jiffies based clocksource.
 *
 * Copyright (C) 2004, 2005 IBM, John Stultz (johnstul@us.ibm.com)
 */

#include <linux/clocksource.h>
#include <linux/jiffies.h>
#include <linux/module.h>
#include <linux/init.h>

#include "timekeeping.h"
#include "tick-internal.h"


static u64 jiffies_read(struct clocksource *cs)
{
 return (u64) jiffies;
}

/*
 * The Jiffies based clocksource is the lowest common
 * denominator clock source which should function on
 * all systems. It has the same coarse resolution as
 * the timer interrupt frequency HZ and it suffers
 * inaccuracies caused by missed or lost timer
 * interrupts and the inability for the timer
 * interrupt hardware to accurately tick at the
 * requested HZ value. It is also not recommended
 * for "tick-less" systems.
 */

static struct clocksource clocksource_jiffies = {
 .name   = "jiffies",
 .rating   = 1, /* lowest valid rating*/
 .uncertainty_margin = 32 * NSEC_PER_MSEC,
 .read   = jiffies_read,
 .mask   = CLOCKSOURCE_MASK(32),
 .mult   = TICK_NSEC << JIFFIES_SHIFT, /* details above */
 .shift   = JIFFIES_SHIFT,
 .max_cycles  = 10,
};

__cacheline_aligned_in_smp DEFINE_RAW_SPINLOCK(jiffies_lock);
__cacheline_aligned_in_smp seqcount_raw_spinlock_t jiffies_seq =
 SEQCNT_RAW_SPINLOCK_ZERO(jiffies_seq, &jiffies_lock);

#if (BITS_PER_LONG < 64)
u64 get_jiffies_64(void)
{
 unsigned int seq;
 u64 ret;

 do {
  seq = read_seqcount_begin(&jiffies_seq);
  ret = jiffies_64;
 } while (read_seqcount_retry(&jiffies_seq, seq));
 return ret;
}
EXPORT_SYMBOL(get_jiffies_64);
#endif

EXPORT_SYMBOL(jiffies);

static int __init init_jiffies_clocksource(void)
{
 return __clocksource_register(&clocksource_jiffies);
}

core_initcall(init_jiffies_clocksource);

struct clocksource * __init __weak clocksource_default_clock(void)
{
 return &clocksource_jiffies;
}

static struct clocksource refined_jiffies;

void __init register_refined_jiffies(long cycles_per_second)
{
 u64 nsec_per_tick, shift_hz;
 long cycles_per_tick;

 refined_jiffies = clocksource_jiffies;
 refined_jiffies.name = "refined-jiffies";
 refined_jiffies.rating++;

 /* Calc cycles per tick */
 cycles_per_tick = (cycles_per_second + HZ/2)/HZ;
 /* shift_hz stores hz<<8 for extra accuracy */
 shift_hz = (u64)cycles_per_second << 8;
 shift_hz += cycles_per_tick/2;
 do_div(shift_hz, cycles_per_tick);
 /* Calculate nsec_per_tick using shift_hz */
 nsec_per_tick = (u64)NSEC_PER_SEC << 8;
 nsec_per_tick += (u32)shift_hz/2;
 do_div(nsec_per_tick, (u32)shift_hz);

 refined_jiffies.mult = ((u32)nsec_per_tick) << JIFFIES_SHIFT;

 __clocksource_register(&refined_jiffies);
}

Messung V0.5
C=96 H=87 G=91

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.