X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=09e56d66cb4079cb013a1c9e8d55e9cafbe62d6f;hp=f2e3adf26273b2cfa3dfaa0a48bdcb00a826f565;hb=bbfd6b00dea4daee05133c8cb991b78d091df9ae;hpb=01452055af61d6f5de543575dba3ebb0c9e55fab diff --git a/fio.h b/fio.h index f2e3adf2..09e56d66 100644 --- a/fio.h +++ b/fio.h @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -169,8 +168,8 @@ struct thread_data { char *ioscheduler; - struct drand48_data bsrange_state; - struct drand48_data verify_state; + os_random_state_t bsrange_state; + os_random_state_t verify_state; int shm_id; @@ -205,9 +204,9 @@ struct thread_data { unsigned long long zone_bytes; unsigned long long this_io_bytes[2]; unsigned long long last_pos; - sem_t mutex; + volatile int mutex; - struct drand48_data random_state; + os_random_state_t random_state; unsigned long *file_map; unsigned int num_maps; @@ -237,7 +236,7 @@ struct thread_data { unsigned int do_disk_util; unsigned int override_sync; - struct drand48_data rwmix_state; + os_random_state_t rwmix_state; struct timeval rwmix_switch; int rwmix_ddir; @@ -258,10 +257,6 @@ struct thread_data { snprintf(td->verror, sizeof(td->verror) - 1, "file:%s:%d, error=%s", __FILE__, __LINE__, strerror(e)); \ } while (0) -extern int parse_jobs_ini(char *); -extern int parse_options(int, char **); -extern void finish_log(struct thread_data *, struct io_log *, const char *); -extern int init_random_state(struct thread_data *); extern struct io_u *__get_io_u(struct thread_data *); extern void put_io_u(struct thread_data *, struct io_u *); @@ -375,6 +370,9 @@ extern void init_disk_util(struct thread_data *); extern void update_rusage_stat(struct thread_data *); extern void update_io_ticks(void); extern void disk_util_timer_arm(void); +extern void setup_log(struct io_log **); +extern void finish_log(struct thread_data *, struct io_log *, const char *); +extern int setup_rate(struct thread_data *); /* * Time functions @@ -386,4 +384,34 @@ extern unsigned long time_since_now(struct timeval *); extern void usec_sleep(struct thread_data *, unsigned long); extern void rate_throttle(struct thread_data *, unsigned long, unsigned int); +/* + * Init functions + */ +extern int parse_options(int, char **); +extern int init_random_state(struct thread_data *); + +/* + * This is a pretty crappy semaphore implementation, but with the use that fio + * has (just signalling start/go conditions), it doesn't have to be better. + * Naturally this would not work for any type of contended semaphore or + * for real locking. + */ +static inline void fio_sem_init(volatile int volatile *sem, int val) +{ + *sem = val; +} + +static inline void fio_sem_down(volatile int volatile *sem) +{ + while (*sem == 0) + usleep(10000); + + (*sem)--; +} + +static inline void fio_sem_up(volatile int volatile *sem) +{ + (*sem)++; +} + #endif