From: Greg Kroah-Hartman Date: Mon, 23 Jun 2014 19:54:37 +0000 (-0400) Subject: 3.15-stable patches X-Git-Tag: v3.4.95~19 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8ffa683d1f6a6aa9a365a40413ece285e5b15a88;p=thirdparty%2Fkernel%2Fstable-queue.git 3.15-stable patches added patches: asoc-dapm-make-sure-to-always-update-the-dapm-graph-in-_put_volsw.patch asoc-max98090-fix-reset-at-resume-time.patch asoc-tlv320aci3x-fix-custom-snd_soc_dapm_put_volsw_aic3x-function.patch drivers-hv-balloon-ensure-pressure-reports-are-posted-regularly.patch hv-use-correct-order-when-freeing-monitor_pages.patch --- diff --git a/queue-3.15/asoc-dapm-make-sure-to-always-update-the-dapm-graph-in-_put_volsw.patch b/queue-3.15/asoc-dapm-make-sure-to-always-update-the-dapm-graph-in-_put_volsw.patch new file mode 100644 index 00000000000..d02fe7409f1 --- /dev/null +++ b/queue-3.15/asoc-dapm-make-sure-to-always-update-the-dapm-graph-in-_put_volsw.patch @@ -0,0 +1,58 @@ +From c9e065c27fe9b81e5d6e7681d77a24f7b9616675 Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Sun, 4 May 2014 19:17:05 +0200 +Subject: ASoC: dapm: Make sure to always update the DAPM graph in _put_volsw() + +From: Lars-Peter Clausen + +commit c9e065c27fe9b81e5d6e7681d77a24f7b9616675 upstream. + +When using auto-muted controls it may happen that the register value will not +change when changing a control from enabled to disabled (since the control might +be physically disabled due to the auto-muting). We have to make sure to still +update the DAPM graph and disconnect the mixer input. + +Fixes: commit 5729507 ("ASoC: dapm: Implement mixer input auto-disable") +Signed-off-by: Lars-Peter Clausen +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/soc-dapm.c | 23 ++++++++++------------- + 1 file changed, 10 insertions(+), 13 deletions(-) + +--- a/sound/soc/soc-dapm.c ++++ b/sound/soc/soc-dapm.c +@@ -2857,22 +2857,19 @@ int snd_soc_dapm_put_volsw(struct snd_kc + mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); + + change = dapm_kcontrol_set_value(kcontrol, val); +- +- if (reg != SND_SOC_NOPM) { +- mask = mask << shift; +- val = val << shift; +- +- change = snd_soc_test_bits(codec, reg, mask, val); +- } +- + if (change) { + if (reg != SND_SOC_NOPM) { +- update.kcontrol = kcontrol; +- update.reg = reg; +- update.mask = mask; +- update.val = val; ++ mask = mask << shift; ++ val = val << shift; ++ ++ if (snd_soc_test_bits(codec, reg, mask, val)) { ++ update.kcontrol = kcontrol; ++ update.reg = reg; ++ update.mask = mask; ++ update.val = val; ++ card->update = &update; ++ } + +- card->update = &update; + } + + ret = soc_dapm_mixer_update_power(card, kcontrol, connect); diff --git a/queue-3.15/asoc-max98090-fix-reset-at-resume-time.patch b/queue-3.15/asoc-max98090-fix-reset-at-resume-time.patch new file mode 100644 index 00000000000..549edae565d --- /dev/null +++ b/queue-3.15/asoc-max98090-fix-reset-at-resume-time.patch @@ -0,0 +1,42 @@ +From 25b4ab430f8e166c9b63f4db28e7e812d5a59396 Mon Sep 17 00:00:00 2001 +From: Liam Girdwood +Date: Fri, 16 May 2014 16:55:20 +0300 +Subject: ASoC: max98090: Fix reset at resume time + +From: Liam Girdwood + +commit 25b4ab430f8e166c9b63f4db28e7e812d5a59396 upstream. + +Reset needs to wait 20ms before other codec IO is performed. This wait +was not being performed. Fix this by making sure the reset register is not +restored with the cache, but use the manual reset method in resume with +the wait. + +Signed-off-by: Liam Girdwood +Signed-off-by: Jarkko Nikula +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/codecs/max98090.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/sound/soc/codecs/max98090.c ++++ b/sound/soc/codecs/max98090.c +@@ -255,6 +255,7 @@ static struct reg_default max98090_reg[] + static bool max98090_volatile_register(struct device *dev, unsigned int reg) + { + switch (reg) { ++ case M98090_REG_SOFTWARE_RESET: + case M98090_REG_DEVICE_STATUS: + case M98090_REG_JACK_STATUS: + case M98090_REG_REVISION_ID: +@@ -2373,6 +2374,8 @@ static int max98090_runtime_resume(struc + + regcache_cache_only(max98090->regmap, false); + ++ max98090_reset(max98090); ++ + regcache_sync(max98090->regmap); + + return 0; diff --git a/queue-3.15/asoc-tlv320aci3x-fix-custom-snd_soc_dapm_put_volsw_aic3x-function.patch b/queue-3.15/asoc-tlv320aci3x-fix-custom-snd_soc_dapm_put_volsw_aic3x-function.patch new file mode 100644 index 00000000000..7f57f63ac55 --- /dev/null +++ b/queue-3.15/asoc-tlv320aci3x-fix-custom-snd_soc_dapm_put_volsw_aic3x-function.patch @@ -0,0 +1,35 @@ +From e6c111fac4464e3f4bf7b3802b517dafc80f8e0f Mon Sep 17 00:00:00 2001 +From: Peter Ujfalusi +Date: Fri, 30 May 2014 16:47:41 +0300 +Subject: ASoC: tlv320aci3x: Fix custom snd_soc_dapm_put_volsw_aic3x() function + +From: Peter Ujfalusi + +commit e6c111fac4464e3f4bf7b3802b517dafc80f8e0f upstream. + +For some unknown reason the parameters for snd_soc_test_bits() were in wrong +order: +It was: +snd_soc_test_bits(codec, val, mask, reg); /* WRONG!!! */ +while it should be: +snd_soc_test_bits(codec, reg, mask, val); + +Signed-off-by: Peter Ujfalusi +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/codecs/tlv320aic3x.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/soc/codecs/tlv320aic3x.c ++++ b/sound/soc/codecs/tlv320aic3x.c +@@ -169,7 +169,7 @@ static int snd_soc_dapm_put_volsw_aic3x( + mask <<= shift; + val <<= shift; + +- change = snd_soc_test_bits(codec, val, mask, reg); ++ change = snd_soc_test_bits(codec, reg, mask, val); + if (change) { + update.kcontrol = kcontrol; + update.reg = reg; diff --git a/queue-3.15/drivers-hv-balloon-ensure-pressure-reports-are-posted-regularly.patch b/queue-3.15/drivers-hv-balloon-ensure-pressure-reports-are-posted-regularly.patch new file mode 100644 index 00000000000..1cbccbd2cca --- /dev/null +++ b/queue-3.15/drivers-hv-balloon-ensure-pressure-reports-are-posted-regularly.patch @@ -0,0 +1,114 @@ +From ae339336dc950b9b05e7ccd3565dd3e8781c06d9 Mon Sep 17 00:00:00 2001 +From: "K. Y. Srinivasan" +Date: Wed, 23 Apr 2014 13:53:39 -0700 +Subject: Drivers: hv: balloon: Ensure pressure reports are posted regularly + +From: "K. Y. Srinivasan" + +commit ae339336dc950b9b05e7ccd3565dd3e8781c06d9 upstream. + +The current code posts periodic memory pressure status from a dedicated thread. +Under some conditions, especially when we are releasing a lot of memory into +the guest, we may not send timely pressure reports back to the host. Fix this +issue by reporting pressure in all contexts that can be active in this driver. + +Signed-off-by: K. Y. Srinivasan +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hv/hv_balloon.c | 29 ++++++++++++++++++++++++++--- + 1 file changed, 26 insertions(+), 3 deletions(-) + +--- a/drivers/hv/hv_balloon.c ++++ b/drivers/hv/hv_balloon.c +@@ -19,6 +19,7 @@ + #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + + #include ++#include + #include + #include + #include +@@ -459,6 +460,11 @@ static bool do_hot_add; + */ + static uint pressure_report_delay = 45; + ++/* ++ * The last time we posted a pressure report to host. ++ */ ++static unsigned long last_post_time; ++ + module_param(hot_add, bool, (S_IRUGO | S_IWUSR)); + MODULE_PARM_DESC(hot_add, "If set attempt memory hot_add"); + +@@ -542,6 +548,7 @@ struct hv_dynmem_device { + + static struct hv_dynmem_device dm_device; + ++static void post_status(struct hv_dynmem_device *dm); + #ifdef CONFIG_MEMORY_HOTPLUG + + static void hv_bring_pgs_online(unsigned long start_pfn, unsigned long size) +@@ -612,7 +619,7 @@ static void hv_mem_hot_add(unsigned long + * have not been "onlined" within the allowed time. + */ + wait_for_completion_timeout(&dm_device.ol_waitevent, 5*HZ); +- ++ post_status(&dm_device); + } + + return; +@@ -951,11 +958,17 @@ static void post_status(struct hv_dynmem + { + struct dm_status status; + struct sysinfo val; ++ unsigned long now = jiffies; ++ unsigned long last_post = last_post_time; + + if (pressure_report_delay > 0) { + --pressure_report_delay; + return; + } ++ ++ if (!time_after(now, (last_post_time + HZ))) ++ return; ++ + si_meminfo(&val); + memset(&status, 0, sizeof(struct dm_status)); + status.hdr.type = DM_STATUS_REPORT; +@@ -983,6 +996,14 @@ static void post_status(struct hv_dynmem + if (status.hdr.trans_id != atomic_read(&trans_id)) + return; + ++ /* ++ * If the last post time that we sampled has changed, ++ * we have raced, don't post the status. ++ */ ++ if (last_post != last_post_time) ++ return; ++ ++ last_post_time = jiffies; + vmbus_sendpacket(dm->dev->channel, &status, + sizeof(struct dm_status), + (unsigned long)NULL, +@@ -1117,7 +1138,7 @@ static void balloon_up(struct work_struc + + if (ret == -EAGAIN) + msleep(20); +- ++ post_status(&dm_device); + } while (ret == -EAGAIN); + + if (ret) { +@@ -1144,8 +1165,10 @@ static void balloon_down(struct hv_dynme + struct dm_unballoon_response resp; + int i; + +- for (i = 0; i < range_count; i++) ++ for (i = 0; i < range_count; i++) { + free_balloon_pages(dm, &range_array[i]); ++ post_status(&dm_device); ++ } + + if (req->more_pages == 1) + return; diff --git a/queue-3.15/hv-use-correct-order-when-freeing-monitor_pages.patch b/queue-3.15/hv-use-correct-order-when-freeing-monitor_pages.patch new file mode 100644 index 00000000000..56c0ecaeca6 --- /dev/null +++ b/queue-3.15/hv-use-correct-order-when-freeing-monitor_pages.patch @@ -0,0 +1,38 @@ +From a100d88df1e924e5c9678fabf054d1bae7ab74fb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= +Date: Tue, 27 May 2014 19:16:20 +0200 +Subject: hv: use correct order when freeing monitor_pages +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= + +commit a100d88df1e924e5c9678fabf054d1bae7ab74fb upstream. + +We try to free two pages when only one has been allocated. +Cleanup path is unlikely, so I haven't found any trace that would fit, +but I hope that free_pages_prepare() does catch it. + +Signed-off-by: Radim Krčmář +Reviewed-by: Amos Kong +Acked-by: Jason Wang +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hv/connection.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/hv/connection.c ++++ b/drivers/hv/connection.c +@@ -224,8 +224,8 @@ cleanup: + vmbus_connection.int_page = NULL; + } + +- free_pages((unsigned long)vmbus_connection.monitor_pages[0], 1); +- free_pages((unsigned long)vmbus_connection.monitor_pages[1], 1); ++ free_pages((unsigned long)vmbus_connection.monitor_pages[0], 0); ++ free_pages((unsigned long)vmbus_connection.monitor_pages[1], 0); + vmbus_connection.monitor_pages[0] = NULL; + vmbus_connection.monitor_pages[1] = NULL; + diff --git a/queue-3.15/series b/queue-3.15/series index d7a46157633..10ac6da2b4e 100644 --- a/queue-3.15/series +++ b/queue-3.15/series @@ -33,3 +33,8 @@ usb-cdc-acm-fix-open-and-suspend-race.patch usb-cdc-acm-fix-failed-open-not-being-detected.patch usb-cdc-acm-fix-i-o-after-failed-open.patch usb-cdc-acm-fix-runtime-pm-imbalance-at-shutdown.patch +drivers-hv-balloon-ensure-pressure-reports-are-posted-regularly.patch +hv-use-correct-order-when-freeing-monitor_pages.patch +asoc-dapm-make-sure-to-always-update-the-dapm-graph-in-_put_volsw.patch +asoc-max98090-fix-reset-at-resume-time.patch +asoc-tlv320aci3x-fix-custom-snd_soc_dapm_put_volsw_aic3x-function.patch