cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sched_clock.h (1498B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * sched_clock.h: support for extending counters to full 64-bit ns counter
      4 */
      5#ifndef LINUX_SCHED_CLOCK
      6#define LINUX_SCHED_CLOCK
      7
      8#include <linux/types.h>
      9
     10#ifdef CONFIG_GENERIC_SCHED_CLOCK
     11/**
     12 * struct clock_read_data - data required to read from sched_clock()
     13 *
     14 * @epoch_ns:		sched_clock() value at last update
     15 * @epoch_cyc:		Clock cycle value at last update.
     16 * @sched_clock_mask:   Bitmask for two's complement subtraction of non 64bit
     17 *			clocks.
     18 * @read_sched_clock:	Current clock source (or dummy source when suspended).
     19 * @mult:		Multiplier for scaled math conversion.
     20 * @shift:		Shift value for scaled math conversion.
     21 *
     22 * Care must be taken when updating this structure; it is read by
     23 * some very hot code paths. It occupies <=40 bytes and, when combined
     24 * with the seqcount used to synchronize access, comfortably fits into
     25 * a 64 byte cache line.
     26 */
     27struct clock_read_data {
     28	u64 epoch_ns;
     29	u64 epoch_cyc;
     30	u64 sched_clock_mask;
     31	u64 (*read_sched_clock)(void);
     32	u32 mult;
     33	u32 shift;
     34};
     35
     36extern struct clock_read_data *sched_clock_read_begin(unsigned int *seq);
     37extern int sched_clock_read_retry(unsigned int seq);
     38
     39extern void generic_sched_clock_init(void);
     40
     41extern void sched_clock_register(u64 (*read)(void), int bits,
     42				 unsigned long rate);
     43#else
     44static inline void generic_sched_clock_init(void) { }
     45
     46static inline void sched_clock_register(u64 (*read)(void), int bits,
     47					unsigned long rate)
     48{
     49}
     50#endif
     51
     52#endif