All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Levin, Alexander (Sasha Levin)" <alexander.levin@verizon.com>
To: "mingo@kernel.org" <mingo@kernel.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"ben@decadent.org.uk" <ben@decadent.org.uk>,
	"a.p.zijlstra@chello.nl" <a.p.zijlstra@chello.nl>,
	"tglx@linutronix.de" <tglx@linutronix.de>
Subject: [PATCH 12/21] tools: liblockdep: fix compilation for 4.11
Date: Thu, 25 May 2017 12:58:47 +0000	[thread overview]
Message-ID: <20170525130005.5947-13-alexander.levin@verizon.com> (raw)
In-Reply-To: <20170525130005.5947-1-alexander.levin@verizon.com>

 - More rcu stubs
 - New dummy headers due to sched header split
 - jhash2 included in due to kernel lockdep inclusion and usage

Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 tools/include/linux/bitops.h                  |  10 ++
 tools/include/linux/jhash.h                   | 175 ++++++++++++++++++++++++++
 tools/include/linux/sched/clock.h             |   0
 tools/include/linux/sched/task.h              |   0
 tools/include/linux/unaligned/packed_struct.h |  46 +++++++
 tools/lib/lockdep/uinclude/linux/bitops.h     |   3 -
 tools/lib/lockdep/uinclude/linux/compiler.h   |   2 +
 tools/lib/lockdep/uinclude/linux/kernel.h     |   2 +
 tools/lib/lockdep/uinclude/linux/rcu.h        |   2 +
 9 files changed, 237 insertions(+), 3 deletions(-)
 create mode 100644 tools/include/linux/jhash.h
 create mode 100644 tools/include/linux/sched/clock.h
 create mode 100644 tools/include/linux/sched/task.h
 create mode 100644 tools/include/linux/unaligned/packed_struct.h
 delete mode 100644 tools/lib/lockdep/uinclude/linux/bitops.h

diff --git a/tools/include/linux/bitops.h b/tools/include/linux/bitops.h
index 1aecad369af5..969db1981868 100644
--- a/tools/include/linux/bitops.h
+++ b/tools/include/linux/bitops.h
@@ -61,4 +61,14 @@ static inline unsigned fls_long(unsigned long l)
 	return fls64(l);
 }
 
+/**
+ * rol32 - rotate a 32-bit value left
+ * @word: value to rotate
+ * @shift: bits to roll
+ */
+static inline __u32 rol32(__u32 word, unsigned int shift)
+{
+	return (word << shift) | (word >> ((-shift) & 31));
+}
+
 #endif
