From 7c2f69f3d457a50c78177fa8b439db364f0b8e46 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 15 Apr 2021 16:04:20 +0200 Subject: [PATCH] 5.4-stable patches added patches: driver-core-fix-locking-bug-in-deferred_probe_timeout_work_func.patch perf-map-tighten-snprintf-string-precision-to-pass-gcc-check-on-some-32-bit-arches.patch perf-tools-use-define-api.pure-full-instead-of-pure-parser.patch perf-tools-use-zd-for-size_t-printf-formats-on-32-bit.patch xen-events-fix-setting-irq-affinity.patch --- ...-in-deferred_probe_timeout_work_func.patch | 46 +++++++++++++ ...pass-gcc-check-on-some-32-bit-arches.patch | 64 +++++++++++++++++++ ...api.pure-full-instead-of-pure-parser.patch | 51 +++++++++++++++ ...-for-size_t-printf-formats-on-32-bit.patch | 49 ++++++++++++++ queue-5.4/series | 5 ++ .../xen-events-fix-setting-irq-affinity.patch | 50 +++++++++++++++ 6 files changed, 265 insertions(+) create mode 100644 queue-5.4/driver-core-fix-locking-bug-in-deferred_probe_timeout_work_func.patch create mode 100644 queue-5.4/perf-map-tighten-snprintf-string-precision-to-pass-gcc-check-on-some-32-bit-arches.patch create mode 100644 queue-5.4/perf-tools-use-define-api.pure-full-instead-of-pure-parser.patch create mode 100644 queue-5.4/perf-tools-use-zd-for-size_t-printf-formats-on-32-bit.patch create mode 100644 queue-5.4/xen-events-fix-setting-irq-affinity.patch diff --git a/queue-5.4/driver-core-fix-locking-bug-in-deferred_probe_timeout_work_func.patch b/queue-5.4/driver-core-fix-locking-bug-in-deferred_probe_timeout_work_func.patch new file mode 100644 index 00000000000..2db0012275e --- /dev/null +++ b/queue-5.4/driver-core-fix-locking-bug-in-deferred_probe_timeout_work_func.patch @@ -0,0 +1,46 @@ +From eed6e41813deb9ee622cd9242341f21430d7789f Mon Sep 17 00:00:00 2001 +From: Saravana Kannan +Date: Thu, 1 Apr 2021 21:03:40 -0700 +Subject: driver core: Fix locking bug in deferred_probe_timeout_work_func() + +From: Saravana Kannan + +commit eed6e41813deb9ee622cd9242341f21430d7789f upstream. + +list_for_each_entry_safe() is only useful if we are deleting nodes in a +linked list within the loop. It doesn't protect against other threads +adding/deleting nodes to the list in parallel. We need to grab +deferred_probe_mutex when traversing the deferred_probe_pending_list. + +Cc: stable@vger.kernel.org +Fixes: 25b4e70dcce9 ("driver core: allow stopping deferred probe after init") +Signed-off-by: Saravana Kannan +Link: https://lore.kernel.org/r/20210402040342.2944858-2-saravanak@google.com +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/base/dd.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +--- a/drivers/base/dd.c ++++ b/drivers/base/dd.c +@@ -300,14 +300,16 @@ int driver_deferred_probe_check_state_co + + static void deferred_probe_timeout_work_func(struct work_struct *work) + { +- struct device_private *private, *p; ++ struct device_private *p; + + deferred_probe_timeout = 0; + driver_deferred_probe_trigger(); + flush_work(&deferred_probe_work); + +- list_for_each_entry_safe(private, p, &deferred_probe_pending_list, deferred_probe) +- dev_info(private->device, "deferred probe pending"); ++ mutex_lock(&deferred_probe_mutex); ++ list_for_each_entry(p, &deferred_probe_pending_list, deferred_probe) ++ dev_info(p->device, "deferred probe pending\n"); ++ mutex_unlock(&deferred_probe_mutex); + } + static DECLARE_DELAYED_WORK(deferred_probe_timeout_work, deferred_probe_timeout_work_func); + diff --git a/queue-5.4/perf-map-tighten-snprintf-string-precision-to-pass-gcc-check-on-some-32-bit-arches.patch b/queue-5.4/perf-map-tighten-snprintf-string-precision-to-pass-gcc-check-on-some-32-bit-arches.patch new file mode 100644 index 00000000000..72505643134 --- /dev/null +++ b/queue-5.4/perf-map-tighten-snprintf-string-precision-to-pass-gcc-check-on-some-32-bit-arches.patch @@ -0,0 +1,64 @@ +From 77d02bd00cea9f1a87afe58113fa75b983d6c23a Mon Sep 17 00:00:00 2001 +From: Arnaldo Carvalho de Melo +Date: Fri, 5 Mar 2021 10:02:09 -0300 +Subject: perf map: Tighten snprintf() string precision to pass gcc check on some 32-bit arches + +From: Arnaldo Carvalho de Melo + +commit 77d02bd00cea9f1a87afe58113fa75b983d6c23a upstream. + +Noticed on a debian:experimental mips and mipsel cross build build +environment: + + perfbuilder@ec265a086e9b:~$ mips-linux-gnu-gcc --version | head -1 + mips-linux-gnu-gcc (Debian 10.2.1-3) 10.2.1 20201224 + perfbuilder@ec265a086e9b:~$ + + CC /tmp/build/perf/util/map.o + util/map.c: In function 'map__new': + util/map.c:109:5: error: '%s' directive output may be truncated writing between 1 and 2147483645 bytes into a region of size 4096 [-Werror=format-truncation=] + 109 | "%s/platforms/%s/arch-%s/usr/lib/%s", + | ^~ + In file included from /usr/mips-linux-gnu/include/stdio.h:867, + from util/symbol.h:11, + from util/map.c:2: + /usr/mips-linux-gnu/include/bits/stdio2.h:67:10: note: '__builtin___snprintf_chk' output 32 or more bytes (assuming 4294967321) into a destination of size 4096 + 67 | return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1, + | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 68 | __bos (__s), __fmt, __va_arg_pack ()); + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + cc1: all warnings being treated as errors + +Since we have the lenghts for what lands in that place, use it to give +the compiler more info and make it happy. + +Signed-off-by: Arnaldo Carvalho de Melo +Cc: Anders Roxell +Signed-off-by: Greg Kroah-Hartman +--- + tools/perf/util/map.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +--- a/tools/perf/util/map.c ++++ b/tools/perf/util/map.c +@@ -93,8 +93,7 @@ static inline bool replace_android_lib(c + if (!strncmp(filename, "/system/lib/", 12)) { + char *ndk, *app; + const char *arch; +- size_t ndk_length; +- size_t app_length; ++ int ndk_length, app_length; + + ndk = getenv("NDK_ROOT"); + app = getenv("APP_PLATFORM"); +@@ -122,8 +121,8 @@ static inline bool replace_android_lib(c + if (new_length > PATH_MAX) + return false; + snprintf(newfilename, new_length, +- "%s/platforms/%s/arch-%s/usr/lib/%s", +- ndk, app, arch, libname); ++ "%.*s/platforms/%.*s/arch-%s/usr/lib/%s", ++ ndk_length, ndk, app_length, app, arch, libname); + + return true; + } diff --git a/queue-5.4/perf-tools-use-define-api.pure-full-instead-of-pure-parser.patch b/queue-5.4/perf-tools-use-define-api.pure-full-instead-of-pure-parser.patch new file mode 100644 index 00000000000..7e6d09d3cf1 --- /dev/null +++ b/queue-5.4/perf-tools-use-define-api.pure-full-instead-of-pure-parser.patch @@ -0,0 +1,51 @@ +From fc8c0a99223367b071c83711259d754b6bb7a379 Mon Sep 17 00:00:00 2001 +From: Jiri Olsa +Date: Sun, 12 Jan 2020 20:22:59 +0100 +Subject: perf tools: Use %define api.pure full instead of %pure-parser + +From: Jiri Olsa + +commit fc8c0a99223367b071c83711259d754b6bb7a379 upstream. + +bison deprecated the "%pure-parser" directive in favor of "%define +api.pure full". + +The api.pure got introduced in bison 2.3 (Oct 2007), so it seems safe to +use it without any version check. + +Signed-off-by: Jiri Olsa +Cc: Adrian Hunter +Cc: Clark Williams +Cc: Jiri Olsa +Cc: Namhyung Kim +Cc: Ravi Bangoria +Cc: Thomas Gleixner +Link: http://lore.kernel.org/lkml/20200112192259.GA35080@krava +Signed-off-by: Arnaldo Carvalho de Melo +Cc: Anders Roxell +Signed-off-by: Greg Kroah-Hartman +--- + tools/perf/util/expr.y | 3 ++- + tools/perf/util/parse-events.y | 2 +- + 2 files changed, 3 insertions(+), 2 deletions(-) + +--- a/tools/perf/util/expr.y ++++ b/tools/perf/util/expr.y +@@ -12,7 +12,8 @@ + #define MAXIDLEN 256 + %} + +-%pure-parser ++%define api.pure full ++ + %parse-param { double *final_val } + %parse-param { struct parse_ctx *ctx } + %parse-param { const char **pp } +--- a/tools/perf/util/parse-events.y ++++ b/tools/perf/util/parse-events.y +@@ -1,4 +1,4 @@ +-%pure-parser ++%define api.pure full + %parse-param {void *_parse_state} + %parse-param {void *scanner} + %lex-param {void* scanner} diff --git a/queue-5.4/perf-tools-use-zd-for-size_t-printf-formats-on-32-bit.patch b/queue-5.4/perf-tools-use-zd-for-size_t-printf-formats-on-32-bit.patch new file mode 100644 index 00000000000..25c9d9e6fdb --- /dev/null +++ b/queue-5.4/perf-tools-use-zd-for-size_t-printf-formats-on-32-bit.patch @@ -0,0 +1,49 @@ +From 20befbb1080307e70c7893ef9840d32e3ef8ac45 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Thu, 20 Aug 2020 22:25:01 +0100 +Subject: perf tools: Use %zd for size_t printf formats on 32-bit + +From: Chris Wilson + +commit 20befbb1080307e70c7893ef9840d32e3ef8ac45 upstream. + +A couple of trivial fixes for using %zd for size_t in the code +supporting the ZSTD compression library. + +Signed-off-by: Chris Wilson +Acked-by: Jiri Olsa +Cc: Adrian Hunter +Cc: Alexey Budankov +Cc: Namhyung Kim +Cc: Peter Zijlstra +Link: http://lore.kernel.org/lkml/20200820212501.24421-1-chris@chris-wilson.co.uk +Signed-off-by: Arnaldo Carvalho de Melo +Cc: Anders Roxell +Signed-off-by: Greg Kroah-Hartman +--- + tools/perf/util/session.c | 2 +- + tools/perf/util/zstd.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +--- a/tools/perf/util/session.c ++++ b/tools/perf/util/session.c +@@ -88,7 +88,7 @@ static int perf_session__process_compres + session->decomp_last = decomp; + } + +- pr_debug("decomp (B): %ld to %ld\n", src_size, decomp_size); ++ pr_debug("decomp (B): %zd to %zd\n", src_size, decomp_size); + + return 0; + } +--- a/tools/perf/util/zstd.c ++++ b/tools/perf/util/zstd.c +@@ -99,7 +99,7 @@ size_t zstd_decompress_stream(struct zst + while (input.pos < input.size) { + ret = ZSTD_decompressStream(data->dstream, &output, &input); + if (ZSTD_isError(ret)) { +- pr_err("failed to decompress (B): %ld -> %ld, dst_size %ld : %s\n", ++ pr_err("failed to decompress (B): %zd -> %zd, dst_size %zd : %s\n", + src_size, output.size, dst_size, ZSTD_getErrorName(ret)); + break; + } diff --git a/queue-5.4/series b/queue-5.4/series index efd345a98bc..d688e04d613 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -11,3 +11,8 @@ idr-test-suite-create-anchor-before-launching-throbb.patch riscv-entry-fix-misaligned-base-for-excp_vect_table.patch block-don-t-ignore-req_nowait-for-direct-io.patch netfilter-x_tables-fix-compat-match-target-pad-out-of-bound-write.patch +driver-core-fix-locking-bug-in-deferred_probe_timeout_work_func.patch +perf-tools-use-define-api.pure-full-instead-of-pure-parser.patch +perf-tools-use-zd-for-size_t-printf-formats-on-32-bit.patch +perf-map-tighten-snprintf-string-precision-to-pass-gcc-check-on-some-32-bit-arches.patch +xen-events-fix-setting-irq-affinity.patch diff --git a/queue-5.4/xen-events-fix-setting-irq-affinity.patch b/queue-5.4/xen-events-fix-setting-irq-affinity.patch new file mode 100644 index 00000000000..6bfb06d6db0 --- /dev/null +++ b/queue-5.4/xen-events-fix-setting-irq-affinity.patch @@ -0,0 +1,50 @@ +From jgross@suse.com Thu Apr 15 15:56:08 2021 +From: Juergen Gross +Date: Mon, 12 Apr 2021 08:28:45 +0200 +Subject: xen/events: fix setting irq affinity +To: stable@vger.kernel.org +Cc: Juergen Gross , Boris Ostrovsky , Stefano Stabellini , xen-devel@lists.xenproject.org +Message-ID: <20210412062845.13946-1-jgross@suse.com> + +From: Juergen Gross + +The backport of upstream patch 25da4618af240fbec61 ("xen/events: don't +unmask an event channel when an eoi is pending") introduced a +regression for stable kernels 5.10 and older: setting IRQ affinity for +IRQs related to interdomain events would no longer work, as moving the +IRQ to its new cpu was not included in the irq_ack callback for those +events. + +Fix that by adding the needed call. + +Note that kernels 5.11 and later don't need the explicit moving of the +IRQ to the target cpu in the irq_ack callback, due to a rework of the +affinity setting in kernel 5.11. + +Signed-off-by: Juergen Gross +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/xen/events/events_base.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/xen/events/events_base.c ++++ b/drivers/xen/events/events_base.c +@@ -1783,7 +1783,7 @@ static void lateeoi_ack_dynirq(struct ir + + if (VALID_EVTCHN(evtchn)) { + do_mask(info, EVT_MASK_REASON_EOI_PENDING); +- event_handler_exit(info); ++ ack_dynirq(data); + } + } + +@@ -1794,7 +1794,7 @@ static void lateeoi_mask_ack_dynirq(stru + + if (VALID_EVTCHN(evtchn)) { + do_mask(info, EVT_MASK_REASON_EXPLICIT); +- event_handler_exit(info); ++ ack_dynirq(data); + } + } + -- 2.47.3