--- /dev/null
+#ifndef ARCH_H
+#define ARCH_H
+
+/*
+ * assume we don't have _get either, if _set isn't defined
+ */
+#ifndef __NR_ioprio_set
+#if defined(__i386__)
+#define __NR_ioprio_set 289
+#define __NR_ioprio_get 290
+#elif defined(__powerpc__) || defined(__powerpc64__)
+#define __NR_ioprio_set 273
+#define __NR_ioprio_get 274
+#elif defined(__x86_64__)
+#define __NR_ioprio_set 251
+#define __NR_ioprio_get 252
+#elif defined(__ia64__)
+#define __NR_ioprio_set 1274
+#define __NR_ioprio_get 1275
+#elif defined(__alpha__)
+#define __NR_ioprio_set 442
+#define __NR_ioprio_get 443
+#elif defined(__s390x__) || defined(__s390__)
+#define __NR_ioprio_set 282
+#define __NR_ioprio_get 283
+#else
+#error "Unsupported arch"
+#endif
+#endif
+
+#ifndef __NR_fadvise64
+#if defined(__i386__)
+#define __NR_fadvise64 250
+#elif defined(__powerpc__) || defined(__powerpc64__)
+#define __NR_fadvise64 233
+#elif defined(__x86_64__)
+#define __NR_fadvise64 221
+#elif defined(__ia64__)
+#define __NR_fadvise64 1234
+#elif defined(__alpha__)
+#define __NR_fadvise64 413
+#elif defined(__s390x__) || defined(__s390__)
+#define __NR_fadvise64 253
+#else
+#error "Unsupported arch"
+#endif
+#endif
+
+#if defined(__i386__) || defined(__x86_64)
+#define nop __asm__ __volatile__("rep;nop": : :"memory")
+#elif defined defined(__powerpc__) || defined(__powerpc64__)
+#define nop do { } while (0)
+#elif defined(__ia64__)
+#define nop asm volatile ("hint @pause" ::: "memory");
+#elif defined(__alpha__)
+#define nop do { } while (0)
+#elif defined(__s390x__) || defined(__s390__)
+#define nop asm volatile ("diag 0,0,68" : : : "memory")
+#else
+#error "Unsupported arch"
+#endif
+
+#endif
#include <asm/types.h>
#include <asm/bitops.h>
+#include "arch.h"
#include "list.h"
#include "md5.h"
#define MAX_JOBS (1024)
-/*
- * assume we don't have _get either, if _set isn't defined
- */
-#ifndef __NR_ioprio_set
-#if defined(__i386__)
-#define __NR_ioprio_set 289
-#define __NR_ioprio_get 290
-#elif defined(__powerpc__) || defined(__powerpc64__)
-#define __NR_ioprio_set 273
-#define __NR_ioprio_get 274
-#elif defined(__x86_64__)
-#define __NR_ioprio_set 251
-#define __NR_ioprio_get 252
-#elif defined(__ia64__)
-#define __NR_ioprio_set 1274
-#define __NR_ioprio_get 1275
-#elif defined(__alpha__)
-#define __NR_ioprio_set 442
-#define __NR_ioprio_get 443
-#elif defined(__s390x__) || defined(__s390__)
-#define __NR_ioprio_set 282
-#define __NR_ioprio_get 283
-#else
-#error "Unsupported arch"
-#endif
-#endif
-
-#ifndef __NR_fadvise64
-#if defined(__i386__)
-#define __NR_fadvise64 250
-#elif defined(__powerpc__) || defined(__powerpc64__)
-#define __NR_fadvise64 233
-#elif defined(__x86_64__)
-#define __NR_fadvise64 221
-#elif defined(__ia64__)
-#define __NR_fadvise64 1234
-#elif defined(__alpha__)
-#define __NR_fadvise64 413
-#elif defined(__s390x__) || defined(__s390__)
-#define __NR_fadvise64 253
-#else
-#error "Unsupported arch"
-#endif
-#endif
-
static int ioprio_set(int which, int who, int ioprio)
{
return syscall(__NR_ioprio_set, which, who, ioprio);
return sec + usec;
}
+static unsigned long utime_since_now(struct timeval *s)
+{
+ struct timeval t;
+
+ gettimeofday(&t, NULL);
+ return utime_since(s, &t);
+}
+
static unsigned long mtime_since(struct timeval *s, struct timeval *e)
{
double sec, usec;
td->stat_io_bytes = td->this_io_bytes;
}
+/*
+ * busy looping version for the last few usec
+ */
+static void __usec_sleep(int usec)
+{
+ struct timeval start;
+
+ gettimeofday(&start, NULL);
+ while (utime_since_now(&start) < usec)
+ __asm__ __volatile__("rep;nop": : :"memory");
+}
+
static void usec_sleep(int usec)
{
struct timespec req = { .tv_sec = 0, .tv_nsec = usec * 1000 };
struct timespec rem;
do {
+ if (usec < 5000) {
+ __usec_sleep(usec);
+ break;
+ }
rem.tv_sec = rem.tv_nsec = 0;
nanosleep(&req, &rem);
if (!rem.tv_nsec)
break;
req.tv_nsec = rem.tv_nsec;
+ usec = rem.tv_nsec * 1000;
} while (1);
}