diff --git a/tools/include/linux/jhash.h b/tools/include/linux/jhash.h
new file mode 100644
index 000000000000..348c6f47e4cc
--- /dev/null
+++ b/tools/include/linux/jhash.h
@@ -0,0 +1,175 @@
+#ifndef _LINUX_JHASH_H
+#define _LINUX_JHASH_H
+
+/* jhash.h: Jenkins hash support.
+ *
+ * Copyright (C) 2006. Bob Jenkins (bob_jenkins@burtleburtle.net)
+ *
+ * http://burtleburtle.net/bob/hash/
+ *
+ * These are the credits from Bob's sources:
+ *
+ * lookup3.c, by Bob Jenkins, May 2006, Public Domain.
+ *
+ * These are functions for producing 32-bit hashes for hash table lookup.
+ * hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final()
+ * are externally useful functions.  Routines to test the hash are included
+ * if SELF_TEST is defined.  You can use this free for any purpose.  It's in
+ * the public domain.  It has no warranty.
+ *
+ * Copyright (C) 2009-2010 Jozsef Kadlecsik (kadlec@blackhole.kfki.hu)
+ *
+ * I've modified Bob's hash to be useful in the Linux kernel, and
+ * any bugs present are my fault.
+ * Jozsef
+ */
+#include <linux/bitops.h>
+#include <linux/unaligned/packed_struct.h>
+
+/* Best hash sizes are of power of two */
+#define jhash_size(n)   ((u32)1<<(n))
+/* Mask the hash value, i.e (value & jhash_mask(n)) instead of (value % n) */
+#define jhash_mask(n)   (jhash_size(n)-1)
+
+/* __jhash_mix -- mix 3 32-bit values reversibly. */
+#define __jhash_mix(a, b, c)			\
+{						\
+	a -= c;  a ^= rol32(c, 4);  c += b;	\
+	b -= a;  b ^= rol32(a, 6);  a += c;	\
+	c -= b;  c ^= rol32(b, 8);  b += a;	\
+	a -= c;  a ^= rol32(c, 16); c += b;	\
+	b -= a;  b ^= rol32(a, 19); a += c;	\
+	c -= b;  c ^= rol32(b, 4);  b += a;	\
+}
+
+/* __jhash_final - final mixing of 3 32-bit values (a,b,c) into c */
+#define __jhash_final(a, b, c)			\
+{						\
+	c ^= b; c -= rol32(b, 14);		\
+	a ^= c; a -= rol32(c, 11);		\
+	b ^= a; b -= rol32(a, 25);		\
+	c ^= b; c -= rol32(b, 16);		\
+	a ^= c; a -= rol32(c, 4);		\
+	b ^= a; b -= rol32(a, 14);		\
+	c ^= b; c -= rol32(b, 24);		\
+}
+
+/* An arbitrary initial parameter */
+#define JHASH_INITVAL		0xdeadbeef
+
+/* jhash - hash an arbitrary key
+ * @k: sequence of bytes as key
+ * @length: the length of the key
+ * @initval: the previous hash, or an arbitray value
+ *
+ * The generic version, hashes an arbitrary sequence of bytes.
+ * No alignment or length assumptions are made about the input key.
+ *
+ * Returns the hash value of the key. The result depends on endianness.
+ */
+static inline u32 jhash(const void *key, u32 length, u32 initval)
+{
+	u32 a, b, c;
+	const u8 *k = key;
+
+	/* Set up the internal state */
+	a = b = c = JHASH_INITVAL + length + initval;
+
+	/* All but the last block: affect some 32 bits of (a,b,c) */
+	while (length > 12) {
+		a += __get_unaligned_cpu32(k);
+		b += __get_unaligned_cpu32(k + 4);
+		c += __get_unaligned_cpu32(k + 8);
+		__jhash_mix(a, b, c);
+		length -= 12;
+		k += 12;
+	}
+	/* Last block: affect all 32 bits of (c) */
+	/* All the case statements fall through */
+	switch (length) {
+	case 12: c += (u32)k[11]<<24;
+	case 11: c += (u32)k[10]<<16;
+	case 10: c += (u32)k[9]<<8;
+	case 9:  c += k[8];
+	case 8:  b += (u32)k[7]<<24;
+	case 7:  b += (u32)k[6]<<16;
+	case 6:  b += (u32)k[5]<<8;
+	case 5:  b += k[4];
+	case 4:  a += (u32)k[3]<<24;
+	case 3:  a += (u32)k[2]<<16;
+	case 2:  a += (u32)k[1]<<8;
+	case 1:  a += k[0];
+		 __jhash_final(a, b, c);
+	case 0: /* Nothing left to add */
+		break;
+	}
+
+	return c;
+}
+
+/* jhash2 - hash an array of u32's
+ * @k: the key which must be an array of u32's
+ * @length: the number of u32's in the key
+ * @initval: the previous hash, or an arbitray value
+ *
+ * Returns the hash value of the key.
+ */
+static inline u32 jhash2(const u32 *k, u32 length, u32 initval)
+{
+	u32 a, b, c;
+
+	/* Set up the internal state */
+	a = b = c = JHASH_INITVAL + (length<<2) + initval;
+
+	/* Handle most of the key */
+	while (length > 3) {
+		a += k[0];
+		b += k[1];
+		c += k[2];
+		__jhash_mix(a, b, c);
+		length -= 3;
+		k += 3;
+	}
+
+	/* Handle the last 3 u32's: all the case statements fall through */
+	switch (length) {
+	case 3: c += k[2];
+	case 2: b += k[1];
+	case 1: a += k[0];
+		__jhash_final(a, b, c);
+	case 0:	/* Nothing left to add */
+		break;
+	}
+
+	return c;
+}
+
+
+/* __jhash_nwords - hash exactly 3, 2 or 1 word(s) */
+static inline u32 __jhash_nwords(u32 a, u32 b, u32 c, u32 initval)
+{
+	a += initval;
+	b += initval;
+	c += initval;
+
+	__jhash_final(a, b, c);
+
+	return c;
+}
+
+static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
+{
+	return __jhash_nwords(a, b, c, initval + JHASH_INITVAL + (3 << 2));
+}
+
+static inline u32 jhash_2words(u32 a, u32 b, u32 initval)
+{
+	return __jhash_nwords(a, b, 0, initval + JHASH_INITVAL + (2 << 2));
+}
+
+static inline u32 jhash_1word(u32 a, u32 initval)
+{
+	return __jhash_nwords(a, 0, 0, initval + JHASH_INITVAL + (1 << 2));
+}
+
+#endif /* _LINUX_JHASH_H */
diff --git a/tools/include/linux/sched/clock.h b/tools/include/linux/sched/clock.h
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/tools/include/linux/sched/task.h b/tools/include/linux/sched/task.h
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/tools/include/linux/unaligned/packed_struct.h b/tools/include/linux/unaligned/packed_struct.h
new file mode 100644
index 000000000000..c0d817de4df2
--- /dev/null
+++ b/tools/include/linux/unaligned/packed_struct.h
@@ -0,0 +1,46 @@
+#ifndef _LINUX_UNALIGNED_PACKED_STRUCT_H
+#define _LINUX_UNALIGNED_PACKED_STRUCT_H
+
+#include <linux/kernel.h>
+
+struct __una_u16 { u16 x; } __packed;
+struct __una_u32 { u32 x; } __packed;
+struct __una_u64 { u64 x; } __packed;
+
+static inline u16 __get_unaligned_cpu16(const void *p)
+{
+	const struct __una_u16 *ptr = (const struct __una_u16 *)p;
+	return ptr->x;
+}
+
+static inline u32 __get_unaligned_cpu32(const void *p)
+{
+	const struct __una_u32 *ptr = (const struct __una_u32 *)p;
+	return ptr->x;
+}
+
+static inline u64 __get_unaligned_cpu64(const void *p)
+{
+	const struct __una_u64 *ptr = (const struct __una_u64 *)p;
+	return ptr->x;
+}
+
+static inline void __put_unaligned_cpu16(u16 val, void *p)
+{
+	struct __una_u16 *ptr = (struct __una_u16 *)p;
+	ptr->x = val;
+}
+
+static inline void __put_unaligned_cpu32(u32 val, void *p)
+{
+	struct __una_u32 *ptr = (struct __una_u32 *)p;
+	ptr->x = val;
+}
+
+static inline void __put_unaligned_cpu64(u64 val, void *p)
+{
+	struct __una_u64 *ptr = (struct __una_u64 *)p;
+	ptr->x = val;
+}
+
+#endif /* _LINUX_UNALIGNED_PACKED_STRUCT_H */
diff --git a/tools/lib/lockdep/uinclude/linux/bitops.h b/tools/lib/lockdep/uinclude/linux/bitops.h
deleted file mode 100644
index fab00ff936d1..000000000000
--- a/tools/lib/lockdep/uinclude/linux/bitops.h
+++ /dev/null
@@ -1,3 +0,0 @@
-
-/* empty file */
-
diff --git a/tools/lib/lockdep/uinclude/linux/compiler.h b/tools/lib/lockdep/uinclude/linux/compiler.h
index fd3e56a83fc2..fba5e022cee7 100644
--- a/tools/lib/lockdep/uinclude/linux/compiler.h
+++ b/tools/lib/lockdep/uinclude/linux/compiler.h
@@ -7,4 +7,6 @@
 #define WRITE_ONCE(x, val) x=(val)
 #define RCU_INIT_POINTER(p, v) p=(v)
 
