]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 22 Jul 2013 20:22:33 +0000 (13:22 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 22 Jul 2013 20:22:33 +0000 (13:22 -0700)
added patches:
asoc-sglt5000-fix-sgtl5000_pll_frac_div_mask.patch
ata_piix-ide-mode-sata-patch-for-intel-coleto-creek-deviceids.patch
ath9k-do-not-assign-noise-for-null-caldata.patch
ext3-fix-data-journal-fast-mount-umount-hang.patch
libata-skip-srst-for-all-simg-7x-port-multipliers.patch
rt2x00-read-5ghz-tx-power-values-from-the-correct-offset.patch
tick-prevent-uncontrolled-switch-to-oneshot-mode.patch

queue-3.4/asoc-sglt5000-fix-sgtl5000_pll_frac_div_mask.patch [new file with mode: 0644]
queue-3.4/ata_piix-ide-mode-sata-patch-for-intel-coleto-creek-deviceids.patch [new file with mode: 0644]
queue-3.4/ath9k-do-not-assign-noise-for-null-caldata.patch [new file with mode: 0644]
queue-3.4/ext3-fix-data-journal-fast-mount-umount-hang.patch [new file with mode: 0644]
queue-3.4/libata-skip-srst-for-all-simg-7x-port-multipliers.patch [new file with mode: 0644]
queue-3.4/rt2x00-read-5ghz-tx-power-values-from-the-correct-offset.patch [new file with mode: 0644]
queue-3.4/series [new file with mode: 0644]
queue-3.4/tick-prevent-uncontrolled-switch-to-oneshot-mode.patch [new file with mode: 0644]

diff --git a/queue-3.4/asoc-sglt5000-fix-sgtl5000_pll_frac_div_mask.patch b/queue-3.4/asoc-sglt5000-fix-sgtl5000_pll_frac_div_mask.patch
new file mode 100644 (file)
index 0000000..acdd77b
--- /dev/null
@@ -0,0 +1,32 @@
+From 5c78dfe87ea04b501ee000a7f03b9432ac9d008c Mon Sep 17 00:00:00 2001
+From: Fabio Estevam <fabio.estevam@freescale.com>
+Date: Thu, 4 Jul 2013 20:01:03 -0300
+Subject: ASoC: sglt5000: Fix SGTL5000_PLL_FRAC_DIV_MASK
+
+From: Fabio Estevam <fabio.estevam@freescale.com>
+
+commit 5c78dfe87ea04b501ee000a7f03b9432ac9d008c upstream.
+
+SGTL5000_PLL_FRAC_DIV_MASK is used to mask bits 0-10 (11 bits in total) of
+register CHIP_PLL_CTRL, so fix the mask to accomodate all this bit range.
+
+Reported-by: Oskar Schirmer <oskar@scara.com>
+Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
+Signed-off-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/soc/codecs/sgtl5000.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/sound/soc/codecs/sgtl5000.h
++++ b/sound/soc/codecs/sgtl5000.h
+@@ -347,7 +347,7 @@
+ #define SGTL5000_PLL_INT_DIV_MASK             0xf800
+ #define SGTL5000_PLL_INT_DIV_SHIFT            11
+ #define SGTL5000_PLL_INT_DIV_WIDTH            5
+-#define SGTL5000_PLL_FRAC_DIV_MASK            0x0700
++#define SGTL5000_PLL_FRAC_DIV_MASK            0x07ff
+ #define SGTL5000_PLL_FRAC_DIV_SHIFT           0
+ #define SGTL5000_PLL_FRAC_DIV_WIDTH           11
diff --git a/queue-3.4/ata_piix-ide-mode-sata-patch-for-intel-coleto-creek-deviceids.patch b/queue-3.4/ata_piix-ide-mode-sata-patch-for-intel-coleto-creek-deviceids.patch
new file mode 100644 (file)
index 0000000..4b84764
--- /dev/null
@@ -0,0 +1,30 @@
+From c7e8695bfa0611b39493a9dfe8bab9f63f9809bd Mon Sep 17 00:00:00 2001
+From: Seth Heasley <seth.heasley@intel.com>
+Date: Wed, 19 Jun 2013 16:25:37 -0700
+Subject: ata_piix: IDE-mode SATA patch for Intel Coleto Creek DeviceIDs
+
+From: Seth Heasley <seth.heasley@intel.com>
+
+commit c7e8695bfa0611b39493a9dfe8bab9f63f9809bd upstream.
+
+This patch adds the IDE-mode SATA DeviceIDs for the Intel Coleto Creek PCH.
+
+Signed-off-by: Seth Heasley <seth.heasley@intel.com>
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/ata/ata_piix.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/ata/ata_piix.c
++++ b/drivers/ata/ata_piix.c
+@@ -352,6 +352,8 @@ static const struct pci_device_id piix_p
+       /* SATA Controller IDE (BayTrail) */
+       { 0x8086, 0x0F20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt },
+       { 0x8086, 0x0F21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt },
++      /* SATA Controller IDE (Coleto Creek) */
++      { 0x8086, 0x23a6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
+       { }     /* terminate list */
+ };
diff --git a/queue-3.4/ath9k-do-not-assign-noise-for-null-caldata.patch b/queue-3.4/ath9k-do-not-assign-noise-for-null-caldata.patch
new file mode 100644 (file)
index 0000000..08c4b9f
--- /dev/null
@@ -0,0 +1,33 @@
+From d3bcb7b24bbf09fde8405770e676fe0c11c79662 Mon Sep 17 00:00:00 2001
+From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
+Date: Mon, 10 Jun 2013 13:49:40 +0530
+Subject: ath9k: Do not assign noise for NULL caldata
+
+From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
+
+commit d3bcb7b24bbf09fde8405770e676fe0c11c79662 upstream.
+
+ah->noise is maintained globally and not per-channel. This
+is updated in the reset() routine after the NF history has been
+filled for the *current channel*, just before switching to
+the new channel. There is no need to do it inside getnf(), since
+ah->noise must contain a value for the new channel.
+
+Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/ath/ath9k/calib.c |    1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/drivers/net/wireless/ath/ath9k/calib.c
++++ b/drivers/net/wireless/ath/ath9k/calib.c
+@@ -389,7 +389,6 @@ bool ath9k_hw_getnf(struct ath_hw *ah, s
+       if (!caldata) {
+               chan->noisefloor = nf;
+-              ah->noise = ath9k_hw_getchan_noise(ah, chan);
+               return false;
+       }
diff --git a/queue-3.4/ext3-fix-data-journal-fast-mount-umount-hang.patch b/queue-3.4/ext3-fix-data-journal-fast-mount-umount-hang.patch
new file mode 100644 (file)
index 0000000..9775f9c
--- /dev/null
@@ -0,0 +1,49 @@
+From e643692138cfa33528f054b071ba2583509bb217 Mon Sep 17 00:00:00 2001
+From: Jan Kara <jack@suse.cz>
+Date: Wed, 20 Mar 2013 14:39:05 +0100
+Subject: ext3: fix data=journal fast mount/umount hang
+
+From: Jan Kara <jack@suse.cz>
+
+commit e643692138cfa33528f054b071ba2583509bb217 upstream.
+
+In data=journal mode, if we unmount the file system before a
+transaction has a chance to complete, when the journal inode is being
+evicted, we can end up calling into log_wait_commit() for the
+last transaction, after the journalling machinery has been shut down.
+That triggers the WARN_ONCE in __log_start_commit().
+
+Arguably we should adjust ext3_should_journal_data() to return FALSE
+for the journal inode, but the only place it matters is
+ext3_evict_inode(), and so it's to save a bit of CPU time, and to make
+the patch much more obviously correct by inspection(tm), we'll fix it
+by explicitly not trying to waiting for a journal commit when we are
+evicting the journal inode, since it's guaranteed to never succeed in
+this case.
+
+This can be easily replicated via:
+
+     mount -t ext3 -o data=journal /dev/vdb /vdb ; umount /vdb
+
+This is a port of ext4 fix from Ted Ts'o.
+
+Signed-off-by: Jan Kara <jack@suse.cz>
+Cc: Benjamin LaHaise <bcrl@kvack.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/ext3/inode.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/fs/ext3/inode.c
++++ b/fs/ext3/inode.c
+@@ -218,7 +218,8 @@ void ext3_evict_inode (struct inode *ino
+        */
+       if (inode->i_nlink && ext3_should_journal_data(inode) &&
+           EXT3_SB(inode->i_sb)->s_journal &&
+-          (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode))) {
++          (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode)) &&
++          inode->i_ino != EXT3_JOURNAL_INO) {
+               tid_t commit_tid = atomic_read(&ei->i_datasync_tid);
+               journal_t *journal = EXT3_SB(inode->i_sb)->s_journal;
diff --git a/queue-3.4/libata-skip-srst-for-all-simg-7x-port-multipliers.patch b/queue-3.4/libata-skip-srst-for-all-simg-7x-port-multipliers.patch
new file mode 100644 (file)
index 0000000..14e0ce8
--- /dev/null
@@ -0,0 +1,87 @@
+From 7a87718d92760fc688628ad6a430643dafa16f1f Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Tue, 11 Jun 2013 00:11:36 -0700
+Subject: libata: skip SRST for all SIMG [34]7x port-multipliers
+
+From: Tejun Heo <tj@kernel.org>
+
+commit 7a87718d92760fc688628ad6a430643dafa16f1f upstream.
+
+For some reason, a lot of port-multipliers have issues with softreset.
+SIMG [34]7x series port-multipliers have been quite erratic in this
+regard.  I recall that it was better with some firmware revisions and
+the current list of quirks worked fine for a while.  I think it got
+worse with later firmwares or maybe my test coverage wasn't good
+enough.  Anyways, HPA is reporting that his 3726 setup suffers SRST
+failures and then the PMP gets confused and fails to probe the last
+port.
+
+The hope was that we try to stick to the standard as much as possible
+and soonish the PMPs and their firmwares will improve in quality, so
+the quirk list was kept to minimum.  Well, it seems like that's never
+gonna happen.
+
+Let's set NO_SRST for all [34]7x PMPs so that whatever remaining
+userbase of the device suffer the least.  Maybe we should do the same
+for 57xx's but unfortunately I don't have any device left to test and
+I'm not even sure 57xx's have ever been made widely available, so
+let's leave those alone for now.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Reported-by: "H. Peter Anvin" <hpa@zytor.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/ata/libata-pmp.c |   33 +++++++++++++++++----------------
+ 1 file changed, 17 insertions(+), 16 deletions(-)
+
+--- a/drivers/ata/libata-pmp.c
++++ b/drivers/ata/libata-pmp.c
+@@ -389,9 +389,13 @@ static void sata_pmp_quirks(struct ata_p
+                       /* link reports offline after LPM */
+                       link->flags |= ATA_LFLAG_NO_LPM;
+-                      /* Class code report is unreliable. */
++                      /*
++                       * Class code report is unreliable and SRST times
++                       * out under certain configurations.
++                       */
+                       if (link->pmp < 5)
+-                              link->flags |= ATA_LFLAG_ASSUME_ATA;
++                              link->flags |= ATA_LFLAG_NO_SRST |
++                                             ATA_LFLAG_ASSUME_ATA;
+                       /* port 5 is for SEMB device and it doesn't like SRST */
+                       if (link->pmp == 5)
+@@ -399,20 +403,17 @@ static void sata_pmp_quirks(struct ata_p
+                                              ATA_LFLAG_ASSUME_SEMB;
+               }
+       } else if (vendor == 0x1095 && devid == 0x4723) {
+-              /* sil4723 quirks */
+-              ata_for_each_link(link, ap, EDGE) {
+-                      /* link reports offline after LPM */
+-                      link->flags |= ATA_LFLAG_NO_LPM;
+-
+-                      /* class code report is unreliable */
+-                      if (link->pmp < 2)
+-                              link->flags |= ATA_LFLAG_ASSUME_ATA;
+-
+-                      /* the config device at port 2 locks up on SRST */
+-                      if (link->pmp == 2)
+-                              link->flags |= ATA_LFLAG_NO_SRST |
+-                                             ATA_LFLAG_ASSUME_ATA;
+-              }
++              /*
++               * sil4723 quirks
++               *
++               * Link reports offline after LPM.  Class code report is
++               * unreliable.  SIMG PMPs never got SRST reliable and the
++               * config device at port 2 locks up on SRST.
++               */
++              ata_for_each_link(link, ap, EDGE)
++                      link->flags |= ATA_LFLAG_NO_LPM |
++                                     ATA_LFLAG_NO_SRST |
++                                     ATA_LFLAG_ASSUME_ATA;
+       } else if (vendor == 0x1095 && devid == 0x4726) {
+               /* sil4726 quirks */
+               ata_for_each_link(link, ap, EDGE) {
diff --git a/queue-3.4/rt2x00-read-5ghz-tx-power-values-from-the-correct-offset.patch b/queue-3.4/rt2x00-read-5ghz-tx-power-values-from-the-correct-offset.patch
new file mode 100644 (file)
index 0000000..038e329
--- /dev/null
@@ -0,0 +1,69 @@
+From 0a6f3a8ebaf13407523c2c7d575b4ca2debd23ba Mon Sep 17 00:00:00 2001
+From: Gabor Juhos <juhosg@openwrt.org>
+Date: Sat, 22 Jun 2013 13:13:25 +0200
+Subject: rt2x00: read 5GHz TX power values from the correct offset
+
+From: Gabor Juhos <juhosg@openwrt.org>
+
+commit 0a6f3a8ebaf13407523c2c7d575b4ca2debd23ba upstream.
+
+The current code uses the same index value both
+for the channel information array and for the TX
+power table. The index starts from 14, however the
+index of the TX power table must start from zero.
+
+Fix it, in order to get the correct TX power value
+for a given channel.
+
+The changes in rt61pci.c and rt73usb.c are compile
+tested only.
+
+Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
+Acked-by: Stanislaw Gruszka <stf_xl@wp.pl>
+Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/rt2x00/rt2800lib.c |    4 ++--
+ drivers/net/wireless/rt2x00/rt61pci.c   |    3 ++-
+ drivers/net/wireless/rt2x00/rt73usb.c   |    3 ++-
+ 3 files changed, 6 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800lib.c
++++ b/drivers/net/wireless/rt2x00/rt2800lib.c
+@@ -4627,8 +4627,8 @@ int rt2800_probe_hw_mode(struct rt2x00_d
+               default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A2);
+               for (i = 14; i < spec->num_channels; i++) {
+-                      info[i].default_power1 = default_power1[i];
+-                      info[i].default_power2 = default_power2[i];
++                      info[i].default_power1 = default_power1[i - 14];
++                      info[i].default_power2 = default_power2[i - 14];
+               }
+       }
+--- a/drivers/net/wireless/rt2x00/rt61pci.c
++++ b/drivers/net/wireless/rt2x00/rt61pci.c
+@@ -2822,7 +2822,8 @@ static int rt61pci_probe_hw_mode(struct
+               tx_power = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A_START);
+               for (i = 14; i < spec->num_channels; i++) {
+                       info[i].max_power = MAX_TXPOWER;
+-                      info[i].default_power1 = TXPOWER_FROM_DEV(tx_power[i]);
++                      info[i].default_power1 =
++                                      TXPOWER_FROM_DEV(tx_power[i - 14]);
+               }
+       }
+--- a/drivers/net/wireless/rt2x00/rt73usb.c
++++ b/drivers/net/wireless/rt2x00/rt73usb.c
+@@ -2167,7 +2167,8 @@ static int rt73usb_probe_hw_mode(struct
+               tx_power = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A_START);
+               for (i = 14; i < spec->num_channels; i++) {
+                       info[i].max_power = MAX_TXPOWER;
+-                      info[i].default_power1 = TXPOWER_FROM_DEV(tx_power[i]);
++                      info[i].default_power1 =
++                                      TXPOWER_FROM_DEV(tx_power[i - 14]);
+               }
+       }
diff --git a/queue-3.4/series b/queue-3.4/series
new file mode 100644 (file)
index 0000000..c641f20
--- /dev/null
@@ -0,0 +1,7 @@
+ext3-fix-data-journal-fast-mount-umount-hang.patch
+libata-skip-srst-for-all-simg-7x-port-multipliers.patch
+ata_piix-ide-mode-sata-patch-for-intel-coleto-creek-deviceids.patch
+asoc-sglt5000-fix-sgtl5000_pll_frac_div_mask.patch
+tick-prevent-uncontrolled-switch-to-oneshot-mode.patch
+rt2x00-read-5ghz-tx-power-values-from-the-correct-offset.patch
+ath9k-do-not-assign-noise-for-null-caldata.patch
diff --git a/queue-3.4/tick-prevent-uncontrolled-switch-to-oneshot-mode.patch b/queue-3.4/tick-prevent-uncontrolled-switch-to-oneshot-mode.patch
new file mode 100644 (file)
index 0000000..2a6bd2c
--- /dev/null
@@ -0,0 +1,84 @@
+From 1f73a9806bdd07a5106409bbcab3884078bd34fe Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 1 Jul 2013 22:14:10 +0200
+Subject: tick: Prevent uncontrolled switch to oneshot mode
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+commit 1f73a9806bdd07a5106409bbcab3884078bd34fe upstream.
+
+When the system switches from periodic to oneshot mode, the broadcast
+logic causes a possibility that a CPU which has not yet switched to
+oneshot mode puts its own clock event device into oneshot mode without
+updating the state and the timer handler.
+
+CPU0                           CPU1
+                               per cpu tickdev is in periodic mode
+                               and switched to broadcast
+
+Switch to oneshot mode
+ tick_broadcast_switch_to_oneshot()
+  cpumask_copy(tick_oneshot_broacast_mask,
+              tick_broadcast_mask);
+
+  broadcast device mode = oneshot
+
+                               Timer interrupt
+
+                               irq_enter()
+                                tick_check_oneshot_broadcast()
+                                 dev->set_mode(ONESHOT);
+
+                               tick_handle_periodic()
+                                if (dev->mode == ONESHOT)
+                                  dev->next_event += period;
+                                  FAIL.
+
+We fail, because dev->next_event contains KTIME_MAX, if the device was
+in periodic mode before the uncontrolled switch to oneshot happened.
+
+We must copy the broadcast bits over to the oneshot mask, because
+otherwise a CPU which relies on the broadcast would not been woken up
+anymore after the broadcast device switched to oneshot mode.
+
+So we need to verify in tick_check_oneshot_broadcast() whether the CPU
+has already switched to oneshot mode. If not, leave the device
+untouched and let the CPU switch controlled into oneshot mode.
+
+This is a long standing bug, which was never noticed, because the main
+user of the broadcast x86 cannot run into that scenario, AFAICT. The
+nonarchitected timer mess of ARM creates a gazillion of differently
+broken abominations which trigger the shortcomings of that broadcast
+code, which better had never been necessary in the first place.
+
+Reported-and-tested-by: Stehle Vincent-B46079 <B46079@freescale.com>
+Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
+Cc: John Stultz <john.stultz@linaro.org>,
+Cc: Mark Rutland <mark.rutland@arm.com>
+Link: http://lkml.kernel.org/r/alpine.DEB.2.02.1307012153060.4013@ionos.tec.linutronix.de
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/time/tick-broadcast.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/kernel/time/tick-broadcast.c
++++ b/kernel/time/tick-broadcast.c
+@@ -400,7 +400,15 @@ void tick_check_oneshot_broadcast(int cp
+       if (cpumask_test_cpu(cpu, to_cpumask(tick_broadcast_oneshot_mask))) {
+               struct tick_device *td = &per_cpu(tick_cpu_device, cpu);
+-              clockevents_set_mode(td->evtdev, CLOCK_EVT_MODE_ONESHOT);
++              /*
++               * We might be in the middle of switching over from
++               * periodic to oneshot. If the CPU has not yet
++               * switched over, leave the device alone.
++               */
++              if (td->mode == TICKDEV_MODE_ONESHOT) {
++                      clockevents_set_mode(td->evtdev,
++                                           CLOCK_EVT_MODE_ONESHOT);
++              }
+       }
+ }