From 67062f373487a5cad7f92d63e2c556963db402bf Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 22 Jul 2013 13:22:33 -0700 Subject: [PATCH] 3.4-stable patches 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 --- ...t5000-fix-sgtl5000_pll_frac_div_mask.patch | 32 +++++++ ...tch-for-intel-coleto-creek-deviceids.patch | 30 +++++++ ...do-not-assign-noise-for-null-caldata.patch | 33 +++++++ ...-data-journal-fast-mount-umount-hang.patch | 49 +++++++++++ ...rst-for-all-simg-7x-port-multipliers.patch | 87 +++++++++++++++++++ ...power-values-from-the-correct-offset.patch | 69 +++++++++++++++ queue-3.4/series | 7 ++ ...-uncontrolled-switch-to-oneshot-mode.patch | 84 ++++++++++++++++++ 8 files changed, 391 insertions(+) create mode 100644 queue-3.4/asoc-sglt5000-fix-sgtl5000_pll_frac_div_mask.patch create mode 100644 queue-3.4/ata_piix-ide-mode-sata-patch-for-intel-coleto-creek-deviceids.patch create mode 100644 queue-3.4/ath9k-do-not-assign-noise-for-null-caldata.patch create mode 100644 queue-3.4/ext3-fix-data-journal-fast-mount-umount-hang.patch create mode 100644 queue-3.4/libata-skip-srst-for-all-simg-7x-port-multipliers.patch create mode 100644 queue-3.4/rt2x00-read-5ghz-tx-power-values-from-the-correct-offset.patch create mode 100644 queue-3.4/series create mode 100644 queue-3.4/tick-prevent-uncontrolled-switch-to-oneshot-mode.patch 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 index 00000000000..acdd77bb643 --- /dev/null +++ b/queue-3.4/asoc-sglt5000-fix-sgtl5000_pll_frac_div_mask.patch @@ -0,0 +1,32 @@ +From 5c78dfe87ea04b501ee000a7f03b9432ac9d008c Mon Sep 17 00:00:00 2001 +From: Fabio Estevam +Date: Thu, 4 Jul 2013 20:01:03 -0300 +Subject: ASoC: sglt5000: Fix SGTL5000_PLL_FRAC_DIV_MASK + +From: Fabio Estevam + +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 +Signed-off-by: Fabio Estevam +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..4b84764b437 --- /dev/null +++ b/queue-3.4/ata_piix-ide-mode-sata-patch-for-intel-coleto-creek-deviceids.patch @@ -0,0 +1,30 @@ +From c7e8695bfa0611b39493a9dfe8bab9f63f9809bd Mon Sep 17 00:00:00 2001 +From: Seth Heasley +Date: Wed, 19 Jun 2013 16:25:37 -0700 +Subject: ata_piix: IDE-mode SATA patch for Intel Coleto Creek DeviceIDs + +From: Seth Heasley + +commit c7e8695bfa0611b39493a9dfe8bab9f63f9809bd upstream. + +This patch adds the IDE-mode SATA DeviceIDs for the Intel Coleto Creek PCH. + +Signed-off-by: Seth Heasley +Signed-off-by: Tejun Heo +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..08c4b9f7fc8 --- /dev/null +++ b/queue-3.4/ath9k-do-not-assign-noise-for-null-caldata.patch @@ -0,0 +1,33 @@ +From d3bcb7b24bbf09fde8405770e676fe0c11c79662 Mon Sep 17 00:00:00 2001 +From: Sujith Manoharan +Date: Mon, 10 Jun 2013 13:49:40 +0530 +Subject: ath9k: Do not assign noise for NULL caldata + +From: Sujith Manoharan + +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 +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..9775f9cee46 --- /dev/null +++ b/queue-3.4/ext3-fix-data-journal-fast-mount-umount-hang.patch @@ -0,0 +1,49 @@ +From e643692138cfa33528f054b071ba2583509bb217 Mon Sep 17 00:00:00 2001 +From: Jan Kara +Date: Wed, 20 Mar 2013 14:39:05 +0100 +Subject: ext3: fix data=journal fast mount/umount hang + +From: Jan Kara + +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 +Cc: Benjamin LaHaise +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..14e0ce8917f --- /dev/null +++ b/queue-3.4/libata-skip-srst-for-all-simg-7x-port-multipliers.patch @@ -0,0 +1,87 @@ +From 7a87718d92760fc688628ad6a430643dafa16f1f Mon Sep 17 00:00:00 2001 +From: Tejun Heo +Date: Tue, 11 Jun 2013 00:11:36 -0700 +Subject: libata: skip SRST for all SIMG [34]7x port-multipliers + +From: Tejun Heo + +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 +Reported-by: "H. Peter Anvin" +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..038e32942b3 --- /dev/null +++ b/queue-3.4/rt2x00-read-5ghz-tx-power-values-from-the-correct-offset.patch @@ -0,0 +1,69 @@ +From 0a6f3a8ebaf13407523c2c7d575b4ca2debd23ba Mon Sep 17 00:00:00 2001 +From: Gabor Juhos +Date: Sat, 22 Jun 2013 13:13:25 +0200 +Subject: rt2x00: read 5GHz TX power values from the correct offset + +From: Gabor Juhos + +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 +Acked-by: Stanislaw Gruszka +Acked-by: Gertjan van Wingerde +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..c641f209278 --- /dev/null +++ b/queue-3.4/series @@ -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 index 00000000000..2a6bd2c5bf9 --- /dev/null +++ b/queue-3.4/tick-prevent-uncontrolled-switch-to-oneshot-mode.patch @@ -0,0 +1,84 @@ +From 1f73a9806bdd07a5106409bbcab3884078bd34fe Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner +Date: Mon, 1 Jul 2013 22:14:10 +0200 +Subject: tick: Prevent uncontrolled switch to oneshot mode + +From: Thomas Gleixner + +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 +Reviewed-by: Stephen Boyd +Cc: John Stultz , +Cc: Mark Rutland +Link: http://lkml.kernel.org/r/alpine.DEB.2.02.1307012153060.4013@ionos.tec.linutronix.de +Signed-off-by: Thomas Gleixner +Signed-off-by: Greg Kroah-Hartman + +--- + 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); ++ } + } + } + -- 2.47.3