Add support for the Google xxhash checksumming function

It's a lot faster than the other software defined ones, so will
be a useful alternative for the cases where crc32c-intel isn't
available.

Signed-off-by: Jens Axboe <axboe@fb.com>
diff --git a/crc/test.c b/crc/test.c
index 2f6d9ee..174bea3 100644
--- a/crc/test.c
+++ b/crc/test.c
@@ -16,6 +16,7 @@
 #include "../crc/sha1.h"
 #include "../crc/sha256.h"
 #include "../crc/sha512.h"
+#include "../crc/xxhash.h"
 
 #define CHUNK		131072U
 #define NR_CHUNKS	  2048U
@@ -36,6 +37,7 @@
 	T_SHA1		= 1U << 6,
 	T_SHA256	= 1U << 7,
 	T_SHA512	= 1U << 8,
+	T_XXHASH	= 1U << 9,
 };
 
 static void randomize_buf(void *buf, unsigned int size, int seed)
@@ -233,6 +235,29 @@
 	return ret;
 }
 
+static uint64_t t_xxhash(void)
+{
+	void *state;
+	struct timeval s;
+	uint64_t ret;
+	void *buf;
+	int i;
+
+	state = XXH32_init(0x8989);
+
+	buf = malloc(CHUNK);
+	randomize_buf(buf, CHUNK, 0x8989);
+
+	fio_gettime(&s, NULL);
+	for (i = 0; i < NR_CHUNKS; i++)
+		XXH32_update(state, buf, CHUNK);
+
+	XXH32_digest(state);
+	ret = utime_since_now(&s);
+	free(buf);
+	return ret;
+}
+
 static struct test_type t[] = {
 	{
 		.name = "md5",
@@ -280,6 +305,11 @@
 		.fn = t_sha512,
 	},
 	{
+		.name = "xxhash",
+		.mask = T_XXHASH,
+		.fn = t_xxhash,
+	},
+	{
 		.name = NULL,
 	},
 };