From: Greg Kroah-Hartman Date: Sat, 25 Sep 2021 11:50:17 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v4.4.285~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fc488d8e70df34c7539566dcb40df282bb929e19;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: tools-lib-adopt-memchr_inv-from-kernel.patch --- diff --git a/queue-5.10/series b/queue-5.10/series index 89f8ed04cd2..c7e8e7fdb69 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -15,6 +15,7 @@ coredump-fix-memleak-in-dump_vma_snapshot.patch um-virtio_uml-fix-memory-leak-on-init-failures.patch dmaengine-acpi-avoid-comparison-gsi-with-linux-virq.patch perf-test-fix-bpf-test-sample-mismatch-reporting.patch +tools-lib-adopt-memchr_inv-from-kernel.patch perf-tools-allow-build-id-with-trailing-zeros.patch thermal-drivers-exynos-fix-an-error-code-in-exynos_tmu_probe.patch 9p-trans_virtio-remove-sysfs-file-on-probe-failure.patch diff --git a/queue-5.10/tools-lib-adopt-memchr_inv-from-kernel.patch b/queue-5.10/tools-lib-adopt-memchr_inv-from-kernel.patch new file mode 100644 index 00000000000..c33eabdf553 --- /dev/null +++ b/queue-5.10/tools-lib-adopt-memchr_inv-from-kernel.patch @@ -0,0 +1,104 @@ +From b3e453272d436aab8adbe810c6d7043670281487 Mon Sep 17 00:00:00 2001 +From: Jiri Olsa +Date: Thu, 26 Nov 2020 18:00:06 +0100 +Subject: tools lib: Adopt memchr_inv() from kernel + +From: Jiri Olsa + +commit b3e453272d436aab8adbe810c6d7043670281487 upstream. + +We'll use it to check for undefined/zero data. + +Signed-off-by: Jiri Olsa +Suggested-by: Arnaldo Carvalho de Melo +Acked-by: Namhyung Kim +Cc: Adrian Hunter +Cc: Alexander Shishkin +Cc: Alexey Budankov +Cc: Andi Kleen +Cc: Ian Rogers +Cc: Mark Rutland +Cc: Michael Petlan +Cc: Peter Zijlstra +Cc: Song Liu +Cc: Stephane Eranian +Link: http://lore.kernel.org/lkml/20201126170026.2619053-6-jolsa@kernel.org +Signed-off-by: Arnaldo Carvalho de Melo +Signed-off-by: Greg Kroah-Hartman +--- + tools/include/linux/string.h | 1 + tools/lib/string.c | 58 +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 59 insertions(+) + +--- a/tools/include/linux/string.h ++++ b/tools/include/linux/string.h +@@ -46,4 +46,5 @@ extern char * __must_check skip_spaces(c + + extern char *strim(char *); + ++extern void *memchr_inv(const void *start, int c, size_t bytes); + #endif /* _TOOLS_LINUX_STRING_H_ */ +--- a/tools/lib/string.c ++++ b/tools/lib/string.c +@@ -168,3 +168,61 @@ char *strreplace(char *s, char old, char + *s = new; + return s; + } ++ ++static void *check_bytes8(const u8 *start, u8 value, unsigned int bytes) ++{ ++ while (bytes) { ++ if (*start != value) ++ return (void *)start; ++ start++; ++ bytes--; ++ } ++ return NULL; ++} ++ ++/** ++ * memchr_inv - Find an unmatching character in an area of memory. ++ * @start: The memory area ++ * @c: Find a character other than c ++ * @bytes: The size of the area. ++ * ++ * returns the address of the first character other than @c, or %NULL ++ * if the whole buffer contains just @c. ++ */ ++void *memchr_inv(const void *start, int c, size_t bytes) ++{ ++ u8 value = c; ++ u64 value64; ++ unsigned int words, prefix; ++ ++ if (bytes <= 16) ++ return check_bytes8(start, value, bytes); ++ ++ value64 = value; ++ value64 |= value64 << 8; ++ value64 |= value64 << 16; ++ value64 |= value64 << 32; ++ ++ prefix = (unsigned long)start % 8; ++ if (prefix) { ++ u8 *r; ++ ++ prefix = 8 - prefix; ++ r = check_bytes8(start, value, prefix); ++ if (r) ++ return r; ++ start += prefix; ++ bytes -= prefix; ++ } ++ ++ words = bytes / 8; ++ ++ while (words) { ++ if (*(u64 *)start != value64) ++ return check_bytes8(start, value, 8); ++ start += 8; ++ words--; ++ } ++ ++ return check_bytes8(start, value, bytes % 8); ++}