From: Sasha Levin Date: Thu, 11 Apr 2019 15:28:36 +0000 (-0400) Subject: patches for 5.0 X-Git-Tag: v4.9.169~48 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=535453774a8db40d20f2b5b41898b0b069b3ee06;p=thirdparty%2Fkernel%2Fstable-queue.git patches for 5.0 Signed-off-by: Sasha Levin --- diff --git a/queue-5.0/kbuild-clang-choose-gcc_toolchain_dir-not-on-ld.patch b/queue-5.0/kbuild-clang-choose-gcc_toolchain_dir-not-on-ld.patch new file mode 100644 index 00000000000..83bae09bf5f --- /dev/null +++ b/queue-5.0/kbuild-clang-choose-gcc_toolchain_dir-not-on-ld.patch @@ -0,0 +1,45 @@ +From ecae2c3a3b4856074259a78d27c5fc13fdfa21b0 Mon Sep 17 00:00:00 2001 +From: Nick Desaulniers +Date: Mon, 11 Feb 2019 11:30:04 -0800 +Subject: kbuild: clang: choose GCC_TOOLCHAIN_DIR not on LD + +[ Upstream commit ad15006cc78459d059af56729c4d9bed7c7fd860 ] + +This causes an issue when trying to build with `make LD=ld.lld` if +ld.lld and the rest of your cross tools aren't in the same directory +(ex. /usr/local/bin) (as is the case for Android's build system), as the +GCC_TOOLCHAIN_DIR then gets set based on `which $(LD)` which will point +where LLVM tools are, not GCC/binutils tools are located. + +Instead, select the GCC_TOOLCHAIN_DIR based on another tool provided by +binutils for which LLVM does not provide a substitute for, such as +elfedit. + +Fixes: 785f11aa595b ("kbuild: Add better clang cross build support") +Link: https://github.com/ClangBuiltLinux/linux/issues/341 +Suggested-by: Nathan Chancellor +Reviewed-by: Nathan Chancellor +Tested-by: Nathan Chancellor +Signed-off-by: Nick Desaulniers +Signed-off-by: Masahiro Yamada +Signed-off-by: Sasha Levin +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index af99c77c7066..be885715f83f 100644 +--- a/Makefile ++++ b/Makefile +@@ -510,7 +510,7 @@ endif + ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) + ifneq ($(CROSS_COMPILE),) + CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE:%-=%)) +-GCC_TOOLCHAIN_DIR := $(dir $(shell which $(LD))) ++GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit)) + CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR) + GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..) + endif +-- +2.19.1 + diff --git a/queue-5.0/lib-string.c-implement-a-basic-bcmp.patch b/queue-5.0/lib-string.c-implement-a-basic-bcmp.patch new file mode 100644 index 00000000000..edcc521adbc --- /dev/null +++ b/queue-5.0/lib-string.c-implement-a-basic-bcmp.patch @@ -0,0 +1,111 @@ +From c5a0d4dcc5553fedc22c81449f687950cd301197 Mon Sep 17 00:00:00 2001 +From: Nick Desaulniers +Date: Fri, 5 Apr 2019 18:38:45 -0700 +Subject: lib/string.c: implement a basic bcmp + +[ Upstream commit 5f074f3e192f10c9fade898b9b3b8812e3d83342 ] + +A recent optimization in Clang (r355672) lowers comparisons of the +return value of memcmp against zero to comparisons of the return value +of bcmp against zero. This helps some platforms that implement bcmp +more efficiently than memcmp. glibc simply aliases bcmp to memcmp, but +an optimized implementation is in the works. + +This results in linkage failures for all targets with Clang due to the +undefined symbol. For now, just implement bcmp as a tailcail to memcmp +to unbreak the build. This routine can be further optimized in the +future. + +Other ideas discussed: + + * A weak alias was discussed, but breaks for architectures that define + their own implementations of memcmp since aliases to declarations are + not permitted (only definitions). Arch-specific memcmp + implementations typically declare memcmp in C headers, but implement + them in assembly. + + * -ffreestanding also is used sporadically throughout the kernel. + + * -fno-builtin-bcmp doesn't work when doing LTO. + +Link: https://bugs.llvm.org/show_bug.cgi?id=41035 +Link: https://code.woboq.org/userspace/glibc/string/memcmp.c.html#bcmp +Link: https://github.com/llvm/llvm-project/commit/8e16d73346f8091461319a7dfc4ddd18eedcff13 +Link: https://github.com/ClangBuiltLinux/linux/issues/416 +Link: http://lkml.kernel.org/r/20190313211335.165605-1-ndesaulniers@google.com +Signed-off-by: Nick Desaulniers +Reported-by: Nathan Chancellor +Reported-by: Adhemerval Zanella +Suggested-by: Arnd Bergmann +Suggested-by: James Y Knight +Suggested-by: Masahiro Yamada +Suggested-by: Nathan Chancellor +Suggested-by: Rasmus Villemoes +Acked-by: Steven Rostedt (VMware) +Reviewed-by: Nathan Chancellor +Tested-by: Nathan Chancellor +Reviewed-by: Masahiro Yamada +Reviewed-by: Andy Shevchenko +Cc: David Laight +Cc: Rasmus Villemoes +Cc: Namhyung Kim +Cc: Greg Kroah-Hartman +Cc: Alexander Shishkin +Cc: Dan Williams +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + include/linux/string.h | 3 +++ + lib/string.c | 20 ++++++++++++++++++++ + 2 files changed, 23 insertions(+) + +diff --git a/include/linux/string.h b/include/linux/string.h +index 7927b875f80c..6ab0a6fa512e 100644 +--- a/include/linux/string.h ++++ b/include/linux/string.h +@@ -150,6 +150,9 @@ extern void * memscan(void *,int,__kernel_size_t); + #ifndef __HAVE_ARCH_MEMCMP + extern int memcmp(const void *,const void *,__kernel_size_t); + #endif ++#ifndef __HAVE_ARCH_BCMP ++extern int bcmp(const void *,const void *,__kernel_size_t); ++#endif + #ifndef __HAVE_ARCH_MEMCHR + extern void * memchr(const void *,int,__kernel_size_t); + #endif +diff --git a/lib/string.c b/lib/string.c +index 38e4ca08e757..3ab861c1a857 100644 +--- a/lib/string.c ++++ b/lib/string.c +@@ -866,6 +866,26 @@ __visible int memcmp(const void *cs, const void *ct, size_t count) + EXPORT_SYMBOL(memcmp); + #endif + ++#ifndef __HAVE_ARCH_BCMP ++/** ++ * bcmp - returns 0 if and only if the buffers have identical contents. ++ * @a: pointer to first buffer. ++ * @b: pointer to second buffer. ++ * @len: size of buffers. ++ * ++ * The sign or magnitude of a non-zero return value has no particular ++ * meaning, and architectures may implement their own more efficient bcmp(). So ++ * while this particular implementation is a simple (tail) call to memcmp, do ++ * not rely on anything but whether the return value is zero or non-zero. ++ */ ++#undef bcmp ++int bcmp(const void *a, const void *b, size_t len) ++{ ++ return memcmp(a, b, len); ++} ++EXPORT_SYMBOL(bcmp); ++#endif ++ + #ifndef __HAVE_ARCH_MEMSCAN + /** + * memscan - Find a character in an area of memory. +-- +2.19.1 + diff --git a/queue-5.0/revert-clk-meson-clean-up-clock-registration.patch b/queue-5.0/revert-clk-meson-clean-up-clock-registration.patch new file mode 100644 index 00000000000..9607ef2ccd4 --- /dev/null +++ b/queue-5.0/revert-clk-meson-clean-up-clock-registration.patch @@ -0,0 +1,53 @@ +From 64c0aa2ee0e25f49da0ff7aaf04595de61f23306 Mon Sep 17 00:00:00 2001 +From: Neil Armstrong +Date: Thu, 11 Apr 2019 12:11:32 +0200 +Subject: Revert "clk: meson: clean-up clock registration" + +This reverts commit 9b0f430450cf230e736bc40f95bf34fbdb99cead. + +This patch was not initially a fix and is dependent on other +changes which are not fixes eithers. + +With this change, multiple Amlogic based boards fails to boot, +as reported by kernelci. + +Cc: stable@vger.kernel.org # 5.0.7 +Signed-off-by: Neil Armstrong +Signed-off-by: Sasha Levin +--- + drivers/clk/meson/meson-aoclk.c | 15 +++++---------- + 1 file changed, 5 insertions(+), 10 deletions(-) + +diff --git a/drivers/clk/meson/meson-aoclk.c b/drivers/clk/meson/meson-aoclk.c +index 258c8d259ea1..f965845917e3 100644 +--- a/drivers/clk/meson/meson-aoclk.c ++++ b/drivers/clk/meson/meson-aoclk.c +@@ -65,20 +65,15 @@ int meson_aoclkc_probe(struct platform_device *pdev) + return ret; + } + +- /* Populate regmap */ +- for (clkid = 0; clkid < data->num_clks; clkid++) ++ /* ++ * Populate regmap and register all clks ++ */ ++ for (clkid = 0; clkid < data->num_clks; clkid++) { + data->clks[clkid]->map = regmap; + +- /* Register all clks */ +- for (clkid = 0; clkid < data->hw_data->num; clkid++) { +- if (!data->hw_data->hws[clkid]) +- continue; +- + ret = devm_clk_hw_register(dev, data->hw_data->hws[clkid]); +- if (ret) { +- dev_err(dev, "Clock registration failed\n"); ++ if (ret) + return ret; +- } + } + + return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, +-- +2.19.1 + diff --git a/queue-5.0/series b/queue-5.0/series index 053cbd4dac3..152aad873d0 100644 --- a/queue-5.0/series +++ b/queue-5.0/series @@ -39,3 +39,6 @@ r8169-disable-default-rx-interrupt-coalescing-on-rtl.patch net-mlx5-add-a-missing-check-on-idr_find-free-buf.patch net-mlx5e-update-xoff-formula.patch net-mlx5e-update-xon-formula.patch +kbuild-clang-choose-gcc_toolchain_dir-not-on-ld.patch +lib-string.c-implement-a-basic-bcmp.patch +revert-clk-meson-clean-up-clock-registration.patch