Make processes work on HP-UX
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index fa30019bfbeddd2bbbb756d069384468d343d1d2..a8608f49fdd4023c6e54d4e3cf38ec14234498f5 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -978,11 +978,6 @@ static void reset_io_counters(struct thread_data *td)
         */
        if (td->o.time_based || td->o.loops)
                td->nr_done_files = 0;
-
-       /*
-        * Set the same seed to get repeatable runs
-        */
-       td_fill_rand_seeds(td);
 }
 
 void reset_all_stats(struct thread_data *td)
@@ -1016,6 +1011,11 @@ static void clear_io_state(struct thread_data *td)
        close_files(td);
        for_each_file(td, f, i)
                fio_file_clear_done(f);
+
+       /*
+        * Set the same seed to get repeatable runs
+        */
+       td_fill_rand_seeds(td);
 }
 
 static int exec_string(const char *string)
@@ -1092,6 +1092,22 @@ static void *thread_main(void *data)
                goto err;
        }
 
+       /*
+        * If we have a gettimeofday() thread, make sure we exclude that
+        * thread from this job
+        */
+       if (td->o.gtod_cpu)
+               fio_cpu_clear(&td->o.cpumask, td->o.gtod_cpu);
+
+       /*
+        * Set affinity first, in case it has an impact on the memory
+        * allocations.
+        */
+       if (td->o.cpumask_set && fio_setaffinity(td->pid, td->o.cpumask) == -1) {
+               td_verror(td, errno, "cpu_set_affinity");
+               goto err;
+       }
+
        /*
         * May alter parameters that init_io_u() will use, so we need to
         * do this first.
@@ -1105,23 +1121,6 @@ static void *thread_main(void *data)
        if (td->o.verify_async && verify_async_init(td))
                goto err;
 
-       if (td->o.cpumask_set && fio_setaffinity(td->pid, td->o.cpumask) == -1) {
-               td_verror(td, errno, "cpu_set_affinity");
-               goto err;
-       }
-
-       /*
-        * If we have a gettimeofday() thread, make sure we exclude that
-        * thread from this job
-        */
-       if (td->o.gtod_cpu) {
-               fio_cpu_clear(&td->o.cpumask, td->o.gtod_cpu);
-               if (fio_setaffinity(td->pid, td->o.cpumask) == -1) {
-                       td_verror(td, errno, "cpu_set_affinity");
-                       goto err;
-               }
-       }
-
        if (td->ioprio_set) {
                if (ioprio_set(IOPRIO_WHO_PROCESS, 0, td->ioprio) == -1) {
                        td_verror(td, errno, "ioprio_set");
@@ -1295,6 +1294,7 @@ static int fork_main(int shmid, int offset)
        struct thread_data *td;
        void *data, *ret;
 
+#ifndef __hpux
        data = shmat(shmid, NULL, 0);
        if (data == (void *) -1) {
                int __err = errno;
@@ -1302,6 +1302,12 @@ static int fork_main(int shmid, int offset)
                perror("shmat");
                return __err;
        }
+#else
+       /*
+        * HP-UX inherits shm mappings?
+        */
+       data = threads;
+#endif
 
        td = data + offset * sizeof(struct thread_data);
        ret = thread_main(td);