Hello community, here is the log from the commit of package kernel-source for openSUSE:Factory checked in at 2016-03-29 09:54:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kernel-source (Old) and /work/SRC/openSUSE:Factory/.kernel-source.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kernel-source" Changes: -------- --- /work/SRC/openSUSE:Factory/kernel-source/kernel-debug.changes 2016-03-17 16:49:40.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.kernel-source.new/kernel-debug.changes 2016-03-29 09:54:53.000000000 +0200 @@ -1,0 +2,38 @@ +Fri Mar 18 21:35:24 CET 2016 - ti...@suse.de + +- ALSA: hda - Fix spurious kernel WARNING on Baytrail HDMI + (boo#971737). +- ALSA: hda - Fix forgotten HDMI monitor_present update + (boo#971737). +- ALSA: hda - Really restrict i915 notifier to HSW+ (boo#971737). +- commit 9ebd8b6 + +------------------------------------------------------------------- +Fri Mar 18 16:21:45 CET 2016 - h...@suse.de + +- Update config files: Enable CONFIG_BLK_DEV_NVME_SCSI (bsc#965497) +- commit 766f032 + +------------------------------------------------------------------- +Fri Mar 18 13:33:44 CET 2016 - jsl...@suse.cz + +- net: irda: Fix use-after-free in irtty_open() (bnc#967903). +- commit ff61c16 + +------------------------------------------------------------------- +Fri Mar 18 10:45:00 CET 2016 - ti...@suse.de + +- ALSA: hda - Limit i915 HDMI binding only for HSW and later + (boo#971737). +- ALSA: hda - Don't handle ELD notify from invalid port + (boo#971737). +- commit a6b682e + +------------------------------------------------------------------- +Thu Mar 17 11:37:09 CET 2016 - ti...@suse.de + +- ALSA: hda - Fix unexpected resume through regmap code path + (bsc#969383). +- commit 56796b8 + +------------------------------------------------------------------- kernel-default.changes: same change kernel-docs.changes: same change kernel-lpae.changes: same change kernel-obs-build.changes: same change kernel-obs-qa.changes: same change kernel-pae.changes: same change kernel-source.changes: same change kernel-syms.changes: same change kernel-vanilla.changes: same change ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kernel-debug.spec ++++++ --- /var/tmp/diff_new_pack.IgI7NJ/_old 2016-03-29 09:54:58.000000000 +0200 +++ /var/tmp/diff_new_pack.IgI7NJ/_new 2016-03-29 09:54:58.000000000 +0200 @@ -63,7 +63,7 @@ Group: System/Kernel Version: 4.5.0 %if 0%{?is_kotd} -Release: <RELEASE>.gb2c9ae5 +Release: <RELEASE>.gece3ff2 %else Release: 0 %endif kernel-default.spec: same change ++++++ kernel-docs.spec ++++++ --- /var/tmp/diff_new_pack.IgI7NJ/_old 2016-03-29 09:54:58.000000000 +0200 +++ /var/tmp/diff_new_pack.IgI7NJ/_new 2016-03-29 09:54:58.000000000 +0200 @@ -29,7 +29,7 @@ Group: Documentation/Man Version: 4.5.0 %if 0%{?is_kotd} -Release: <RELEASE>.gb2c9ae5 +Release: <RELEASE>.gece3ff2 %else Release: 0 %endif ++++++ kernel-lpae.spec ++++++ --- /var/tmp/diff_new_pack.IgI7NJ/_old 2016-03-29 09:54:58.000000000 +0200 +++ /var/tmp/diff_new_pack.IgI7NJ/_new 2016-03-29 09:54:58.000000000 +0200 @@ -63,7 +63,7 @@ Group: System/Kernel Version: 4.5.0 %if 0%{?is_kotd} -Release: <RELEASE>.gb2c9ae5 +Release: <RELEASE>.gece3ff2 %else Release: 0 %endif ++++++ kernel-obs-build.spec ++++++ --- /var/tmp/diff_new_pack.IgI7NJ/_old 2016-03-29 09:54:58.000000000 +0200 +++ /var/tmp/diff_new_pack.IgI7NJ/_new 2016-03-29 09:54:58.000000000 +0200 @@ -53,7 +53,7 @@ Group: SLES Version: 4.5.0 %if 0%{?is_kotd} -Release: <RELEASE>.gb2c9ae5 +Release: <RELEASE>.gece3ff2 %else Release: 0 %endif kernel-obs-qa.spec: same change ++++++ kernel-pae.spec ++++++ --- /var/tmp/diff_new_pack.IgI7NJ/_old 2016-03-29 09:54:58.000000000 +0200 +++ /var/tmp/diff_new_pack.IgI7NJ/_new 2016-03-29 09:54:58.000000000 +0200 @@ -63,7 +63,7 @@ Group: System/Kernel Version: 4.5.0 %if 0%{?is_kotd} -Release: <RELEASE>.gb2c9ae5 +Release: <RELEASE>.gece3ff2 %else Release: 0 %endif ++++++ kernel-source.spec ++++++ --- /var/tmp/diff_new_pack.IgI7NJ/_old 2016-03-29 09:54:58.000000000 +0200 +++ /var/tmp/diff_new_pack.IgI7NJ/_new 2016-03-29 09:54:58.000000000 +0200 @@ -32,7 +32,7 @@ Group: Development/Sources Version: 4.5.0 %if 0%{?is_kotd} -Release: <RELEASE>.gb2c9ae5 +Release: <RELEASE>.gece3ff2 %else Release: 0 %endif ++++++ kernel-syms.spec ++++++ --- /var/tmp/diff_new_pack.IgI7NJ/_old 2016-03-29 09:54:58.000000000 +0200 +++ /var/tmp/diff_new_pack.IgI7NJ/_new 2016-03-29 09:54:58.000000000 +0200 @@ -27,7 +27,7 @@ Version: 4.5.0 %if %using_buildservice %if 0%{?is_kotd} -Release: <RELEASE>.gb2c9ae5 +Release: <RELEASE>.gece3ff2 %else Release: 0 %endif ++++++ kernel-vanilla.spec ++++++ --- /var/tmp/diff_new_pack.IgI7NJ/_old 2016-03-29 09:54:58.000000000 +0200 +++ /var/tmp/diff_new_pack.IgI7NJ/_new 2016-03-29 09:54:58.000000000 +0200 @@ -63,7 +63,7 @@ Group: System/Kernel Version: 4.5.0 %if 0%{?is_kotd} -Release: <RELEASE>.gb2c9ae5 +Release: <RELEASE>.gece3ff2 %else Release: 0 %endif ++++++ config.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/arm64/default new/config/arm64/default --- old/config/arm64/default 2016-03-14 06:14:55.000000000 +0100 +++ new/config/arm64/default 2016-03-18 16:23:56.000000000 +0100 @@ -1733,7 +1733,7 @@ CONFIG_BLK_DEV_RBD=m CONFIG_BLK_DEV_RSXX=m CONFIG_BLK_DEV_NVME=m -# CONFIG_BLK_DEV_NVME_SCSI is not set +CONFIG_BLK_DEV_NVME_SCSI=y # # Misc devices diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/debug new/config/ppc64/debug --- old/config/ppc64/debug 2016-03-14 06:14:55.000000000 +0100 +++ new/config/ppc64/debug 2016-03-18 16:23:56.000000000 +0100 @@ -1636,7 +1636,7 @@ CONFIG_BLK_DEV_RBD=m CONFIG_BLK_DEV_RSXX=m CONFIG_BLK_DEV_NVME=m -# CONFIG_BLK_DEV_NVME_SCSI is not set +CONFIG_BLK_DEV_NVME_SCSI=y # # Misc devices diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/default new/config/ppc64/default --- old/config/ppc64/default 2016-03-14 06:14:55.000000000 +0100 +++ new/config/ppc64/default 2016-03-18 16:23:56.000000000 +0100 @@ -1625,7 +1625,7 @@ CONFIG_BLK_DEV_RBD=m CONFIG_BLK_DEV_RSXX=m CONFIG_BLK_DEV_NVME=m -# CONFIG_BLK_DEV_NVME_SCSI is not set +CONFIG_BLK_DEV_NVME_SCSI=y # # Misc devices diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64le/debug new/config/ppc64le/debug --- old/config/ppc64le/debug 2016-03-14 06:14:55.000000000 +0100 +++ new/config/ppc64le/debug 2016-03-18 16:23:56.000000000 +0100 @@ -1544,7 +1544,7 @@ CONFIG_BLK_DEV_RBD=m CONFIG_BLK_DEV_RSXX=m CONFIG_BLK_DEV_NVME=m -# CONFIG_BLK_DEV_NVME_SCSI is not set +CONFIG_BLK_DEV_NVME_SCSI=y # # Misc devices diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64le/default new/config/ppc64le/default --- old/config/ppc64le/default 2016-03-14 06:14:55.000000000 +0100 +++ new/config/ppc64le/default 2016-03-18 16:23:56.000000000 +0100 @@ -1533,7 +1533,7 @@ CONFIG_BLK_DEV_RBD=m CONFIG_BLK_DEV_RSXX=m CONFIG_BLK_DEV_NVME=m -# CONFIG_BLK_DEV_NVME_SCSI is not set +CONFIG_BLK_DEV_NVME_SCSI=y # # Misc devices diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/s390x/default new/config/s390x/default --- old/config/s390x/default 2016-03-14 06:14:55.000000000 +0100 +++ new/config/s390x/default 2016-03-18 16:23:56.000000000 +0100 @@ -1234,7 +1234,7 @@ CONFIG_BLK_DEV_RBD=m # CONFIG_BLK_DEV_RSXX is not set CONFIG_BLK_DEV_NVME=m -# CONFIG_BLK_DEV_NVME_SCSI is not set +CONFIG_BLK_DEV_NVME_SCSI=y # # Misc devices diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/debug new/config/x86_64/debug --- old/config/x86_64/debug 2016-03-14 06:14:55.000000000 +0100 +++ new/config/x86_64/debug 2016-03-18 16:23:56.000000000 +0100 @@ -1997,7 +1997,7 @@ CONFIG_BLK_DEV_RBD=m CONFIG_BLK_DEV_RSXX=m CONFIG_BLK_DEV_NVME=m -# CONFIG_BLK_DEV_NVME_SCSI is not set +CONFIG_BLK_DEV_NVME_SCSI=y # # Misc devices diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/default new/config/x86_64/default --- old/config/x86_64/default 2016-03-14 06:14:55.000000000 +0100 +++ new/config/x86_64/default 2016-03-18 16:23:56.000000000 +0100 @@ -1983,7 +1983,7 @@ CONFIG_BLK_DEV_RBD=m CONFIG_BLK_DEV_RSXX=m CONFIG_BLK_DEV_NVME=m -# CONFIG_BLK_DEV_NVME_SCSI is not set +CONFIG_BLK_DEV_NVME_SCSI=y # # Misc devices ++++++ patches.drivers.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/ALSA-hda-Don-t-handle-ELD-notify-from-invalid-port new/patches.drivers/ALSA-hda-Don-t-handle-ELD-notify-from-invalid-port --- old/patches.drivers/ALSA-hda-Don-t-handle-ELD-notify-from-invalid-port 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/ALSA-hda-Don-t-handle-ELD-notify-from-invalid-port 2016-03-18 21:35:29.000000000 +0100 @@ -0,0 +1,39 @@ +From 4f8e4f3537cafc4de128e6bfdf83baa78bc60eb1 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <ti...@suse.de> +Date: Thu, 10 Mar 2016 12:02:49 +0100 +Subject: [PATCH] ALSA: hda - Don't handle ELD notify from invalid port +Patch-mainline: Queued in subsystem maintainer repository +Git-commit: 4f8e4f3537cafc4de128e6bfdf83baa78bc60eb1 +Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +References: boo#971737 + +The current Intel HDMI codec driver supports only three fixed ports +from port B to port D. However, i915 driver may assign a DP on other +ports, e.g. port A, when no eDP is used. This incompatibility is +caught later at pin_nid_to_pin_index() and results in a warning +message like "HDMI: pin nid 4 not registered" at each time. + +This patch filters out such invalid events beforehand, so that the +kernel won't be too grumbling. + +Reported-by: Stefan Assmann <sassm...@kpanic.de> +Cc: <sta...@vger.kernel.org> +Signed-off-by: Takashi Iwai <ti...@suse.de> + +--- + sound/pci/hda/patch_hdmi.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/sound/pci/hda/patch_hdmi.c ++++ b/sound/pci/hda/patch_hdmi.c +@@ -2432,6 +2432,10 @@ static void intel_pin_eld_notify(void *a + struct hda_codec *codec = audio_ptr; + int pin_nid = port + 0x04; + ++ /* we assume only from port-B to port-D */ ++ if (port < 1 || port > 3) ++ return; ++ + /* skip notification during system suspend (but not in runtime PM); + * the state will be updated at resume + */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/ALSA-hda-Fix-forgotten-HDMI-monitor_present-update new/patches.drivers/ALSA-hda-Fix-forgotten-HDMI-monitor_present-update --- old/patches.drivers/ALSA-hda-Fix-forgotten-HDMI-monitor_present-update 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/ALSA-hda-Fix-forgotten-HDMI-monitor_present-update 2016-03-18 21:35:29.000000000 +0100 @@ -0,0 +1,31 @@ +From bd48128539ab89986b24ad08ecd3e027dd1993a1 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <ti...@suse.de> +Date: Fri, 18 Mar 2016 18:01:53 +0100 +Subject: [PATCH] ALSA: hda - Fix forgotten HDMI monitor_present update +Patch-mainline: Queued in subsystem maintainer repository +Git-commit: bd48128539ab89986b24ad08ecd3e027dd1993a1 +Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +References: boo#971737 + +We forgot to copy monitor_present value when updating the ELD +information. This won't change the ELD retrieval and the jack +notification behavior, but appears only in the proc output. In that +sense, it's no fatal error, but a bug is a bug is a bug. + +Cc: <sta...@vger.kernel.org> +Signed-off-by: Takashi Iwai <ti...@suse.de> + +--- + sound/pci/hda/patch_hdmi.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_hdmi.c ++++ b/sound/pci/hda/patch_hdmi.c +@@ -1566,6 +1566,7 @@ static void update_eld(struct hda_codec + eld->eld_size) != 0) + eld_changed = true; + ++ pin_eld->monitor_present = eld->monitor_present; + pin_eld->eld_valid = eld->eld_valid; + pin_eld->eld_size = eld->eld_size; + if (eld->eld_valid) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/ALSA-hda-Fix-spurious-kernel-WARNING-on-Baytrail-HDM new/patches.drivers/ALSA-hda-Fix-spurious-kernel-WARNING-on-Baytrail-HDM --- old/patches.drivers/ALSA-hda-Fix-spurious-kernel-WARNING-on-Baytrail-HDM 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/ALSA-hda-Fix-spurious-kernel-WARNING-on-Baytrail-HDM 2016-03-18 21:35:29.000000000 +0100 @@ -0,0 +1,44 @@ +From 93a9ff151754fbdf951b1b993bcf96453f6e36b3 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <ti...@suse.de> +Date: Fri, 18 Mar 2016 19:45:13 +0100 +Subject: [PATCH] ALSA: hda - Fix spurious kernel WARNING on Baytrail HDMI +Patch-mainline: Queued in subsystem maintainer repository +Git-commit: 93a9ff151754fbdf951b1b993bcf96453f6e36b3 +Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +References: boo#971737 +Mime-version: 1.0 +Content-type: text/plain; charset=UTF-8 +Content-transfer-encoding: 8bit + +snd_hdac_sync_audio_rate() call is mandatory only for HSW and later +models, but we call the function unconditionally blindly assuming that +the function doesn't do anything harmful. But since recently, the +function checks the validity of the passed pin NID, and eventually +spews the warning if an unexpected pin is passed. This is seen on old +chips like Baytrail. + +The fix is to limit the call of this function again only for the chips +with the proper binding. This can be identified by the same flag as +the eld notifier. + +Reported-by: Ville Syrjälä <ville.syrj...@linux.intel.com> +Tested-by: Ville Syrjälä <ville.syrj...@linux.intel.com> +Cc: <sta...@vger.kernel.org> # v4.5 +Signed-off-by: Takashi Iwai <ti...@suse.de> + +--- + sound/pci/hda/patch_hdmi.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/sound/pci/hda/patch_hdmi.c ++++ b/sound/pci/hda/patch_hdmi.c +@@ -1878,7 +1878,8 @@ static int generic_hdmi_playback_pcm_pre + + /* Call sync_audio_rate to set the N/CTS/M manually if necessary */ + /* Todo: add DP1.2 MST audio support later */ +- snd_hdac_sync_audio_rate(&codec->bus->core, pin_nid, runtime->rate); ++ if (codec_has_acomp(codec)) ++ snd_hdac_sync_audio_rate(&codec->bus->core, pin_nid, runtime->rate); + + non_pcm = check_non_pcm_per_cvt(codec, cvt_nid); + mutex_lock(&per_pin->lock); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/ALSA-hda-Fix-unexpected-resume-through-regmap-code-p new/patches.drivers/ALSA-hda-Fix-unexpected-resume-through-regmap-code-p --- old/patches.drivers/ALSA-hda-Fix-unexpected-resume-through-regmap-code-p 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/ALSA-hda-Fix-unexpected-resume-through-regmap-code-p 2016-03-18 21:35:29.000000000 +0100 @@ -0,0 +1,205 @@ +From fc4f000bf8c0cbf38f44de6bd5e225574e572ed4 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <ti...@suse.de> +Date: Fri, 4 Mar 2016 11:34:18 +0100 +Subject: [PATCH] ALSA: hda - Fix unexpected resume through regmap code path +Git-commit: fc4f000bf8c0cbf38f44de6bd5e225574e572ed4 +Patch-mainline: Queued in subsystem maintainer repository +Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +References: bsc#969383 + +HD-audio driver has a mechanism to trigger the runtime resume +automatically at accessing the verbs. This auto-resume, however, +causes the mutex deadlock when invoked from the regmap handler since +the regmap keeps the mutex while auto-resuming. For avoiding that, +there is some tricky check in the HDA regmap handler to return -EAGAIN +error to back-off when the codec is powered down. Then the caller of +regmap r/w will retry after properly turning on the codec power. + +This works in most cases, but there seems a slight race between the +codec power check and the actual on-demand auto-resume trigger. This +resulted in the lockdep splat, eventually leading to a real deadlock. + +This patch tries to address the race window by getting the runtime PM +refcount at the check time using pm_runtime_get_if_in_use(). With +this call, we can keep the power on only when the codec has been +already turned on, and back off if not. + +For keeping the code consistency, the code touching the runtime PM is +stored in hdac_device.c although it's used only locally in +hdac_regmap.c. + +Reported-by: Jiri Slaby <jsl...@suse.cz> +Cc: <sta...@vger.kernel.org> +Signed-off-by: Takashi Iwai <ti...@suse.de> + +--- + include/sound/hdaudio.h | 2 + + sound/hda/hdac_device.c | 16 +++++++++++ + sound/hda/hdac_regmap.c | 69 ++++++++++++++++++++++++++++++++---------------- + 3 files changed, 64 insertions(+), 23 deletions(-) + +--- a/include/sound/hdaudio.h ++++ b/include/sound/hdaudio.h +@@ -168,11 +168,13 @@ int snd_hdac_power_up(struct hdac_device + int snd_hdac_power_down(struct hdac_device *codec); + int snd_hdac_power_up_pm(struct hdac_device *codec); + int snd_hdac_power_down_pm(struct hdac_device *codec); ++int snd_hdac_keep_power_up(struct hdac_device *codec); + #else + static inline int snd_hdac_power_up(struct hdac_device *codec) { return 0; } + static inline int snd_hdac_power_down(struct hdac_device *codec) { return 0; } + static inline int snd_hdac_power_up_pm(struct hdac_device *codec) { return 0; } + static inline int snd_hdac_power_down_pm(struct hdac_device *codec) { return 0; } ++static inline int snd_hdac_keep_power_up(struct hdac_device *codec) { return 0; } + #endif + + /* +--- a/sound/hda/hdac_device.c ++++ b/sound/hda/hdac_device.c +@@ -611,6 +611,22 @@ int snd_hdac_power_up_pm(struct hdac_dev + } + EXPORT_SYMBOL_GPL(snd_hdac_power_up_pm); + ++/* like snd_hdac_power_up_pm(), but only increment the pm count when ++ * already powered up. Returns -1 if not powered up, 1 if incremented ++ * or 0 if unchanged. Only used in hdac_regmap.c ++ */ ++int snd_hdac_keep_power_up(struct hdac_device *codec) ++{ ++ if (!atomic_inc_not_zero(&codec->in_pm)) { ++ int ret = pm_runtime_get_if_in_use(&codec->dev); ++ if (!ret) ++ return -1; ++ if (ret < 0) ++ return 0; ++ } ++ return 1; ++} ++ + /** + * snd_hdac_power_down_pm - power down the codec + * @codec: the codec object +--- a/sound/hda/hdac_regmap.c ++++ b/sound/hda/hdac_regmap.c +@@ -21,13 +21,16 @@ + #include <sound/hdaudio.h> + #include <sound/hda_regmap.h> + +-#ifdef CONFIG_PM +-#define codec_is_running(codec) \ +- (atomic_read(&(codec)->in_pm) || \ +- !pm_runtime_suspended(&(codec)->dev)) +-#else +-#define codec_is_running(codec) true +-#endif ++static int codec_pm_lock(struct hdac_device *codec) ++{ ++ return snd_hdac_keep_power_up(codec); ++} ++ ++static void codec_pm_unlock(struct hdac_device *codec, int lock) ++{ ++ if (lock == 1) ++ snd_hdac_power_down_pm(codec); ++} + + #define get_verb(reg) (((reg) >> 8) & 0xfff) + +@@ -238,20 +241,28 @@ static int hda_reg_read(void *context, u + struct hdac_device *codec = context; + int verb = get_verb(reg); + int err; ++ int pm_lock = 0; + +- if (!codec_is_running(codec) && verb != AC_VERB_GET_POWER_STATE) +- return -EAGAIN; ++ if (verb != AC_VERB_GET_POWER_STATE) { ++ pm_lock = codec_pm_lock(codec); ++ if (pm_lock < 0) ++ return -EAGAIN; ++ } + reg |= (codec->addr << 28); +- if (is_stereo_amp_verb(reg)) +- return hda_reg_read_stereo_amp(codec, reg, val); +- if (verb == AC_VERB_GET_PROC_COEF) +- return hda_reg_read_coef(codec, reg, val); ++ if (is_stereo_amp_verb(reg)) { ++ err = hda_reg_read_stereo_amp(codec, reg, val); ++ goto out; ++ } ++ if (verb == AC_VERB_GET_PROC_COEF) { ++ err = hda_reg_read_coef(codec, reg, val); ++ goto out; ++ } + if ((verb & 0x700) == AC_VERB_SET_AMP_GAIN_MUTE) + reg &= ~AC_AMP_FAKE_MUTE; + + err = snd_hdac_exec_verb(codec, reg, 0, val); + if (err < 0) +- return err; ++ goto out; + /* special handling for asymmetric reads */ + if (verb == AC_VERB_GET_POWER_STATE) { + if (*val & AC_PWRST_ERROR) +@@ -259,7 +270,9 @@ static int hda_reg_read(void *context, u + else /* take only the actual state */ + *val = (*val >> 4) & 0x0f; + } +- return 0; ++ out: ++ codec_pm_unlock(codec, pm_lock); ++ return err; + } + + static int hda_reg_write(void *context, unsigned int reg, unsigned int val) +@@ -267,6 +280,7 @@ static int hda_reg_write(void *context, + struct hdac_device *codec = context; + unsigned int verb; + int i, bytes, err; ++ int pm_lock = 0; + + if (codec->caps_overwriting) + return 0; +@@ -275,14 +289,21 @@ static int hda_reg_write(void *context, + reg |= (codec->addr << 28); + verb = get_verb(reg); + +- if (!codec_is_running(codec) && verb != AC_VERB_SET_POWER_STATE) +- return codec->lazy_cache ? 0 : -EAGAIN; ++ if (verb != AC_VERB_SET_POWER_STATE) { ++ pm_lock = codec_pm_lock(codec); ++ if (pm_lock < 0) ++ return codec->lazy_cache ? 0 : -EAGAIN; ++ } + +- if (is_stereo_amp_verb(reg)) +- return hda_reg_write_stereo_amp(codec, reg, val); ++ if (is_stereo_amp_verb(reg)) { ++ err = hda_reg_write_stereo_amp(codec, reg, val); ++ goto out; ++ } + +- if (verb == AC_VERB_SET_PROC_COEF) +- return hda_reg_write_coef(codec, reg, val); ++ if (verb == AC_VERB_SET_PROC_COEF) { ++ err = hda_reg_write_coef(codec, reg, val); ++ goto out; ++ } + + switch (verb & 0xf00) { + case AC_VERB_SET_AMP_GAIN_MUTE: +@@ -319,10 +340,12 @@ static int hda_reg_write(void *context, + reg |= (verb + i) << 8 | ((val >> (8 * i)) & 0xff); + err = snd_hdac_exec_verb(codec, reg, 0, NULL); + if (err < 0) +- return err; ++ goto out; + } + +- return 0; ++ out: ++ codec_pm_unlock(codec, pm_lock); ++ return err; + } + + static const struct regmap_config hda_regmap_cfg = { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/ALSA-hda-Limit-i915-HDMI-binding-only-for-HSW-and-la new/patches.drivers/ALSA-hda-Limit-i915-HDMI-binding-only-for-HSW-and-la --- old/patches.drivers/ALSA-hda-Limit-i915-HDMI-binding-only-for-HSW-and-la 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/ALSA-hda-Limit-i915-HDMI-binding-only-for-HSW-and-la 2016-03-18 21:35:29.000000000 +0100 @@ -0,0 +1,43 @@ +From b62232d429fa8b1dcf5d8503aa5a5397a03e646a Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <ti...@suse.de> +Date: Tue, 15 Mar 2016 18:15:26 +0100 +Subject: [PATCH] ALSA: hda - Limit i915 HDMI binding only for HSW and later +Patch-mainline: Queued in subsystem maintainer repository +Git-commit: b62232d429fa8b1dcf5d8503aa5a5397a03e646a +Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +References: boo#971737 +Mime-version: 1.0 +Content-type: text/plain; charset=UTF-8 +Content-transfer-encoding: 8bit + +It turned out that the pre-HSW Intel chips are incompatible with the +naive assumption we had -- the fixed mapping between the port and the +HD-audio widget. This may result in the bad access, as captured by +the recent patch to add a WARN_ON() for the port mapping check. + +As a quick workaround, disable the i915 audio component binding for +all pre-Haswell models. + +Reported-by: Ville Syrjälä <ville.syrj...@linux.intel.com> +Cc: <sta...@vger.kernel.org> # v4.5 +Signed-off-by: Takashi Iwai <ti...@suse.de> + +--- + sound/pci/hda/patch_hdmi.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/sound/pci/hda/patch_hdmi.c ++++ b/sound/pci/hda/patch_hdmi.c +@@ -2460,9 +2460,10 @@ static int patch_generic_hdmi(struct hda + codec->spec = spec; + hdmi_array_init(spec, 4); + +- /* Try to bind with i915 for any Intel codecs (if not done yet) */ ++ /* Try to bind with i915 for Intel HSW+ codecs (if not done yet) */ + if (!codec_has_acomp(codec) && +- (codec->core.vendor_id >> 16) == 0x8086) ++ (codec->core.vendor_id >> 16) == 0x8086 && ++ is_haswell_plus(codec)) + if (!snd_hdac_i915_init(&codec->bus->core)) + spec->i915_bound = true; + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/ALSA-hda-Really-restrict-i915-notifier-to-HSW new/patches.drivers/ALSA-hda-Really-restrict-i915-notifier-to-HSW --- old/patches.drivers/ALSA-hda-Really-restrict-i915-notifier-to-HSW 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/ALSA-hda-Really-restrict-i915-notifier-to-HSW 2016-03-18 21:35:29.000000000 +0100 @@ -0,0 +1,78 @@ +From 691be973c0621255abb31572a98e35c57be70212 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <ti...@suse.de> +Date: Fri, 18 Mar 2016 15:10:08 +0100 +Subject: [PATCH] ALSA: hda - Really restrict i915 notifier to HSW+ +Patch-mainline: Queued in subsystem maintainer repository +Git-commit: 691be973c0621255abb31572a98e35c57be70212 +Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +References: boo#971737 +Mime-version: 1.0 +Content-type: text/plain; charset=UTF-8 +Content-transfer-encoding: 8bit + +The commit [b62232d429fa: ALSA: hda - Limit i915 HDMI binding only for +HSW and later] tried to limit the usage of i915 audio notifier to the +recent Intel models and switch to the old method on pre-Haswell +models. However, it assumed that the i915 component binding hasn't +been done on such models, and the assumption was wrong: namely, +Baytrail had already the i915 component binding due to powerwell +control. Thus, the workaround wasn't applied to Baytrail. + +For fixing this properly, this patch introduces a new flag indicating +the usage of audio notifier and codec_has_acomp() refers to this flag +instead of checking the existence of audio component. + +Reported-by: Ville Syrjälä <ville.syrj...@linux.intel.com> +Cc: <sta...@vger.kernel.org> # v4.5 +Signed-off-by: Takashi Iwai <ti...@suse.de> + +--- + sound/pci/hda/patch_hdmi.c | 24 +++++++++++++++++------- + 1 file changed, 17 insertions(+), 7 deletions(-) + +--- a/sound/pci/hda/patch_hdmi.c ++++ b/sound/pci/hda/patch_hdmi.c +@@ -152,13 +152,17 @@ struct hdmi_spec { + struct hda_pcm_stream pcm_playback; + + /* i915/powerwell (Haswell+/Valleyview+) specific */ ++ bool use_acomp_notifier; /* use i915 eld_notify callback for hotplug */ + struct i915_audio_component_audio_ops i915_audio_ops; + bool i915_bound; /* was i915 bound in this driver? */ + }; + + #ifdef CONFIG_SND_HDA_I915 +-#define codec_has_acomp(codec) \ +- ((codec)->bus->core.audio_component != NULL) ++static inline bool codec_has_acomp(struct hda_codec *codec) ++{ ++ struct hdmi_spec *spec = codec->spec; ++ return spec->use_acomp_notifier; ++} + #else + #define codec_has_acomp(codec) false + #endif +@@ -2460,12 +2464,18 @@ static int patch_generic_hdmi(struct hda + codec->spec = spec; + hdmi_array_init(spec, 4); + ++#ifdef CONFIG_SND_HDA_I915 + /* Try to bind with i915 for Intel HSW+ codecs (if not done yet) */ +- if (!codec_has_acomp(codec) && +- (codec->core.vendor_id >> 16) == 0x8086 && +- is_haswell_plus(codec)) +- if (!snd_hdac_i915_init(&codec->bus->core)) +- spec->i915_bound = true; ++ if ((codec->core.vendor_id >> 16) == 0x8086 && ++ is_haswell_plus(codec)) { ++ if (!codec->bus->core.audio_component) ++ if (!snd_hdac_i915_init(&codec->bus->core)) ++ spec->i915_bound = true; ++ /* use i915 audio component notifier for hotplug */ ++ if (codec->bus->core.audio_component) ++ spec->use_acomp_notifier = true; ++ } ++#endif + + if (is_haswell_plus(codec)) { + intel_haswell_enable_all_pins(codec, true); ++++++ patches.fixes.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/net-irda-Fix-use-after-free-in-irtty_open.patch new/patches.fixes/net-irda-Fix-use-after-free-in-irtty_open.patch --- old/patches.fixes/net-irda-Fix-use-after-free-in-irtty_open.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/net-irda-Fix-use-after-free-in-irtty_open.patch 2016-03-18 13:33:44.000000000 +0100 @@ -0,0 +1,69 @@ +From: Peter Hurley <pe...@hurleysoftware.com> +Date: Sat, 9 Jan 2016 17:48:45 -0800 +Subject: net: irda: Fix use-after-free in irtty_open() +Patch-mainline: v4.6-rc1 +Git-commit: 401879c57f01cbf2da204ad2e8db910525c6dbea +References: bnc#967903 + +The N_IRDA line discipline may access the previous line discipline's closed +and already-fre private data on open [1]. + +The tty->disc_data field _never_ refers to valid data on entry to the +line discipline's open() method. Rather, the ldisc is expected to +initialize that field for its own use for the lifetime of the instance +(ie. from open() to close() only). + +[1] + ================================================================== + BUG: KASAN: use-after-free in irtty_open+0x422/0x550 at addr ffff8800331dd068 + Read of size 4 by task a.out/13960 + ============================================================================= + BUG kmalloc-512 (Tainted: G B ): kasan: bad access detected + ----------------------------------------------------------------------------- + ... + Call Trace: + [<ffffffff815fa2ae>] __asan_report_load4_noabort+0x3e/0x40 mm/kasan/report.c:279 + [<ffffffff836938a2>] irtty_open+0x422/0x550 drivers/net/irda/irtty-sir.c:436 + [<ffffffff829f1b80>] tty_ldisc_open.isra.2+0x60/0xa0 drivers/tty/tty_ldisc.c:447 + [<ffffffff829f21c0>] tty_set_ldisc+0x1a0/0x940 drivers/tty/tty_ldisc.c:567 + [< inline >] tiocsetd drivers/tty/tty_io.c:2650 + [<ffffffff829da49e>] tty_ioctl+0xace/0x1fd0 drivers/tty/tty_io.c:2883 + [< inline >] vfs_ioctl fs/ioctl.c:43 + [<ffffffff816708ac>] do_vfs_ioctl+0x57c/0xe60 fs/ioctl.c:607 + [< inline >] SYSC_ioctl fs/ioctl.c:622 + [<ffffffff81671204>] SyS_ioctl+0x74/0x80 fs/ioctl.c:613 + [<ffffffff852a7876>] entry_SYSCALL_64_fastpath+0x16/0x7a + +Reported-and-tested-by: Dmitry Vyukov <dvyu...@google.com> +Cc: <sta...@vger.kernel.org> +Signed-off-by: Peter Hurley <pe...@hurleysoftware.com> +Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org> +Signed-off-by: Jiri Slaby <jsl...@suse.cz> +--- + drivers/net/irda/irtty-sir.c | 10 ---------- + 1 file changed, 10 deletions(-) + +diff --git a/drivers/net/irda/irtty-sir.c b/drivers/net/irda/irtty-sir.c +index 696852eb23c3..7a3f990c1935 100644 +--- a/drivers/net/irda/irtty-sir.c ++++ b/drivers/net/irda/irtty-sir.c +@@ -430,16 +430,6 @@ static int irtty_open(struct tty_struct *tty) + + /* Module stuff handled via irda_ldisc.owner - Jean II */ + +- /* First make sure we're not already connected. */ +- if (tty->disc_data != NULL) { +- priv = tty->disc_data; +- if (priv && priv->magic == IRTTY_MAGIC) { +- ret = -EEXIST; +- goto out; +- } +- tty->disc_data = NULL; /* ### */ +- } +- + /* stop the underlying driver */ + irtty_stop_receiver(tty, TRUE); + if (tty->ops->stop) +-- +2.7.4 + ++++++ series.conf ++++++ --- /var/tmp/diff_new_pack.IgI7NJ/_old 2016-03-29 09:54:59.000000000 +0200 +++ /var/tmp/diff_new_pack.IgI7NJ/_new 2016-03-29 09:54:59.000000000 +0200 @@ -220,6 +220,7 @@ ######################################################## # Networking, IPv6 ######################################################## + patches.fixes/net-irda-Fix-use-after-free-in-irtty_open.patch ######################################################## # NFS @@ -373,6 +374,12 @@ ########################################################## patches.drivers/ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed patches.drivers/ALSA-usb-audio-Add-sanity-checks-for-endpoint-access + patches.drivers/ALSA-hda-Fix-unexpected-resume-through-regmap-code-p + patches.drivers/ALSA-hda-Don-t-handle-ELD-notify-from-invalid-port + patches.drivers/ALSA-hda-Limit-i915-HDMI-binding-only-for-HSW-and-la + patches.drivers/ALSA-hda-Really-restrict-i915-notifier-to-HSW + patches.drivers/ALSA-hda-Fix-forgotten-HDMI-monitor_present-update + patches.drivers/ALSA-hda-Fix-spurious-kernel-WARNING-on-Baytrail-HDM ######################################################## # Char / serial ++++++ source-timestamp ++++++ --- /var/tmp/diff_new_pack.IgI7NJ/_old 2016-03-29 09:54:59.000000000 +0200 +++ /var/tmp/diff_new_pack.IgI7NJ/_new 2016-03-29 09:54:59.000000000 +0200 @@ -1,3 +1,3 @@ -2016-03-16 18:30:21 +0100 -GIT Revision: b2c9ae5b1d122fe7e8501364ef1b9943207731e1 +2016-03-24 13:22:16 +0100 +GIT Revision: ece3ff2ef508d3cde89ea615cf42ff7b43a86723 GIT Branch: stable