]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 23 Jun 2014 19:54:11 +0000 (15:54 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 23 Jun 2014 19:54:11 +0000 (15:54 -0400)
added patches:
asoc-max98090-fix-reset-at-resume-time.patch
drivers-hv-balloon-ensure-pressure-reports-are-posted-regularly.patch

queue-3.10/asoc-max98090-fix-reset-at-resume-time.patch [new file with mode: 0644]
queue-3.10/drivers-hv-balloon-ensure-pressure-reports-are-posted-regularly.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/asoc-max98090-fix-reset-at-resume-time.patch b/queue-3.10/asoc-max98090-fix-reset-at-resume-time.patch
new file mode 100644 (file)
index 0000000..331d917
--- /dev/null
@@ -0,0 +1,42 @@
+From 25b4ab430f8e166c9b63f4db28e7e812d5a59396 Mon Sep 17 00:00:00 2001
+From: Liam Girdwood <liam.r.girdwood@linux.intel.com>
+Date: Fri, 16 May 2014 16:55:20 +0300
+Subject: ASoC: max98090: Fix reset at resume time
+
+From: Liam Girdwood <liam.r.girdwood@linux.intel.com>
+
+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 <liam.r.girdwood@linux.intel.com>
+Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
+Signed-off-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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:
+@@ -2343,6 +2344,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.10/drivers-hv-balloon-ensure-pressure-reports-are-posted-regularly.patch b/queue-3.10/drivers-hv-balloon-ensure-pressure-reports-are-posted-regularly.patch
new file mode 100644 (file)
index 0000000..1cbccbd
--- /dev/null
@@ -0,0 +1,114 @@
+From ae339336dc950b9b05e7ccd3565dd3e8781c06d9 Mon Sep 17 00:00:00 2001
+From: "K. Y. Srinivasan" <kys@microsoft.com>
+Date: Wed, 23 Apr 2014 13:53:39 -0700
+Subject: Drivers: hv: balloon: Ensure pressure reports are posted regularly
+
+From: "K. Y. Srinivasan" <kys@microsoft.com>
+
+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 <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 <linux/kernel.h>
++#include <linux/jiffies.h>
+ #include <linux/mman.h>
+ #include <linux/delay.h>
+ #include <linux/init.h>
+@@ -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;
index 6b271667b555ecfe61a752d15828787e803e2773..c48db727076003e82544fdf7d0a821b51a0d3fb6 100644 (file)
@@ -34,3 +34,5 @@ usb-cdc-acm-fix-runtime-pm-for-control-messages.patch
 usb-cdc-acm-fix-shutdown-and-suspend-race.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
+asoc-max98090-fix-reset-at-resume-time.patch