gpu: kill a lot of useless ifdefs
[fio.git] / init.c
diff --git a/init.c b/init.c
index c9bf78f6223f00f36ab7c410f46f269464979db3..52a5f0301d196fe11b378fce6e59e41800745126 100644 (file)
--- a/init.c
+++ b/init.c
@@ -356,6 +356,8 @@ static int setup_thread_area(void)
                perror("shmat");
                return 1;
        }
+       if (shm_attach_to_open_removed())
+               shmctl(shm_id, IPC_RMID, NULL);
 #endif
 
        memset(threads, 0, max_jobs * sizeof(struct thread_data));
@@ -432,8 +434,8 @@ static void copy_opt_list(struct thread_data *dst, struct thread_data *src)
 /*
  * Return a free job structure.
  */
-static struct thread_data *get_new_job(int global, struct thread_data *parent,
-                                      int preserve_eo, const char *jobname)
+static struct thread_data *get_new_job(bool global, struct thread_data *parent,
+                                      bool preserve_eo, const char *jobname)
 {
        struct thread_data *td;
 
@@ -457,6 +459,7 @@ static struct thread_data *get_new_job(int global, struct thread_data *parent,
                copy_opt_list(td, parent);
 
        td->io_ops = NULL;
+       td->io_ops_init = 0;
        if (!preserve_eo)
                td->eo = NULL;
 
@@ -520,7 +523,7 @@ static int __setup_rate(struct thread_data *td, enum fio_ddir ddir)
 
        td->rate_next_io_time[ddir] = 0;
        td->rate_io_issue_bytes[ddir] = 0;
-       td->last_usec = 0;
+       td->last_usec[ddir] = 0;
        return 0;
 }
 
@@ -564,6 +567,17 @@ static unsigned long long get_rand_start_delay(struct thread_data *td)
        return delayrange;
 }
 
+/*
+ * <3 Johannes
+ */
+static unsigned int gcd(unsigned int m, unsigned int n)
+{
+       if (!n)
+               return m;
+
+       return gcd(n, m % n);
+}
+
 /*
  * Lazy way of fixing up options that depend on each other. We could also
  * define option callback handlers, but this is easier.
@@ -573,7 +587,7 @@ static int fixup_options(struct thread_data *td)
        struct thread_options *o = &td->o;
        int ret = 0;
 
-#ifndef FIO_HAVE_PSHARED_MUTEX
+#ifndef CONFIG_PSHARED
        if (!o->use_thread) {
                log_info("fio: this platform does not support process shared"
                         " mutexes, forcing use of threads. Use the 'thread'"
@@ -606,7 +620,7 @@ static int fixup_options(struct thread_data *td)
        /*
         * Reads can do overwrites, we always need to pre-create the file
         */
-       if (td_read(td) || td_rw(td))
+       if (td_read(td))
                o->overwrite = 1;
 
        if (!o->min_bs[DDIR_READ])
@@ -739,10 +753,20 @@ static int fixup_options(struct thread_data *td)
                        o->verify_interval = o->min_bs[DDIR_WRITE];
                else if (td_read(td) && o->verify_interval > o->min_bs[DDIR_READ])
                        o->verify_interval = o->min_bs[DDIR_READ];
