diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-02-07 01:15:42 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-02-07 01:15:42 -0500 |
commit | a2e5790d841658485d642196dbb0927303d6c22f (patch) | |
tree | b3d28c9bcb7da6880806146fd22a88a7ee7f733e /tools/lib | |
parent | ab2d92ad881da11331280aedf612d82e61cb6d41 (diff) | |
parent | 60c3e026d73ccabb075fb70ba02f8512ab40cf2c (diff) |
Merge branch 'akpm' (patches from Andrew)
Merge misc updates from Andrew Morton:
- kasan updates
- procfs
- lib/bitmap updates
- other lib/ updates
- checkpatch tweaks
- rapidio
- ubsan
- pipe fixes and cleanups
- lots of other misc bits
* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (114 commits)
Documentation/sysctl/user.txt: fix typo
MAINTAINERS: update ARM/QUALCOMM SUPPORT patterns
MAINTAINERS: update various PALM patterns
MAINTAINERS: update "ARM/OXNAS platform support" patterns
MAINTAINERS: update Cortina/Gemini patterns
MAINTAINERS: remove ARM/CLKDEV SUPPORT file pattern
MAINTAINERS: remove ANDROID ION pattern
mm: docs: add blank lines to silence sphinx "Unexpected indentation" errors
mm: docs: fix parameter names mismatch
mm: docs: fixup punctuation
pipe: read buffer limits atomically
pipe: simplify round_pipe_size()
pipe: reject F_SETPIPE_SZ with size over UINT_MAX
pipe: fix off-by-one error when checking buffer limits
pipe: actually allow root to exceed the pipe buffer limits
pipe, sysctl: remove pipe_proc_fn()
pipe, sysctl: drop 'min' parameter from pipe-max-size converter
kasan: rework Kconfig settings
crash_dump: is_kdump_kernel can be boolean
kernel/mutex: mutex_is_locked can be boolean
...
Diffstat (limited to 'tools/lib')
-rw-r--r-- | tools/lib/find_bit.c | 39 | ||||
-rw-r--r-- | tools/lib/subcmd/pager.c | 5 |
2 files changed, 33 insertions, 11 deletions
diff --git a/tools/lib/find_bit.c b/tools/lib/find_bit.c index 42c15f906aac..a88bd507091e 100644 --- a/tools/lib/find_bit.c +++ b/tools/lib/find_bit.c | |||
@@ -22,22 +22,29 @@ | |||
22 | #include <linux/bitmap.h> | 22 | #include <linux/bitmap.h> |
23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
24 | 24 | ||
25 | #if !defined(find_next_bit) | 25 | #if !defined(find_next_bit) || !defined(find_next_zero_bit) || \ |
26 | !defined(find_next_and_bit) | ||
26 | 27 | ||
27 | /* | 28 | /* |
28 | * This is a common helper function for find_next_bit and | 29 | * This is a common helper function for find_next_bit, find_next_zero_bit, and |
29 | * find_next_zero_bit. The difference is the "invert" argument, which | 30 | * find_next_and_bit. The differences are: |
30 | * is XORed with each fetched word before searching it for one bits. | 31 | * - The "invert" argument, which is XORed with each fetched word before |
32 | * searching it for one bits. | ||
33 | * - The optional "addr2", which is anded with "addr1" if present. | ||
31 | */ | 34 | */ |
32 | static unsigned long _find_next_bit(const unsigned long *addr, | 35 | static inline unsigned long _find_next_bit(const unsigned long *addr1, |
33 | unsigned long nbits, unsigned long start, unsigned long invert) | 36 | const unsigned long *addr2, unsigned long nbits, |
37 | unsigned long start, unsigned long invert) | ||
34 | { | 38 | { |
35 | unsigned long tmp; | 39 | unsigned long tmp; |
36 | 40 | ||
37 | if (unlikely(start >= nbits)) | 41 | if (unlikely(start >= nbits)) |
38 | return nbits; | 42 | return nbits; |
39 | 43 | ||
40 | tmp = addr[start / BITS_PER_LONG] ^ invert; | 44 | tmp = addr1[start / BITS_PER_LONG]; |
45 | if (addr2) | ||
46 | tmp &= addr2[start / BITS_PER_LONG]; | ||
47 | tmp ^= invert; | ||
41 | 48 | ||
42 | /* Handle 1st word. */ | 49 | /* Handle 1st word. */ |
43 | tmp &= BITMAP_FIRST_WORD_MASK(start); | 50 | tmp &= BITMAP_FIRST_WORD_MASK(start); |
@@ -48,7 +55,10 @@ static unsigned long _find_next_bit(const unsigned long *addr, | |||
48 | if (start >= nbits) | 55 | if (start >= nbits) |
49 | return nbits; | 56 | return nbits; |
50 | 57 | ||
51 | tmp = addr[start / BITS_PER_LONG] ^ invert; | 58 | tmp = addr1[start / BITS_PER_LONG]; |
59 | if (addr2) | ||
60 | tmp &= addr2[start / BITS_PER_LONG]; | ||
61 | tmp ^= invert; | ||
52 | } | 62 | } |
53 | 63 | ||
54 | return min(start + __ffs(tmp), nbits); | 64 | return min(start + __ffs(tmp), nbits); |
@@ -62,7 +72,7 @@ static unsigned long _find_next_bit(const unsigned long *addr, | |||
62 | unsigned long find_next_bit(const unsigned long *addr, unsigned long size, | 72 | unsigned long find_next_bit(const unsigned long *addr, unsigned long size, |
63 | unsigned long offset) | 73 | unsigned long offset) |
64 | { | 74 | { |
65 | return _find_next_bit(addr, size, offset, 0UL); | 75 | return _find_next_bit(addr, NULL, size, offset, 0UL); |
66 | } | 76 | } |
67 | #endif | 77 | #endif |
68 | 78 | ||
@@ -104,6 +114,15 @@ unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size) | |||
104 | unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, | 114 | unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, |
105 | unsigned long offset) | 115 | unsigned long offset) |
106 | { | 116 | { |
107 | return _find_next_bit(addr, size, offset, ~0UL); | 117 | return _find_next_bit(addr, NULL, size, offset, ~0UL); |
118 | } | ||
119 | #endif | ||
120 | |||
121 | #ifndef find_next_and_bit | ||
122 | unsigned long find_next_and_bit(const unsigned long *addr1, | ||
123 | const unsigned long *addr2, unsigned long size, | ||
124 | unsigned long offset) | ||
125 | { | ||
126 | return _find_next_bit(addr1, addr2, size, offset, 0UL); | ||
108 | } | 127 | } |
109 | #endif | 128 | #endif |
diff --git a/tools/lib/subcmd/pager.c b/tools/lib/subcmd/pager.c index 5ba754d17952..9997a8805a82 100644 --- a/tools/lib/subcmd/pager.c +++ b/tools/lib/subcmd/pager.c | |||
@@ -30,10 +30,13 @@ static void pager_preexec(void) | |||
30 | * have real input | 30 | * have real input |
31 | */ | 31 | */ |
32 | fd_set in; | 32 | fd_set in; |
33 | fd_set exception; | ||
33 | 34 | ||
34 | FD_ZERO(&in); | 35 | FD_ZERO(&in); |
36 | FD_ZERO(&exception); | ||
35 | FD_SET(0, &in); | 37 | FD_SET(0, &in); |
36 | select(1, &in, NULL, &in, NULL); | 38 | FD_SET(0, &exception); |
39 | select(1, &in, NULL, &exception, NULL); | ||
37 | 40 | ||
38 | setenv("LESS", "FRSX", 0); | 41 | setenv("LESS", "FRSX", 0); |
39 | } | 42 | } |