root/test/interbench/interbench.h
/* Interbench.h */
#ifndef INTERBENCH_H
#define INTERBENCH_H

extern void *hackbench_thread(void *t);
extern void terminal_error(const char *name);
extern inline void post_sem(sem_t *s);
extern inline void wait_sem(sem_t *s);
extern inline int trywait_sem(sem_t *s);
extern inline ssize_t Read(int fd, void *buf, size_t count);

#define THREADS         13      /* The total number of different loads */

struct sems {
        sem_t ready;
        sem_t start;
        sem_t stop;
        sem_t complete;
        sem_t stopchild;
};

struct tk_thread {
        struct sems sem;
        unsigned long sleep_interval;
        unsigned long slept_interval;
};

struct data_table {
        unsigned long long total_latency;
        unsigned long long sum_latency_squared;
        unsigned long max_latency;
        unsigned long nr_samples;
        unsigned long deadlines_met;
        unsigned long missed_deadlines;
        unsigned long long missed_burns;
        unsigned long long achieved_burns;
};

struct thread {
        void (*name)(struct thread *);
        char *label;
        int bench;              /* This thread is suitable for benchmarking */
        int rtbench;            /* Suitable for real time benchmarking */
        int load;               /* Suitable as a background load */
        int rtload;             /* Suitable as a background load for rt benches */
        int nodeadlines;        /* Deadlines_met are meaningless for this load */
        unsigned long decasecond_deadlines;     /* Expected deadlines / 10s */
        pthread_t pthread;
        pthread_t tk_pthread;
        struct sems sem;
        struct data_table benchmarks[THREADS + 1], *dt;
        struct tk_thread tkthread;
        long threadno;
};
extern struct thread hackthread;
#endif