-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'perf-core-for-mingo-20160718' of git://git.kernel.org/pub/…
…scm/linux/kernel/git/acme/linux into perf/core Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo: User visible changes: - Properly report when a function wildcard produces no matches in 'perf probe' (Masami Hiramatsu) - Balance opening and reading events in 'perf stat', which could cause it to get stuck trying to close invalid file descriptors (Mark Rutland) Infrastructure changes: - Copy more headers from the kernel, this time for headers that were just including the contents of its kernel counterparts, should help resolving the problems with linux-next, where some uapi related patches seem to be breaking tools/object/ build. (Arnaldo Carvalho de Melo) Some more combing will be done, but at least it is possible to build perf out of tree, via a detached tarball (make help | grep perf), without including kernel files in its MANIFEST (Arnaldo Carvalho de Melo) - Fix smatch found errors that were not causing problems, but are mistakes nonetheless (Dan Carpenter) - Fix string vs. byte array resolving in the python script code (Jiri Olsa) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
- Loading branch information
Showing
26 changed files
with
512 additions
and
57 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,43 @@ | ||
#include "../../../../include/asm-generic/bitops/__fls.h" | ||
#ifndef _ASM_GENERIC_BITOPS___FLS_H_ | ||
#define _ASM_GENERIC_BITOPS___FLS_H_ | ||
|
||
#include <asm/types.h> | ||
|
||
/** | ||
* __fls - find last (most-significant) set bit in a long word | ||
* @word: the word to search | ||
* | ||
* Undefined if no set bit exists, so code should check against 0 first. | ||
*/ | ||
static __always_inline unsigned long __fls(unsigned long word) | ||
{ | ||
int num = BITS_PER_LONG - 1; | ||
|
||
#if BITS_PER_LONG == 64 | ||
if (!(word & (~0ul << 32))) { | ||
num -= 32; | ||
word <<= 32; | ||
} | ||
#endif | ||
if (!(word & (~0ul << (BITS_PER_LONG-16)))) { | ||
num -= 16; | ||
word <<= 16; | ||
} | ||
if (!(word & (~0ul << (BITS_PER_LONG-8)))) { | ||
num -= 8; | ||
word <<= 8; | ||
} | ||
if (!(word & (~0ul << (BITS_PER_LONG-4)))) { | ||
num -= 4; | ||
word <<= 4; | ||
} | ||
if (!(word & (~0ul << (BITS_PER_LONG-2)))) { | ||
num -= 2; | ||
word <<= 2; | ||
} | ||
if (!(word & (~0ul << (BITS_PER_LONG-1)))) | ||
num -= 1; | ||
return num; | ||
} | ||
|
||
#endif /* _ASM_GENERIC_BITOPS___FLS_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,25 @@ | ||
#include "../../../../include/asm-generic/bitops/arch_hweight.h" | ||
#ifndef _ASM_GENERIC_BITOPS_ARCH_HWEIGHT_H_ | ||
#define _ASM_GENERIC_BITOPS_ARCH_HWEIGHT_H_ | ||
|
||
#include <asm/types.h> | ||
|
||
static inline unsigned int __arch_hweight32(unsigned int w) | ||
{ | ||
return __sw_hweight32(w); | ||
} | ||
|
||
static inline unsigned int __arch_hweight16(unsigned int w) | ||
{ | ||
return __sw_hweight16(w); | ||
} | ||
|
||
static inline unsigned int __arch_hweight8(unsigned int w) | ||
{ | ||
return __sw_hweight8(w); | ||
} | ||
|
||
static inline unsigned long __arch_hweight64(__u64 w) | ||
{ | ||
return __sw_hweight64(w); | ||
} | ||
#endif /* _ASM_GENERIC_BITOPS_HWEIGHT_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,43 @@ | ||
#include "../../../../include/asm-generic/bitops/const_hweight.h" | ||
#ifndef _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ | ||
#define _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ | ||
|
||
/* | ||
* Compile time versions of __arch_hweightN() | ||
*/ | ||
#define __const_hweight8(w) \ | ||
((unsigned int) \ | ||
((!!((w) & (1ULL << 0))) + \ | ||
(!!((w) & (1ULL << 1))) + \ | ||
(!!((w) & (1ULL << 2))) + \ | ||
(!!((w) & (1ULL << 3))) + \ | ||
(!!((w) & (1ULL << 4))) + \ | ||
(!!((w) & (1ULL << 5))) + \ | ||
(!!((w) & (1ULL << 6))) + \ | ||
(!!((w) & (1ULL << 7))))) | ||
|
||
#define __const_hweight16(w) (__const_hweight8(w) + __const_hweight8((w) >> 8 )) | ||
#define __const_hweight32(w) (__const_hweight16(w) + __const_hweight16((w) >> 16)) | ||
#define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32)) | ||
|
||
/* | ||
* Generic interface. | ||
*/ | ||
#define hweight8(w) (__builtin_constant_p(w) ? __const_hweight8(w) : __arch_hweight8(w)) | ||
#define hweight16(w) (__builtin_constant_p(w) ? __const_hweight16(w) : __arch_hweight16(w)) | ||
#define hweight32(w) (__builtin_constant_p(w) ? __const_hweight32(w) : __arch_hweight32(w)) | ||
#define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w)) | ||
|
||
/* | ||
* Interface for known constant arguments | ||
*/ | ||
#define HWEIGHT8(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight8(w)) | ||
#define HWEIGHT16(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight16(w)) | ||
#define HWEIGHT32(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight32(w)) | ||
#define HWEIGHT64(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight64(w)) | ||
|
||
/* | ||
* Type invariant interface to the compile time constant hweight functions. | ||
*/ | ||
#define HWEIGHT(w) HWEIGHT64((u64)w) | ||
|
||
#endif /* _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,41 @@ | ||
#include "../../../../include/asm-generic/bitops/fls.h" | ||
#ifndef _ASM_GENERIC_BITOPS_FLS_H_ | ||
#define _ASM_GENERIC_BITOPS_FLS_H_ | ||
|
||
/** | ||
* fls - find last (most-significant) bit set | ||
* @x: the word to search | ||
* | ||
* This is defined the same way as ffs. | ||
* Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. | ||
*/ | ||
|
||
static __always_inline int fls(int x) | ||
{ | ||
int r = 32; | ||
|
||
if (!x) | ||
return 0; | ||
if (!(x & 0xffff0000u)) { | ||
x <<= 16; | ||
r -= 16; | ||
} | ||
if (!(x & 0xff000000u)) { | ||
x <<= 8; | ||
r -= 8; | ||
} | ||
if (!(x & 0xf0000000u)) { | ||
x <<= 4; | ||
r -= 4; | ||
} | ||
if (!(x & 0xc0000000u)) { | ||
x <<= 2; | ||
r -= 2; | ||
} | ||
if (!(x & 0x80000000u)) { | ||
x <<= 1; | ||
r -= 1; | ||
} | ||
return r; | ||
} | ||
|
||
#endif /* _ASM_GENERIC_BITOPS_FLS_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,36 @@ | ||
#include "../../../../include/asm-generic/bitops/fls64.h" | ||
#ifndef _ASM_GENERIC_BITOPS_FLS64_H_ | ||
#define _ASM_GENERIC_BITOPS_FLS64_H_ | ||
|
||
#include <asm/types.h> | ||
|
||
/** | ||
* fls64 - find last set bit in a 64-bit word | ||
* @x: the word to search | ||
* | ||
* This is defined in a similar way as the libc and compiler builtin | ||
* ffsll, but returns the position of the most significant set bit. | ||
* | ||
* fls64(value) returns 0 if value is 0 or the position of the last | ||
* set bit if value is nonzero. The last (most significant) bit is | ||
* at position 64. | ||
*/ | ||
#if BITS_PER_LONG == 32 | ||
static __always_inline int fls64(__u64 x) | ||
{ | ||
__u32 h = x >> 32; | ||
if (h) | ||
return fls(h) + 32; | ||
return fls(x); | ||
} | ||
#elif BITS_PER_LONG == 64 | ||
static __always_inline int fls64(__u64 x) | ||
{ | ||
if (x == 0) | ||
return 0; | ||
return __fls(x) + 1; | ||
} | ||
#else | ||
#error BITS_PER_LONG not 32 or 64 | ||
#endif | ||
|
||
#endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,104 @@ | ||
#include "../../../include/linux/hash.h" | ||
#ifndef _LINUX_HASH_H | ||
#define _LINUX_HASH_H | ||
/* Fast hashing routine for ints, longs and pointers. | ||
(C) 2002 Nadia Yvette Chambers, IBM */ | ||
|
||
#ifndef _TOOLS_LINUX_HASH_H | ||
#define _TOOLS_LINUX_HASH_H | ||
#include <asm/types.h> | ||
#include <linux/compiler.h> | ||
|
||
/* | ||
* The "GOLDEN_RATIO_PRIME" is used in ifs/btrfs/brtfs_inode.h and | ||
* fs/inode.c. It's not actually prime any more (the previous primes | ||
* were actively bad for hashing), but the name remains. | ||
*/ | ||
#if BITS_PER_LONG == 32 | ||
#define GOLDEN_RATIO_PRIME GOLDEN_RATIO_32 | ||
#define hash_long(val, bits) hash_32(val, bits) | ||
#elif BITS_PER_LONG == 64 | ||
#define hash_long(val, bits) hash_64(val, bits) | ||
#define GOLDEN_RATIO_PRIME GOLDEN_RATIO_64 | ||
#else | ||
#error Wordsize not 32 or 64 | ||
#endif | ||
|
||
/* | ||
* This hash multiplies the input by a large odd number and takes the | ||
* high bits. Since multiplication propagates changes to the most | ||
* significant end only, it is essential that the high bits of the | ||
* product be used for the hash value. | ||
* | ||
* Chuck Lever verified the effectiveness of this technique: | ||
* http://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf | ||
* | ||
* Although a random odd number will do, it turns out that the golden | ||
* ratio phi = (sqrt(5)-1)/2, or its negative, has particularly nice | ||
* properties. (See Knuth vol 3, section 6.4, exercise 9.) | ||
* | ||
* These are the negative, (1 - phi) = phi**2 = (3 - sqrt(5))/2, | ||
* which is very slightly easier to multiply by and makes no | ||
* difference to the hash distribution. | ||
*/ | ||
#define GOLDEN_RATIO_32 0x61C88647 | ||
#define GOLDEN_RATIO_64 0x61C8864680B583EBull | ||
|
||
#ifdef CONFIG_HAVE_ARCH_HASH | ||
/* This header may use the GOLDEN_RATIO_xx constants */ | ||
#include <asm/hash.h> | ||
#endif | ||
|
||
/* | ||
* The _generic versions exist only so lib/test_hash.c can compare | ||
* the arch-optimized versions with the generic. | ||
* | ||
* Note that if you change these, any <asm/hash.h> that aren't updated | ||
* to match need to have their HAVE_ARCH_* define values updated so the | ||
* self-test will not false-positive. | ||
*/ | ||
#ifndef HAVE_ARCH__HASH_32 | ||
#define __hash_32 __hash_32_generic | ||
#endif | ||
static inline u32 __hash_32_generic(u32 val) | ||
{ | ||
return val * GOLDEN_RATIO_32; | ||
} | ||
|
||
#ifndef HAVE_ARCH_HASH_32 | ||
#define hash_32 hash_32_generic | ||
#endif | ||
static inline u32 hash_32_generic(u32 val, unsigned int bits) | ||
{ | ||
/* High bits are more random, so use them. */ | ||
return __hash_32(val) >> (32 - bits); | ||
} | ||
|
||
#ifndef HAVE_ARCH_HASH_64 | ||
#define hash_64 hash_64_generic | ||
#endif | ||
static __always_inline u32 hash_64_generic(u64 val, unsigned int bits) | ||
{ | ||
#if BITS_PER_LONG == 64 | ||
/* 64x64-bit multiply is efficient on all 64-bit processors */ | ||
return val * GOLDEN_RATIO_64 >> (64 - bits); | ||
#else | ||
/* Hash 64 bits using only 32x32-bit multiply. */ | ||
return hash_32((u32)val ^ __hash_32(val >> 32), bits); | ||
#endif | ||
} | ||
|
||
static inline u32 hash_ptr(const void *ptr, unsigned int bits) | ||
{ | ||
return hash_long((unsigned long)ptr, bits); | ||
} | ||
|
||
/* This really should be called fold32_ptr; it does no hashing to speak of. */ | ||
static inline u32 hash32_ptr(const void *ptr) | ||
{ | ||
unsigned long val = (unsigned long)ptr; | ||
|
||
#if BITS_PER_LONG == 64 | ||
val ^= (val >> 32); | ||
#endif | ||
return (u32)val; | ||
} | ||
|
||
#endif /* _LINUX_HASH_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,90 @@ | ||
#include "../../../include/linux/poison.h" | ||
#ifndef _LINUX_POISON_H | ||
#define _LINUX_POISON_H | ||
|
||
/********** include/linux/list.h **********/ | ||
|
||
/* | ||
* Architectures might want to move the poison pointer offset | ||
* into some well-recognized area such as 0xdead000000000000, | ||
* that is also not mappable by user-space exploits: | ||
*/ | ||
#ifdef CONFIG_ILLEGAL_POINTER_VALUE | ||
# define POISON_POINTER_DELTA _AC(CONFIG_ILLEGAL_POINTER_VALUE, UL) | ||
#else | ||
# define POISON_POINTER_DELTA 0 | ||
#endif | ||
|
||
/* | ||
* These are non-NULL pointers that will result in page faults | ||
* under normal circumstances, used to verify that nobody uses | ||
* non-initialized list entries. | ||
*/ | ||
#define LIST_POISON1 ((void *) 0x100 + POISON_POINTER_DELTA) | ||
#define LIST_POISON2 ((void *) 0x200 + POISON_POINTER_DELTA) | ||
|
||
/********** include/linux/timer.h **********/ | ||
/* | ||
* Magic number "tsta" to indicate a static timer initializer | ||
* for the object debugging code. | ||
*/ | ||
#define TIMER_ENTRY_STATIC ((void *) 0x300 + POISON_POINTER_DELTA) | ||
|
||
/********** mm/debug-pagealloc.c **********/ | ||
#ifdef CONFIG_PAGE_POISONING_ZERO | ||
#define PAGE_POISON 0x00 | ||
#else | ||
#define PAGE_POISON 0xaa | ||
#endif | ||
|
||
/********** mm/page_alloc.c ************/ | ||
|
||
#define TAIL_MAPPING ((void *) 0x400 + POISON_POINTER_DELTA) | ||
|
||
/********** mm/slab.c **********/ | ||
/* | ||
* Magic nums for obj red zoning. | ||
* Placed in the first word before and the first word after an obj. | ||
*/ | ||
#define RED_INACTIVE 0x09F911029D74E35BULL /* when obj is inactive */ | ||
#define RED_ACTIVE 0xD84156C5635688C0ULL /* when obj is active */ | ||
|
||
#define SLUB_RED_INACTIVE 0xbb | ||
#define SLUB_RED_ACTIVE 0xcc | ||
|
||
/* ...and for poisoning */ | ||
#define POISON_INUSE 0x5a /* for use-uninitialised poisoning */ | ||
#define POISON_FREE 0x6b /* for use-after-free poisoning */ | ||
#define POISON_END 0xa5 /* end-byte of poisoning */ | ||
|
||
/********** arch/$ARCH/mm/init.c **********/ | ||
#define POISON_FREE_INITMEM 0xcc | ||
|
||
/********** arch/ia64/hp/common/sba_iommu.c **********/ | ||
/* | ||
* arch/ia64/hp/common/sba_iommu.c uses a 16-byte poison string with a | ||
* value of "SBAIOMMU POISON\0" for spill-over poisoning. | ||
*/ | ||
|
||
/********** fs/jbd/journal.c **********/ | ||
#define JBD_POISON_FREE 0x5b | ||
#define JBD2_POISON_FREE 0x5c | ||
|
||
/********** drivers/base/dmapool.c **********/ | ||
#define POOL_POISON_FREED 0xa7 /* !inuse */ | ||
#define POOL_POISON_ALLOCATED 0xa9 /* !initted */ | ||
|
||
/********** drivers/atm/ **********/ | ||
#define ATM_POISON_FREE 0x12 | ||
#define ATM_POISON 0xdeadbeef | ||
|
||
/********** kernel/mutexes **********/ | ||
#define MUTEX_DEBUG_INIT 0x11 | ||
#define MUTEX_DEBUG_FREE 0x22 | ||
|
||
/********** lib/flex_array.c **********/ | ||
#define FLEX_ARRAY_FREE 0x6c /* for use-after-free poisoning */ | ||
|
||
/********** security/ **********/ | ||
#define KEY_DESTROY 0xbd | ||
|
||
#endif |
Oops, something went wrong.