From 29c69f658a6da3ebca367af19c41cb9176e66a72 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 17 Oct 2015 12:19:20 -0700 Subject: [PATCH] 3.10-stable patches added patches: alsa-synth-fix-conflicting-oss-device-registration-on-awe32.patch asoc-dwc-correct-irq-clear-method.patch asoc-fix-broken-pxa-soc-support.patch btrfs-skip-waiting-on-ordered-range-for-special-files.patch staging-comedi-adl_pci7x3x-fix-digital-output-on-pci-7230.patch --- ...ing-oss-device-registration-on-awe32.patch | 43 ++++++++++ .../asoc-dwc-correct-irq-clear-method.patch | 35 ++++++++ .../asoc-fix-broken-pxa-soc-support.patch | 82 +++++++++++++++++++ ...g-on-ordered-range-for-special-files.patch | 49 +++++++++++ queue-3.10/series | 5 ++ ...i7x3x-fix-digital-output-on-pci-7230.patch | 58 +++++++++++++ 6 files changed, 272 insertions(+) create mode 100644 queue-3.10/alsa-synth-fix-conflicting-oss-device-registration-on-awe32.patch create mode 100644 queue-3.10/asoc-dwc-correct-irq-clear-method.patch create mode 100644 queue-3.10/asoc-fix-broken-pxa-soc-support.patch create mode 100644 queue-3.10/btrfs-skip-waiting-on-ordered-range-for-special-files.patch create mode 100644 queue-3.10/staging-comedi-adl_pci7x3x-fix-digital-output-on-pci-7230.patch diff --git a/queue-3.10/alsa-synth-fix-conflicting-oss-device-registration-on-awe32.patch b/queue-3.10/alsa-synth-fix-conflicting-oss-device-registration-on-awe32.patch new file mode 100644 index 00000000000..7dbf8ad7c7c --- /dev/null +++ b/queue-3.10/alsa-synth-fix-conflicting-oss-device-registration-on-awe32.patch @@ -0,0 +1,43 @@ +From 225db5762dc1a35b26850477ffa06e5cd0097243 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 5 Oct 2015 16:55:09 +0200 +Subject: ALSA: synth: Fix conflicting OSS device registration on AWE32 + +From: Takashi Iwai + +commit 225db5762dc1a35b26850477ffa06e5cd0097243 upstream. + +When OSS emulation is loaded on ISA SB AWE32 chip, we get now kernel +warnings like: + WARNING: CPU: 0 PID: 2791 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x51/0x80() + sysfs: cannot create duplicate filename '/devices/isa/sbawe.0/sound/card0/seq-oss-0-0' + +It's because both emux synth and opl3 drivers try to register their +OSS device object with the same static index number 0. This hasn't +been a big problem until the recent rewrite of device management code +(that exposes sysfs at the same time), but it's been an obvious bug. + +This patch works around it just by using a different index number of +emux synth object. There can be a more elegant way to fix, but it's +enough for now, as this code won't be touched so often, in anyway. + +Reported-and-tested-by: Michael Shell +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/synth/emux/emux_oss.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/sound/synth/emux/emux_oss.c ++++ b/sound/synth/emux/emux_oss.c +@@ -69,7 +69,8 @@ snd_emux_init_seq_oss(struct snd_emux *e + struct snd_seq_oss_reg *arg; + struct snd_seq_device *dev; + +- if (snd_seq_device_new(emu->card, 0, SNDRV_SEQ_DEV_ID_OSS, ++ /* using device#1 here for avoiding conflicts with OPL3 */ ++ if (snd_seq_device_new(emu->card, 1, SNDRV_SEQ_DEV_ID_OSS, + sizeof(struct snd_seq_oss_reg), &dev) < 0) + return; + diff --git a/queue-3.10/asoc-dwc-correct-irq-clear-method.patch b/queue-3.10/asoc-dwc-correct-irq-clear-method.patch new file mode 100644 index 00000000000..6311c28c99a --- /dev/null +++ b/queue-3.10/asoc-dwc-correct-irq-clear-method.patch @@ -0,0 +1,35 @@ +From 4873867e5f2bd90faad861dd94865099fc3140f3 Mon Sep 17 00:00:00 2001 +From: Yitian Bu +Date: Fri, 2 Oct 2015 15:18:41 +0800 +Subject: ASoC: dwc: correct irq clear method + +From: Yitian Bu + +commit 4873867e5f2bd90faad861dd94865099fc3140f3 upstream. + +from Designware I2S datasheet, tx/rx XRUN irq is cleared by +reading register TOR/ROR, rather than by writing into them. + +Signed-off-by: Yitian Bu +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/dwc/designware_i2s.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/sound/soc/dwc/designware_i2s.c ++++ b/sound/soc/dwc/designware_i2s.c +@@ -100,10 +100,10 @@ static inline void i2s_clear_irqs(struct + + if (stream == SNDRV_PCM_STREAM_PLAYBACK) { + for (i = 0; i < 4; i++) +- i2s_write_reg(dev->i2s_base, TOR(i), 0); ++ i2s_read_reg(dev->i2s_base, TOR(i)); + } else { + for (i = 0; i < 4; i++) +- i2s_write_reg(dev->i2s_base, ROR(i), 0); ++ i2s_read_reg(dev->i2s_base, ROR(i)); + } + } + diff --git a/queue-3.10/asoc-fix-broken-pxa-soc-support.patch b/queue-3.10/asoc-fix-broken-pxa-soc-support.patch new file mode 100644 index 00000000000..db189298fa4 --- /dev/null +++ b/queue-3.10/asoc-fix-broken-pxa-soc-support.patch @@ -0,0 +1,82 @@ +From 3c8f7710c1c44fb650bc29b6ef78ed8b60cfaa28 Mon Sep 17 00:00:00 2001 +From: Robert Jarzmik +Date: Tue, 15 Sep 2015 20:51:31 +0200 +Subject: ASoC: fix broken pxa SoC support + +From: Robert Jarzmik + +commit 3c8f7710c1c44fb650bc29b6ef78ed8b60cfaa28 upstream. + +The previous fix of pxa library support, which was introduced to fix the +library dependency, broke the previous SoC behavior, where a machine +code binding pxa2xx-ac97 with a coded relied on : + - sound/soc/pxa/pxa2xx-ac97.c + - sound/soc/codecs/XXX.c + +For example, the mioa701_wm9713.c machine code is currently broken. The +"select ARM" statement wrongly selects the soc/arm/pxa2xx-ac97 for +compilation, as per an unfortunate fate SND_PXA2XX_AC97 is both declared +in sound/arm/Kconfig and sound/soc/pxa/Kconfig. + +Fix this by ensuring that SND_PXA2XX_SOC correctly triggers the correct +pxa2xx-ac97 compilation. + +Fixes: 846172dfe33c ("ASoC: fix SND_PXA2XX_LIB Kconfig warning") +Signed-off-by: Robert Jarzmik +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + sound/arm/Kconfig | 15 ++++++++------- + sound/soc/pxa/Kconfig | 2 -- + 2 files changed, 8 insertions(+), 9 deletions(-) + +--- a/sound/arm/Kconfig ++++ b/sound/arm/Kconfig +@@ -9,6 +9,14 @@ menuconfig SND_ARM + Drivers that are implemented on ASoC can be found in + "ALSA for SoC audio support" section. + ++config SND_PXA2XX_LIB ++ tristate ++ select SND_AC97_CODEC if SND_PXA2XX_LIB_AC97 ++ select SND_DMAENGINE_PCM ++ ++config SND_PXA2XX_LIB_AC97 ++ bool ++ + if SND_ARM + + config SND_ARMAACI +@@ -21,13 +29,6 @@ config SND_PXA2XX_PCM + tristate + select SND_PCM + +-config SND_PXA2XX_LIB +- tristate +- select SND_AC97_CODEC if SND_PXA2XX_LIB_AC97 +- +-config SND_PXA2XX_LIB_AC97 +- bool +- + config SND_PXA2XX_AC97 + tristate "AC97 driver for the Intel PXA2xx chip" + depends on ARCH_PXA +--- a/sound/soc/pxa/Kconfig ++++ b/sound/soc/pxa/Kconfig +@@ -1,7 +1,6 @@ + config SND_PXA2XX_SOC + tristate "SoC Audio for the Intel PXA2xx chip" + depends on ARCH_PXA +- select SND_ARM + select SND_PXA2XX_LIB + help + Say Y or M if you want to add support for codecs attached to +@@ -24,7 +23,6 @@ config SND_PXA2XX_AC97 + config SND_PXA2XX_SOC_AC97 + tristate + select AC97_BUS +- select SND_ARM + select SND_PXA2XX_LIB_AC97 + select SND_SOC_AC97_BUS + diff --git a/queue-3.10/btrfs-skip-waiting-on-ordered-range-for-special-files.patch b/queue-3.10/btrfs-skip-waiting-on-ordered-range-for-special-files.patch new file mode 100644 index 00000000000..e28fe983c56 --- /dev/null +++ b/queue-3.10/btrfs-skip-waiting-on-ordered-range-for-special-files.patch @@ -0,0 +1,49 @@ +From a30e577c96f59b1e1678ea5462432b09bf7d5cbc Mon Sep 17 00:00:00 2001 +From: Jeff Mahoney +Date: Fri, 11 Sep 2015 21:44:17 -0400 +Subject: btrfs: skip waiting on ordered range for special files + +From: Jeff Mahoney + +commit a30e577c96f59b1e1678ea5462432b09bf7d5cbc upstream. + +In btrfs_evict_inode, we properly truncate the page cache for evicted +inodes but then we call btrfs_wait_ordered_range for every inode as well. +It's the right thing to do for regular files but results in incorrect +behavior for device inodes for block devices. + +filemap_fdatawrite_range gets called with inode->i_mapping which gets +resolved to the block device inode before getting passed to +wbc_attach_fdatawrite_inode and ultimately to inode_to_bdi. What happens +next depends on whether there's an open file handle associated with the +inode. If there is, we write to the block device, which is unexpected +behavior. If there isn't, we through normally and inode->i_data is used. +We can also end up racing against open/close which can result in crashes +when i_mapping points to a block device inode that has been closed. + +Since there can't be any page cache associated with special file inodes, +it's safe to skip the btrfs_wait_ordered_range call entirely and avoid +the problem. + +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=100911 +Tested-by: Christoph Biedl +Signed-off-by: Jeff Mahoney +Reviewed-by: Filipe Manana +Signed-off-by: Greg Kroah-Hartman + +--- + fs/btrfs/inode.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/fs/btrfs/inode.c ++++ b/fs/btrfs/inode.c +@@ -4650,7 +4650,8 @@ void btrfs_evict_inode(struct inode *ino + goto no_delete; + } + /* do we really want it for ->i_nlink > 0 and zero btrfs_root_refs? */ +- btrfs_wait_ordered_range(inode, 0, (u64)-1); ++ if (!special_file(inode->i_mode)) ++ btrfs_wait_ordered_range(inode, 0, (u64)-1); + + if (root->fs_info->log_root_recovering) { + BUG_ON(test_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, diff --git a/queue-3.10/series b/queue-3.10/series index de5e7077b52..a7755c88f3c 100644 --- a/queue-3.10/series +++ b/queue-3.10/series @@ -10,3 +10,8 @@ x86-xen-support-kexec-kdump-in-hvm-guests-by-doing-a-soft-reset.patch spi-fix-documentation-of-spi_alloc_master.patch spi-spi-pxa2xx-check-status-register-to-determine-if-sssr_tint-is-disabled.patch mm-hugetlbfs-skip-shared-vmas-when-unmapping-private-pages-to-satisfy-a-fault.patch +alsa-synth-fix-conflicting-oss-device-registration-on-awe32.patch +asoc-fix-broken-pxa-soc-support.patch +asoc-dwc-correct-irq-clear-method.patch +btrfs-skip-waiting-on-ordered-range-for-special-files.patch +staging-comedi-adl_pci7x3x-fix-digital-output-on-pci-7230.patch diff --git a/queue-3.10/staging-comedi-adl_pci7x3x-fix-digital-output-on-pci-7230.patch b/queue-3.10/staging-comedi-adl_pci7x3x-fix-digital-output-on-pci-7230.patch new file mode 100644 index 00000000000..40c9dc49c0f --- /dev/null +++ b/queue-3.10/staging-comedi-adl_pci7x3x-fix-digital-output-on-pci-7230.patch @@ -0,0 +1,58 @@ +From ad83dbd974feb2e2a8cc071a1d28782bd4d2c70e Mon Sep 17 00:00:00 2001 +From: Ian Abbott +Date: Tue, 11 Aug 2015 13:05:10 +0100 +Subject: staging: comedi: adl_pci7x3x: fix digital output on PCI-7230 + +From: Ian Abbott + +commit ad83dbd974feb2e2a8cc071a1d28782bd4d2c70e upstream. + +The "adl_pci7x3x" driver replaced the "adl_pci7230" and "adl_pci7432" +drivers in commits 8f567c373c4b ("staging: comedi: new adl_pci7x3x +driver") and 657f77d173d3 ("staging: comedi: remove adl_pci7230 and +adl_pci7432 drivers"). Although the new driver code agrees with the +user manuals for the respective boards, digital outputs stopped working +on the PCI-7230. This has 16 digital output channels and the previous +adl_pci7230 driver shifted the 16 bit output state left by 16 bits +before writing to the hardware register. The new adl_pci7x3x driver +doesn't do that. Fix it in `adl_pci7x3x_do_insn_bits()` by checking +for the special case of the subdevice having only 16 channels and +duplicating the 16 bit output state into both halves of the 32-bit +register. That should work both for what the board actually does and +for what the user manual says it should do. + +Fixes: 8f567c373c4b ("staging: comedi: new adl_pci7x3x driver") +Signed-off-by: Ian Abbott +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/staging/comedi/drivers/adl_pci7x3x.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +--- a/drivers/staging/comedi/drivers/adl_pci7x3x.c ++++ b/drivers/staging/comedi/drivers/adl_pci7x3x.c +@@ -119,10 +119,21 @@ static int adl_pci7x3x_do_insn_bits(stru + unsigned int bits = data[1]; + + if (mask) { ++ unsigned int val; ++ + s->state &= ~mask; + s->state |= (bits & mask); +- +- outl(s->state, dev->iobase + reg); ++ val = s->state; ++ if (s->n_chan == 16) { ++ /* ++ * It seems the PCI-7230 needs the 16-bit DO state ++ * to be shifted left by 16 bits before being written ++ * to the 32-bit register. Set the value in both ++ * halves of the register to be sure. ++ */ ++ val |= val << 16; ++ } ++ outl(val, dev->iobase + reg); + } + + /* -- 2.47.3