]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 14 Jan 2015 05:41:08 +0000 (21:41 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 14 Jan 2015 05:41:08 +0000 (21:41 -0800)
added patches:
btrfs-don-t-delay-inode-ref-updates-during-log-replay.patch
perf-fix-events-installation-during-moving-group.patch
perf-session-do-not-fail-on-processing-out-of-order-event.patch
perf-x86-intel-uncore-make-sure-only-uncore-events-are-collected.patch

queue-3.10/btrfs-don-t-delay-inode-ref-updates-during-log-replay.patch [new file with mode: 0644]
queue-3.10/perf-fix-events-installation-during-moving-group.patch [new file with mode: 0644]
queue-3.10/perf-session-do-not-fail-on-processing-out-of-order-event.patch [new file with mode: 0644]
queue-3.10/perf-x86-intel-uncore-make-sure-only-uncore-events-are-collected.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/btrfs-don-t-delay-inode-ref-updates-during-log-replay.patch b/queue-3.10/btrfs-don-t-delay-inode-ref-updates-during-log-replay.patch
new file mode 100644 (file)
index 0000000..8ee5c54
--- /dev/null
@@ -0,0 +1,50 @@
+From 6f8960541b1eb6054a642da48daae2320fddba93 Mon Sep 17 00:00:00 2001
+From: Chris Mason <clm@fb.com>
+Date: Wed, 31 Dec 2014 12:18:29 -0500
+Subject: Btrfs: don't delay inode ref updates during log replay
+
+From: Chris Mason <clm@fb.com>
+
+commit 6f8960541b1eb6054a642da48daae2320fddba93 upstream.
+
+Commit 1d52c78afbb (Btrfs: try not to ENOSPC on log replay) added a
+check to skip delayed inode updates during log replay because it
+confuses the enospc code.  But the delayed processing will end up
+ignoring delayed refs from log replay because the inode itself wasn't
+put through the delayed code.
+
+This can end up triggering a warning at commit time:
+
+WARNING: CPU: 2 PID: 778 at fs/btrfs/delayed-inode.c:1410 btrfs_assert_delayed_root_empty+0x32/0x34()
+
+Which is repeated for each commit because we never process the delayed
+inode ref update.
+
+The fix used here is to change btrfs_delayed_delete_inode_ref to return
+an error if we're currently in log replay.  The caller will do the ref
+deletion immediately and everything will work properly.
+
+Signed-off-by: Chris Mason <clm@fb.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/btrfs/delayed-inode.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/fs/btrfs/delayed-inode.c
++++ b/fs/btrfs/delayed-inode.c
+@@ -1843,6 +1843,14 @@ int btrfs_delayed_update_inode(struct bt
+       struct btrfs_delayed_node *delayed_node;
+       int ret = 0;
++      /*
++       * we don't do delayed inode updates during log recovery because it
++       * leads to enospc problems.  This means we also can't do
++       * delayed inode refs
++       */
++      if (BTRFS_I(inode)->root->fs_info->log_root_recovering)
++              return -EAGAIN;
++
+       delayed_node = btrfs_get_or_create_delayed_node(inode);
+       if (IS_ERR(delayed_node))
+               return PTR_ERR(delayed_node);
diff --git a/queue-3.10/perf-fix-events-installation-during-moving-group.patch b/queue-3.10/perf-fix-events-installation-during-moving-group.patch
new file mode 100644 (file)
index 0000000..1650b1a
--- /dev/null
@@ -0,0 +1,76 @@
+From 9fc81d87420d0d3fd62d5e5529972c0ad9eab9cc Mon Sep 17 00:00:00 2001
+From: Jiri Olsa <jolsa@kernel.org>
+Date: Wed, 10 Dec 2014 21:23:51 +0100
+Subject: perf: Fix events installation during moving group
+
+From: Jiri Olsa <jolsa@kernel.org>
+
+commit 9fc81d87420d0d3fd62d5e5529972c0ad9eab9cc upstream.
+
+We allow PMU driver to change the cpu on which the event
+should be installed to. This happened in patch:
+
+  e2d37cd213dc ("perf: Allow the PMU driver to choose the CPU on which to install events")
+
+This patch also forces all the group members to follow
+the currently opened events cpu if the group happened
+to be moved.
+
+This and the change of event->cpu in perf_install_in_context()
+function introduced in:
+
+  0cda4c023132 ("perf: Introduce perf_pmu_migrate_context()")
+
+forces group members to change their event->cpu,
+if the currently-opened-event's PMU changed the cpu
+and there is a group move.
+
+Above behaviour causes problem for breakpoint events,
+which uses event->cpu to touch cpu specific data for
+breakpoints accounting. By changing event->cpu, some
+breakpoints slots were wrongly accounted for given
+cpu.
+
+Vinces's perf fuzzer hit this issue and caused following
+WARN on my setup:
+
+   WARNING: CPU: 0 PID: 20214 at arch/x86/kernel/hw_breakpoint.c:119 arch_install_hw_breakpoint+0x142/0x150()
+   Can't find any breakpoint slot
+   [...]
+
+This patch changes the group moving code to keep the event's
+original cpu.
+
+Reported-by: Vince Weaver <vince@deater.net>
+Signed-off-by: Jiri Olsa <jolsa@redhat.com>
+Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
+Cc: Frederic Weisbecker <fweisbec@gmail.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Stephane Eranian <eranian@google.com>
+Cc: Vince Weaver <vince@deater.net>
+Cc: Yan, Zheng <zheng.z.yan@intel.com>
+Link: http://lkml.kernel.org/r/1418243031-20367-3-git-send-email-jolsa@kernel.org
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/events/core.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/events/core.c
++++ b/kernel/events/core.c
+@@ -6887,11 +6887,11 @@ SYSCALL_DEFINE5(perf_event_open,
+       if (move_group) {
+               synchronize_rcu();
+-              perf_install_in_context(ctx, group_leader, event->cpu);
++              perf_install_in_context(ctx, group_leader, group_leader->cpu);
+               get_ctx(ctx);
+               list_for_each_entry(sibling, &group_leader->sibling_list,
+                                   group_entry) {
+-                      perf_install_in_context(ctx, sibling, event->cpu);
++                      perf_install_in_context(ctx, sibling, sibling->cpu);
+                       get_ctx(ctx);
+               }
+       }
diff --git a/queue-3.10/perf-session-do-not-fail-on-processing-out-of-order-event.patch b/queue-3.10/perf-session-do-not-fail-on-processing-out-of-order-event.patch
new file mode 100644 (file)
index 0000000..d394723
--- /dev/null
@@ -0,0 +1,86 @@
+From f61ff6c06dc8f32c7036013ad802c899ec590607 Mon Sep 17 00:00:00 2001
+From: Jiri Olsa <jolsa@kernel.org>
+Date: Wed, 26 Nov 2014 16:39:31 +0100
+Subject: perf session: Do not fail on processing out of order event
+
+From: Jiri Olsa <jolsa@kernel.org>
+
+commit f61ff6c06dc8f32c7036013ad802c899ec590607 upstream.
+
+Linus reported perf report command being interrupted due to processing
+of 'out of order' event, with following error:
+
+  Timestamp below last timeslice flush
+  0x5733a8 [0x28]: failed to process type: 3
+
+I could reproduce the issue and in my case it was caused by one CPU
+(mmap) being behind during record and userspace mmap reader seeing the
+data after other CPUs data were already stored.
+
+This is expected under some circumstances because we need to limit the
+number of events that we queue for reordering when we receive a
+PERF_RECORD_FINISHED_ROUND or when we force flush due to memory
+pressure.
+
+Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Jiri Olsa <jolsa@kernel.org>
+Acked-by: Ingo Molnar <mingo@kernel.org>
+Cc: Andi Kleen <ak@linux.intel.com>
+Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
+Cc: David Ahern <dsahern@gmail.com>
+Cc: Frederic Weisbecker <fweisbec@gmail.com>
+Cc: Ingo Molnar <mingo@kernel.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Matt Fleming <matt.fleming@intel.com>
+Cc: Namhyung Kim <namhyung@kernel.org>
+Cc: Paul Mackerras <paulus@samba.org>
+Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Cc: Stephane Eranian <eranian@google.com>
+Link: http://lkml.kernel.org/r/1417016371-30249-1-git-send-email-jolsa@kernel.org
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+[zhangzhiqiang: backport to 3.10:
+ - adjust context
+ - commit f61ff6c06d struct events_stats was defined in tools/perf/util/event.h
+   while 3.10 stable defined in tools/perf/util/hist.h.
+ - 3.10 stable there is no pr_oe_time() which used for debug.
+ - After the above adjustments, becomes same to the original patch:
+   https://github.com/torvalds/linux/commit/f61ff6c06dc8f32c7036013ad802c899ec590607
+]
+Signed-off-by: Zhiqiang Zhang <zhangzhiqiang.zhang@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/util/hist.h    |    1 +
+ tools/perf/util/session.c |    5 +++--
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+--- a/tools/perf/util/hist.h
++++ b/tools/perf/util/hist.h
+@@ -34,6 +34,7 @@ struct events_stats {
+       u32 nr_invalid_chains;
+       u32 nr_unknown_id;
+       u32 nr_unprocessable_samples;
++      u32 nr_unordered_events;
+ };
+ enum hist_column {
+--- a/tools/perf/util/session.c
++++ b/tools/perf/util/session.c
+@@ -656,8 +656,7 @@ static int perf_session_queue_event(stru
+               return -ETIME;
+       if (timestamp < s->ordered_samples.last_flush) {
+-              printf("Warning: Timestamp below last timeslice flush\n");
+-              return -EINVAL;
++              s->stats.nr_unordered_events++;
+       }
+       if (!list_empty(sc)) {
+@@ -1057,6 +1056,8 @@ static void perf_session__warn_about_err
+                           "Do you have a KVM guest running and not using 'perf kvm'?\n",
+                           session->stats.nr_unprocessable_samples);
+       }
++      if (session->stats.nr_unordered_events != 0)
++              ui__warning("%u out of order events recorded.\n", session->stats.nr_unordered_events);
+ }
+ #define session_done()        (*(volatile int *)(&session_done))
diff --git a/queue-3.10/perf-x86-intel-uncore-make-sure-only-uncore-events-are-collected.patch b/queue-3.10/perf-x86-intel-uncore-make-sure-only-uncore-events-are-collected.patch
new file mode 100644 (file)
index 0000000..741e93b
--- /dev/null
@@ -0,0 +1,89 @@
+From af91568e762d04931dcbdd6bef4655433d8b9418 Mon Sep 17 00:00:00 2001
+From: Jiri Olsa <jolsa@kernel.org>
+Date: Wed, 10 Dec 2014 21:23:50 +0100
+Subject: perf/x86/intel/uncore: Make sure only uncore events are collected
+
+From: Jiri Olsa <jolsa@kernel.org>
+
+commit af91568e762d04931dcbdd6bef4655433d8b9418 upstream.
+
+The uncore_collect_events functions assumes that event group
+might contain only uncore events which is wrong, because it
+might contain any type of events.
+
+This bug leads to uncore framework touching 'not' uncore events,
+which could end up all sorts of bugs.
+
+One was triggered by Vince's perf fuzzer, when the uncore code
+touched breakpoint event private event space as if it was uncore
+event and caused BUG:
+
+   BUG: unable to handle kernel paging request at ffffffff82822068
+   IP: [<ffffffff81020338>] uncore_assign_events+0x188/0x250
+   ...
+
+The code in uncore_assign_events() function was looking for
+event->hw.idx data while the event was initialized as a
+breakpoint with different members in event->hw union.
+
+This patch forces uncore_collect_events() to collect only uncore
+events.
+
+Reported-by: Vince Weaver <vince@deater.net>
+Signed-off-by: Jiri Olsa <jolsa@redhat.com>
+Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
+Cc: Frederic Weisbecker <fweisbec@gmail.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Stephane Eranian <eranian@google.com>
+Cc: Yan, Zheng <zheng.z.yan@intel.com>
+Link: http://lkml.kernel.org/r/1418243031-20367-2-git-send-email-jolsa@kernel.org
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kernel/cpu/perf_event_intel_uncore.c |   22 +++++++++++++++++++---
+ 1 file changed, 19 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
++++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
+@@ -2657,6 +2657,17 @@ static struct intel_uncore_box *uncore_e
+       return uncore_pmu_to_box(uncore_event_to_pmu(event), smp_processor_id());
+ }
++/*
++ * Using uncore_pmu_event_init pmu event_init callback
++ * as a detection point for uncore events.
++ */
++static int uncore_pmu_event_init(struct perf_event *event);
++
++static bool is_uncore_event(struct perf_event *event)
++{
++      return event->pmu->event_init == uncore_pmu_event_init;
++}
++
+ static int
+ uncore_collect_events(struct intel_uncore_box *box, struct perf_event *leader, bool dogrp)
+ {
+@@ -2671,13 +2682,18 @@ uncore_collect_events(struct intel_uncor
+               return -EINVAL;
+       n = box->n_events;
+-      box->event_list[n] = leader;
+-      n++;
++
++      if (is_uncore_event(leader)) {
++              box->event_list[n] = leader;
++              n++;
++      }
++
+       if (!dogrp)
+               return n;
+       list_for_each_entry(event, &leader->sibling_list, group_entry) {
+-              if (event->state <= PERF_EVENT_STATE_OFF)
++              if (!is_uncore_event(event) ||
++                  event->state <= PERF_EVENT_STATE_OFF)
+                       continue;
+               if (n >= max_count)
index 4f4ebda8c1e6b7619c5fac284d14bad2c6ba3f9a..7086e5ffff3692c5d4d9430625433f21b0b662bd 100644 (file)
@@ -35,3 +35,7 @@ nfsd4-fix-xdr4-inclusion-of-escaped-char.patch
 nilfs2-fix-the-nilfs_iget-vs.-nilfs_new_inode-races.patch
 scripts-kernel-doc-don-t-eat-struct-members-with-__aligned.patch
 arm-mvebu-disable-i-o-coherency-on-non-smp-situations-on-armada-370-375-38x-xp.patch
+btrfs-don-t-delay-inode-ref-updates-during-log-replay.patch
+perf-x86-intel-uncore-make-sure-only-uncore-events-are-collected.patch
+perf-fix-events-installation-during-moving-group.patch
+perf-session-do-not-fail-on-processing-out-of-order-event.patch