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

time-internal.h (2230B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Copyright (C) 2012 - 2014 Cisco Systems
      4 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
      5 */
      6
      7#ifndef __TIMER_INTERNAL_H__
      8#define __TIMER_INTERNAL_H__
      9#include <linux/list.h>
     10#include <asm/bug.h>
     11#include <shared/timetravel.h>
     12
     13#define TIMER_MULTIPLIER 256
     14#define TIMER_MIN_DELTA  500
     15
     16#ifdef CONFIG_UML_TIME_TRAVEL_SUPPORT
     17struct time_travel_event {
     18	unsigned long long time;
     19	void (*fn)(struct time_travel_event *d);
     20	struct list_head list;
     21	bool pending, onstack;
     22};
     23
     24void time_travel_sleep(void);
     25
     26static inline void
     27time_travel_set_event_fn(struct time_travel_event *e,
     28			 void (*fn)(struct time_travel_event *d))
     29{
     30	e->fn = fn;
     31}
     32
     33void __time_travel_propagate_time(void);
     34
     35static inline void time_travel_propagate_time(void)
     36{
     37	if (time_travel_mode == TT_MODE_EXTERNAL)
     38		__time_travel_propagate_time();
     39}
     40
     41void __time_travel_wait_readable(int fd);
     42
     43static inline void time_travel_wait_readable(int fd)
     44{
     45	if (time_travel_mode == TT_MODE_EXTERNAL)
     46		__time_travel_wait_readable(fd);
     47}
     48
     49void time_travel_add_irq_event(struct time_travel_event *e);
     50void time_travel_add_event_rel(struct time_travel_event *e,
     51			       unsigned long long delay_ns);
     52bool time_travel_del_event(struct time_travel_event *e);
     53#else
     54struct time_travel_event {
     55};
     56
     57static inline void time_travel_sleep(void)
     58{
     59}
     60
     61/* this is a macro so the event/function need not exist */
     62#define time_travel_set_event_fn(e, fn) do {} while (0)
     63
     64static inline void time_travel_propagate_time(void)
     65{
     66}
     67
     68static inline void time_travel_wait_readable(int fd)
     69{
     70}
     71
     72static inline void time_travel_add_irq_event(struct time_travel_event *e)
     73{
     74	WARN_ON(1);
     75}
     76
     77/*
     78 * not inlines so the data structure need not exist,
     79 * cause linker failures
     80 */
     81extern void time_travel_not_configured(void);
     82#define time_travel_add_event_rel(...) time_travel_not_configured()
     83#define time_travel_del_event(...) time_travel_not_configured()
     84#endif /* CONFIG_UML_TIME_TRAVEL_SUPPORT */
     85
     86/*
     87 * Without CONFIG_UML_TIME_TRAVEL_SUPPORT this is a linker error if used,
     88 * which is intentional since we really shouldn't link it in that case.
     89 */
     90void time_travel_ndelay(unsigned long nsec);
     91#endif /* __TIMER_INTERNAL_H__ */