]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 14 May 2014 00:03:59 +0000 (17:03 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 14 May 2014 00:03:59 +0000 (17:03 -0700)
added patches:
firewire-ohci-beautify-some-macro-definitions.patch
firewire-ohci-fix-probe-failure-with-agere-lsi-controllers.patch
tracepoint-do-not-waste-memory-on-mods-with-no-tracepoints.patch

queue-3.10/firewire-ohci-beautify-some-macro-definitions.patch [new file with mode: 0644]
queue-3.10/firewire-ohci-fix-probe-failure-with-agere-lsi-controllers.patch [new file with mode: 0644]
queue-3.10/series
queue-3.10/tracepoint-do-not-waste-memory-on-mods-with-no-tracepoints.patch [new file with mode: 0644]

diff --git a/queue-3.10/firewire-ohci-beautify-some-macro-definitions.patch b/queue-3.10/firewire-ohci-beautify-some-macro-definitions.patch
new file mode 100644 (file)
index 0000000..cd9d31b
--- /dev/null
@@ -0,0 +1,61 @@
+From 0dbe15f88be5b2cdf4ca4145797861dfb0d583a5 Mon Sep 17 00:00:00 2001
+From: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Date: Mon, 5 Aug 2013 15:14:36 +0200
+Subject: firewire: ohci: beautify some macro definitions
+
+From: Stefan Richter <stefanr@s5r6.in-berlin.de>
+
+commit 0dbe15f88be5b2cdf4ca4145797861dfb0d583a5 upstream.
+
+a) Sort device IDs by vendor -- device -- revision.
+
+b) Write quirk flags in hexadecimal.  This affects the user-visible
+output of "modinfo firewire-ohci".  Since more flags have been added
+recently, it is now easier to cope with them in hexadecimal represen-
+tation.  Besides, the device-specific combination of quirk flags is
+shown in hexadecimal in the kernel log too.  (And firewire-sbp2
+presents its own quirk flags in modinfo as hexadecimals as well.)
+
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/firewire/ohci.c |   18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+--- a/drivers/firewire/ohci.c
++++ b/drivers/firewire/ohci.c
+@@ -271,6 +271,7 @@ static inline struct fw_ohci *fw_ohci(st
+ static char ohci_driver_name[] = KBUILD_MODNAME;
++#define PCI_VENDOR_ID_PINNACLE_SYSTEMS        0x11bd
+ #define PCI_DEVICE_ID_AGERE_FW643     0x5901
+ #define PCI_DEVICE_ID_CREATIVE_SB1394 0x4001
+ #define PCI_DEVICE_ID_JMICRON_JMB38X_FW       0x2380
+@@ -278,17 +279,16 @@ static char ohci_driver_name[] = KBUILD_
+ #define PCI_DEVICE_ID_TI_TSB12LV26    0x8020
+ #define PCI_DEVICE_ID_TI_TSB82AA2     0x8025
+ #define PCI_DEVICE_ID_VIA_VT630X      0x3044
+-#define PCI_VENDOR_ID_PINNACLE_SYSTEMS        0x11bd
+ #define PCI_REV_ID_VIA_VT6306         0x46
+-#define QUIRK_CYCLE_TIMER             1
+-#define QUIRK_RESET_PACKET            2
+-#define QUIRK_BE_HEADERS              4
+-#define QUIRK_NO_1394A                        8
+-#define QUIRK_NO_MSI                  16
+-#define QUIRK_TI_SLLZ059              32
+-#define QUIRK_IR_WAKE                 64
+-#define QUIRK_PHY_LCTRL_TIMEOUT               128
++#define QUIRK_CYCLE_TIMER             0x1
++#define QUIRK_RESET_PACKET            0x2
++#define QUIRK_BE_HEADERS              0x4
++#define QUIRK_NO_1394A                        0x8
++#define QUIRK_NO_MSI                  0x10
++#define QUIRK_TI_SLLZ059              0x20
++#define QUIRK_IR_WAKE                 0x40
++#define QUIRK_PHY_LCTRL_TIMEOUT               0x80
+ /* In case of multiple matches in ohci_quirks[], only the first one is used. */
+ static const struct {
diff --git a/queue-3.10/firewire-ohci-fix-probe-failure-with-agere-lsi-controllers.patch b/queue-3.10/firewire-ohci-fix-probe-failure-with-agere-lsi-controllers.patch
new file mode 100644 (file)
index 0000000..bd57d23
--- /dev/null
@@ -0,0 +1,100 @@
+From 0ca49345b6f489e95f8d6edeb0b092e257475b2a Mon Sep 17 00:00:00 2001
+From: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Date: Thu, 6 Mar 2014 20:39:04 +0100
+Subject: firewire: ohci: fix probe failure with Agere/LSI controllers
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Stefan Richter <stefanr@s5r6.in-berlin.de>
+
+commit 0ca49345b6f489e95f8d6edeb0b092e257475b2a upstream.
+
+Since commit bd972688eb24
+"firewire: ohci: Fix 'failed to read phy reg' on FW643 rev8",
+there is a high chance that firewire-ohci fails to initialize LSI née
+Agere controllers.
+https://bugzilla.kernel.org/show_bug.cgi?id=65151
+
+Peter Hurley points out the reason:  IEEE 1394a:2000 clause 5A.1 (or
+IEEE 1394:2008 clause 17.2.1) say:  "The PHY shall insure that no more
+than 10 ms elapse from the reassertion of LPS until the interface is
+reset.  The link shall not assert LReq until the reset is complete."
+In other words, the link needs to give the PHY at least 10 ms to get
+the interface operational.
+
+With just the msleep(1) in bd972688eb24, the first read_phy_reg()
+during ohci_enable() may happen before the phy-link interface reset was
+finished, and fail.  Due to the high variability of msleep(n) with small
+n, this failure was not fully reproducible, and not apparent at all with
+low CONFIG_HZ setting.
+
+On the other hand, Peter can no longer reproduce the issue with FW643
+rev8.  The read phy reg failures that happened back then may have had an
+unrelated cause.  So, just revert bd972688eb24, except for the valid
+comment on TSB82AA2 cards.
+
+Reported-by: Mikhail Gavrilov
+Reported-by: Jay Fenlason <fenlason@redhat.com>
+Reported-by: Clemens Ladisch <clemens@ladisch.de>
+Reported-by: Peter Hurley <peter@hurleysoftware.com>
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/firewire/ohci.c |   15 ++-------------
+ 1 file changed, 2 insertions(+), 13 deletions(-)
+
+--- a/drivers/firewire/ohci.c
++++ b/drivers/firewire/ohci.c
+@@ -288,7 +288,6 @@ static char ohci_driver_name[] = KBUILD_
+ #define QUIRK_NO_MSI                  0x10
+ #define QUIRK_TI_SLLZ059              0x20
+ #define QUIRK_IR_WAKE                 0x40
+-#define QUIRK_PHY_LCTRL_TIMEOUT               0x80
+ /* In case of multiple matches in ohci_quirks[], only the first one is used. */
+ static const struct {
+@@ -301,10 +300,7 @@ static const struct {
+               QUIRK_BE_HEADERS},
+       {PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_AGERE_FW643, 6,
+-              QUIRK_PHY_LCTRL_TIMEOUT | QUIRK_NO_MSI},
+-
+-      {PCI_VENDOR_ID_ATT, PCI_ANY_ID, PCI_ANY_ID,
+-              QUIRK_PHY_LCTRL_TIMEOUT},
++              QUIRK_NO_MSI},
+       {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_SB1394, PCI_ANY_ID,
+               QUIRK_RESET_PACKET},
+@@ -351,7 +347,6 @@ MODULE_PARM_DESC(quirks, "Chip quirks (d
+       ", disable MSI = "              __stringify(QUIRK_NO_MSI)
+       ", TI SLLZ059 erratum = "       __stringify(QUIRK_TI_SLLZ059)
+       ", IR wake unreliable = "       __stringify(QUIRK_IR_WAKE)
+-      ", phy LCtrl timeout = "        __stringify(QUIRK_PHY_LCTRL_TIMEOUT)
+       ")");
+ #define OHCI_PARAM_DEBUG_AT_AR                1
+@@ -2293,9 +2288,6 @@ static int ohci_enable(struct fw_card *c
+        * TI TSB82AA2 + TSB81BA3(A) cards signal LPS enabled early but
+        * cannot actually use the phy at that time.  These need tens of
+        * millisecods pause between LPS write and first phy access too.
+-       *
+-       * But do not wait for 50msec on Agere/LSI cards.  Their phy
+-       * arbitration state machine may time out during such a long wait.
+        */
+       reg_write(ohci, OHCI1394_HCControlSet,
+@@ -2303,11 +2295,8 @@ static int ohci_enable(struct fw_card *c
+                 OHCI1394_HCControl_postedWriteEnable);
+       flush_writes(ohci);
+-      if (!(ohci->quirks & QUIRK_PHY_LCTRL_TIMEOUT))
++      for (lps = 0, i = 0; !lps && i < 3; i++) {
+               msleep(50);
+-
+-      for (lps = 0, i = 0; !lps && i < 150; i++) {
+-              msleep(1);
+               lps = reg_read(ohci, OHCI1394_HCControlSet) &
+                     OHCI1394_HCControl_LPS;
+       }
index 4a92d27de0c240ad2b881f417739ed3d6709e3bf..3c748c59655ccaaadc3ac95c2e8187769f6e0bba 100644 (file)
@@ -4,3 +4,6 @@ scsi-megaraid-missing-bounds-check-in-mimd_to_kioc.patch
 blktrace-fix-accounting-of-partially-completed-requests.patch
 netfilter-nf_conntrack-reserve-two-bytes-for-nf_ct_ext-len.patch
 netfilter-can-t-fail-and-free-after-table-replacement.patch
+tracepoint-do-not-waste-memory-on-mods-with-no-tracepoints.patch
+firewire-ohci-beautify-some-macro-definitions.patch
+firewire-ohci-fix-probe-failure-with-agere-lsi-controllers.patch
diff --git a/queue-3.10/tracepoint-do-not-waste-memory-on-mods-with-no-tracepoints.patch b/queue-3.10/tracepoint-do-not-waste-memory-on-mods-with-no-tracepoints.patch
new file mode 100644 (file)
index 0000000..789681e
--- /dev/null
@@ -0,0 +1,43 @@
+From 7dec935a3aa04412cba2cebe1524ae0d34a30c24 Mon Sep 17 00:00:00 2001
+From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
+Date: Wed, 26 Feb 2014 10:54:36 -0500
+Subject: tracepoint: Do not waste memory on mods with no tracepoints
+
+From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
+
+commit 7dec935a3aa04412cba2cebe1524ae0d34a30c24 upstream.
+
+No reason to allocate tp_module structures for modules that have no
+tracepoints. This just wastes memory.
+
+Fixes: b75ef8b44b1c "Tracepoint: Dissociate from module mutex"
+Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/tracepoint.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/kernel/tracepoint.c
++++ b/kernel/tracepoint.c
+@@ -641,6 +641,9 @@ static int tracepoint_module_coming(stru
+       struct tp_module *tp_mod, *iter;
+       int ret = 0;
++      if (!mod->num_tracepoints)
++              return 0;
++
+       /*
+        * We skip modules that taint the kernel, especially those with different
+        * module headers (for forced load), to make sure we don't cause a crash.
+@@ -684,6 +687,9 @@ static int tracepoint_module_going(struc
+ {
+       struct tp_module *pos;
++      if (!mod->num_tracepoints)
++              return 0;
++
+       mutex_lock(&tracepoints_mutex);
+       tracepoint_update_probe_range(mod->tracepoints_ptrs,
+               mod->tracepoints_ptrs + mod->num_tracepoints);