+
+               /*
+                * Verify interval must be a factor or both min and max
+                * write size
+                */
+               if (o->verify_interval % o->min_bs[DDIR_WRITE] ||
+                   o->verify_interval % o->max_bs[DDIR_WRITE])
+                       o->verify_interval = gcd(o->min_bs[DDIR_WRITE],
+                                                       o->max_bs[DDIR_WRITE]);
        }
 
        if (o->pre_read) {
-               o->invalidate_cache = 0;
+               if (o->invalidate_cache)
+                       o->invalidate_cache = 0;
                if (td_ioengine_flagged(td, FIO_PIPEIO)) {
                        log_info("fio: cannot pre-read files with an IO engine"
                                 " that isn't seekable. Pre-read disabled.\n");
@@ -909,7 +933,9 @@ static void td_fill_rand_seeds_internal(struct thread_data *td, bool use64)
        init_rand_seed(&td->file_size_state, td->rand_seeds[FIO_RAND_FILE_SIZE_OFF], use64);
        init_rand_seed(&td->trim_state, td->rand_seeds[FIO_RAND_TRIM_OFF], use64);
        init_rand_seed(&td->delay_state, td->rand_seeds[FIO_RAND_START_DELAY], use64);
-       init_rand_seed(&td->poisson_state, td->rand_seeds[FIO_RAND_POISSON_OFF], 0);
+       init_rand_seed(&td->poisson_state[0], td->rand_seeds[FIO_RAND_POISSON_OFF], 0);
+       init_rand_seed(&td->poisson_state[1], td->rand_seeds[FIO_RAND_POISSON2_OFF], 0);
+       init_rand_seed(&td->poisson_state[2], td->rand_seeds[FIO_RAND_POISSON3_OFF], 0);
        init_rand_seed(&td->dedupe_state, td->rand_seeds[FIO_DEDUPE_OFF], false);
        init_rand_seed(&td->zone_state, td->rand_seeds[FIO_RAND_ZONE_OFF], false);
 
@@ -1000,7 +1026,7 @@ int ioengine_load(struct thread_data *td)
                 */
                if (origeo) {
                        memcpy(td->eo, origeo, td->io_ops->option_struct_size);
-                       options_mem_dupe(td->eo, td->io_ops->options);
+                       options_mem_dupe(td->io_ops->options, td->eo);
                } else {
                        memset(td->eo, 0, td->io_ops->option_struct_size);
                        fill_default_options(td->eo, td->io_ops->options);
@@ -1044,6 +1070,9 @@ static void init_flags(struct thread_data *td)
 
        if (o->verify_async || o->io_submit_mode == IO_MODE_OFFLOAD)
                td->flags |= TD_F_NEED_LOCK;
+
+       if (o->mem_type == MEM_CUDA_MALLOC)
+               td->flags &= ~TD_F_SCRAMBLE_BUFFERS;
 }
 
 static int setup_random_seeds(struct thread_data *td)
@@ -1094,7 +1123,7 @@ static char *make_filename(char *buf, size_t buf_size,struct thread_options *o,
 
        if (!o->filename_format || !strlen(o->filename_format)) {
                sprintf(buf, "%s.%d.%d", jobname, jobnum, filenum);
-               return NULL;
+               return buf;
        }
 
        for (f = &fpre_keywords[0]; f->keyword; f++)
@@ -1508,10 +1537,10 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                                                        ddir_str(o->td_ddir));
 
                                if (o->bs_is_seq_rand)
-                                       log_info("bs=%s-%s,%s-%s, bs_is_seq_rand, ",
+                                       log_info("bs=(R) %s-%s, (W) %s-%s, bs_is_seq_rand, ",
                                                        c1, c2, c3, c4);
                                else
-                                       log_info("bs=%s-%s,%s-%s,%s-%s, ",
+                                       log_info("bs=(R) %s-%s, (W) %s-%s, (T) %s-%s, ",
                                                        c1, c2, c3, c4, c5, c6);
 
                                log_info("ioengine=%s, iodepth=%u\n",
@@ -1537,7 +1566,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
         */
        numjobs = o->numjobs;
        while (--numjobs) {
-               struct thread_data *td_new = get_new_job(0, td, 1, jobname);
+               struct thread_data *td_new = get_new_job(false, td, true, jobname);
 
                if (!td_new)
                        goto err;
@@ -1598,11 +1627,11 @@ void add_job_opts(const char **o, int client_type)
                        sprintf(jobname, "%s", o[i] + 5);
                }
                if (in_global && !td_parent)
-                       td_parent = get_new_job(1, &def_thread, 0, jobname);
+                       td_parent = get_new_job(true, &def_thread, false, jobname);
                else if (!in_global && !td) {
                        if (!td_parent)
                                td_parent = &def_thread;
-                       td = get_new_job(0, td_parent, 0, jobname);
+                       td = get_new_job(false, td_parent, false, jobname);
                }
                if (in_global)
                        fio_options_parse(td_parent, (char **) &o[i], 1);
@@ -1654,7 +1683,7 @@ static int __parse_jobs_ini(struct thread_data *td,
                char *file, int is_buf, int stonewall_flag, int type,
                int nested, char *name, char ***popts, int *aopts, int *nopts)
 {
-       unsigned int global = 0;
+       bool global = false;
        char *string;
        FILE *f;
        char *p;
@@ -1763,7 +1792,7 @@ static int __parse_jobs_ini(struct thread_data *td,
                                first_sect = 0;
                        }
 
-                       td = get_new_job(global, &def_thread, 0, name);
+                       td = get_new_job(global, &def_thread, false, name);
                        if (!td) {
                                ret = 1;
                                break;
@@ -2303,17 +2332,22 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                case 'b':
                        write_bw_log = 1;
                        break;
-               case 'o':
+               case 'o': {
+                       FILE *tmp;
+
                        if (f_out && f_out != stdout)
                                fclose(f_out);
 
-                       f_out = fopen(optarg, "w+");
-                       if (!f_out) {
-                               perror("fopen output");
-                               exit(1);
+                       tmp = fopen(optarg, "w+");
+                       if (!tmp) {
+                               log_err("fio: output file open error: %s\n", strerror(errno));
+                               exit_val = 1;
+                               do_exit++;
+                               break;
                        }
-                       f_err = f_out;
+                       f_err = f_out = tmp;
                        break;
+                       }
                case 'm':
                        output_format = FIO_OUTPUT_TERSE;
                        break;
@@ -2447,7 +2481,7 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                                if (is_section && skip_this_section(val))
                                        continue;
 
-                               td = get_new_job(global, &def_thread, 1, NULL);
+                               td = get_new_job(global, &def_thread, true, NULL);
                                if (!td || ioengine_load(td)) {
                                        if (td) {
                                                put_job(td);
@@ -2685,7 +2719,7 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                if (!ret) {
                        ret = add_job(td, td->o.name ?: "fio", 0, 0, client_type);
                        if (ret)
-                               did_arg = 1;
+                               exit(1);
                }
        }
 
@@ -2697,9 +2731,6 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
        }
 
 out_free:
-       if (pid_file)
-               free(pid_file);
-
        return ini_idx;
 }
 
@@ -2768,7 +2799,7 @@ int parse_options(int argc, char *argv[])
                if (did_arg)
                        return 0;
 
-               log_err("No jobs(s) defined\n\n");
+               log_err("No job(s) defined\n\n");
 
                if (!did_arg) {
                        usage(argv[0]);