+#define __packed	__attribute__((packed))
+
 #endif
diff --git a/tools/lib/lockdep/uinclude/linux/kernel.h b/tools/lib/lockdep/uinclude/linux/kernel.h
index 021cff4f4e3d..faa98cc7971a 100644
--- a/tools/lib/lockdep/uinclude/linux/kernel.h
+++ b/tools/lib/lockdep/uinclude/linux/kernel.h
@@ -52,4 +52,6 @@ static inline int lockdep_warn(int condition)
 #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; })
 #endif
 
+#define pr_err(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
+
 #endif
diff --git a/tools/lib/lockdep/uinclude/linux/rcu.h b/tools/lib/lockdep/uinclude/linux/rcu.h
index 042ee8e463c9..6f0332324a6d 100644
--- a/tools/lib/lockdep/uinclude/linux/rcu.h
+++ b/tools/lib/lockdep/uinclude/linux/rcu.h
@@ -18,4 +18,6 @@ static inline bool rcu_is_watching(void)
 	return false;
 }
 
+#define rcu_assign_pointer(p, v) ((p) = (v))
+
 #endif
-- 
2.11.0

  parent reply	other threads:[~2017-05-25 13:01 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-25 12:58 [PATCH 00/21] liblockdep fixes for v4.12 Levin, Alexander (Sasha Levin)
2017-05-25 12:58 ` [PATCH 01/21] liblockdep: Fix undefined symbol prandom_u32 Levin, Alexander (Sasha Levin)
2017-06-05  9:01   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Ben Hutchings
2017-05-25 12:58 ` [PATCH 02/21] liblockdep: Reduce MAX_LOCK_DEPTH to avoid overflowing lock_chain::depth Levin, Alexander (Sasha Levin)
2017-06-05  9:01   ` [tip:locking/core] tools/lib/lockdep: Reduce MAX_LOCK_DEPTH to avoid overflowing lock_chain/: Depth tip-bot for Ben Hutchings
2017-05-25 12:58 ` [PATCH 03/21] liblockdep: Define the ARRAY_SIZE() macro Levin, Alexander (Sasha Levin)
2017-06-05  9:02   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Ben Hutchings
2017-05-25 12:58 ` [PATCH 04/21] liblockdep: Enable -Wall by default Levin, Alexander (Sasha Levin)
2017-06-05  9:02   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Ben Hutchings
2017-05-25 12:58 ` [PATCH 05/21] liblockdep: Fix 'unused value' warnings Levin, Alexander (Sasha Levin)
2017-06-05  9:03   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Ben Hutchings
2017-05-25 12:58 ` [PATCH 06/21] liblockdep: Fix 'set but not used' warnings Levin, Alexander (Sasha Levin)
2017-06-05  9:04   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Ben Hutchings
2017-05-25 12:58 ` [PATCH 07/21] liblockdep: Fix 'defined but not used' warning for init_utsname() Levin, Alexander (Sasha Levin)
2017-06-05  9:04   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Ben Hutchings
2017-05-25 12:58 ` [PATCH 08/21] liblockdep: Remove -lpthread compiler option Levin, Alexander (Sasha Levin)
2017-06-05  9:05   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Vishal Thanki
2017-05-25 12:58 ` [PATCH 09/21] MAINTAINERS: update email for Sasha Levin Levin, Alexander (Sasha Levin)
2017-06-05  9:05   ` [tip:locking/core] MAINTAINERS: Update " tip-bot for Levin, Alexander (Sasha Levin)
2017-05-25 12:58 ` [PATCH 10/21] tools: add install make target for liblockdep Levin, Alexander (Sasha Levin)
2017-06-05  9:06   ` [tip:locking/core] tools: Add " tip-bot for Alexander Sverdlin
2017-05-25 12:58 ` [PATCH 11/21] tools: liblockdep: Don't mix fd-based and stream IO Levin, Alexander (Sasha Levin)
2017-06-05  9:06   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Alexander Sverdlin
2017-05-25 12:58 ` Levin, Alexander (Sasha Levin) [this message]
2017-06-05  9:07   ` [tip:locking/core] tools/lib/lockdep: Fix compilation for 4.11 tip-bot for Levin, Alexander (Sasha Levin)
2017-05-25 12:58 ` [PATCH 13/21] tools: liblockdep: Fix object file paths used in an out-of-tree build Levin, Alexander (Sasha Levin)
2017-06-05  9:07   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Ben Hutchings
2017-05-25 12:58 ` [PATCH 14/21] tools: liblockdep: Remove double-quotes from soname Levin, Alexander (Sasha Levin)
2017-06-05  9:08   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Ben Hutchings
2017-05-25 12:58 ` [PATCH 15/21] tools: liblockdep: Use LDFLAGS Levin, Alexander (Sasha Levin)
2017-06-05  9:09   ` [tip:locking/core] tools/lib/lockdep: " tip-bot for Ben Hutchings
2017-05-25 12:58 ` [PATCH 16/21] tools include: add empty include/linux/sched/mm.h Levin, Alexander (Sasha Levin)
2017-06-05  9:09   ` [tip:locking/core] tools/include: Add (mostly) " tip-bot for Levin, Alexander (Sasha Levin)
2017-05-25 12:58 ` [PATCH 17/21] tools: liblockdep: include err.h Levin, Alexander (Sasha Levin)
2017-06-05  9:10   ` [tip:locking/core] tools/lib/lockdep: Include err.h tip-bot for Levin, Alexander (Sasha Levin)
2017-05-25 12:58 ` [PATCH 18/21] tools: liblockdep: add empty __is_[module,kernel]_percpu_address Levin, Alexander (Sasha Levin)
2017-06-05  9:10   ` [tip:locking/core] tools/lib/lockdep: Add " tip-bot for Levin, Alexander (Sasha Levin)
2017-05-25 12:58 ` [PATCH 19/21] tools include: add IS_ERR_OR_NULL to err.h Levin, Alexander (Sasha Levin)
2017-06-05  9:11   ` [tip:locking/core] tools/include: Add " tip-bot for Levin, Alexander (Sasha Levin)
2017-05-25 12:58 ` [PATCH 20/21] tools: liblockdep: add dummy current_gfp_context() Levin, Alexander (Sasha Levin)
2017-06-05  9:11   ` [tip:locking/core] tools/lib/lockdep: Add " tip-bot for Levin, Alexander (Sasha Levin)
2017-05-25 12:58 ` [PATCH 21/21] tools: liblockdep: hide liblockdep output from test results Levin, Alexander (Sasha Levin)
2017-06-05  9:12   ` [tip:locking/core] tools/lib/lockdep: Hide " tip-bot for Levin, Alexander (Sasha Levin)
2017-05-26  6:52 ` [PATCH 00/21] liblockdep fixes for v4.12 Ingo Molnar
2017-05-26 10:57   ` Levin, Alexander (Sasha Levin)
2017-05-26 11:21     ` Ingo Molnar
2017-05-26 11:41       ` Levin, Alexander (Sasha Levin)
2017-05-28  9:11         ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170525130005.5947-13-alexander.levin@verizon.com \
    --to=alexander.levin@verizon.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=ben@decadent.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.