]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Jul 2014 20:04:12 +0000 (13:04 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Jul 2014 20:04:12 +0000 (13:04 -0700)
added patches:
hwmon-ina2xx-cast-to-s16-on-shunt-and-current-regs.patch
intel_pstate-correct-rounding-in-busy-calculation.patch
mac80211-don-t-check-netdev-state-for-debugfs-read-write.patch
mac80211-fix-a-memory-leak-on-sta-rate-selection-table.patch
mac80211-fix-ibss-join-by-initializing-last_scan_completed.patch
ring-buffer-check-if-buffer-exists-before-polling.patch

queue-3.14/hwmon-ina2xx-cast-to-s16-on-shunt-and-current-regs.patch [new file with mode: 0644]
queue-3.14/intel_pstate-correct-rounding-in-busy-calculation.patch [new file with mode: 0644]
queue-3.14/mac80211-don-t-check-netdev-state-for-debugfs-read-write.patch [new file with mode: 0644]
queue-3.14/mac80211-fix-a-memory-leak-on-sta-rate-selection-table.patch [new file with mode: 0644]
queue-3.14/mac80211-fix-ibss-join-by-initializing-last_scan_completed.patch [new file with mode: 0644]
queue-3.14/ring-buffer-check-if-buffer-exists-before-polling.patch [new file with mode: 0644]
queue-3.14/series

diff --git a/queue-3.14/hwmon-ina2xx-cast-to-s16-on-shunt-and-current-regs.patch b/queue-3.14/hwmon-ina2xx-cast-to-s16-on-shunt-and-current-regs.patch
new file mode 100644 (file)
index 0000000..cc4736e
--- /dev/null
@@ -0,0 +1,49 @@
+From c0214f98943b1fe43f7be61b7782b0c8f0836f28 Mon Sep 17 00:00:00 2001
+From: Fabio Baltieri <fabio.baltieri@gmail.com>
+Date: Sun, 8 Jun 2014 22:06:24 +0100
+Subject: hwmon: (ina2xx) Cast to s16 on shunt and current regs
+
+From: Fabio Baltieri <fabio.baltieri@gmail.com>
+
+commit c0214f98943b1fe43f7be61b7782b0c8f0836f28 upstream.
+
+All devices supported by ina2xx are bidirectional and report the
+measured shunt voltage and power values as a signed 16 bit, but the
+current driver implementation caches all registers as u16, leading
+to an incorrect sign extension when reporting to userspace in
+ina2xx_get_value().
+
+This patch fixes the problem by casting the signed registers to s16.
+Tested on an INA219.
+
+Signed-off-by: Fabio Baltieri <fabio.baltieri@gmail.com>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hwmon/ina2xx.c |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/hwmon/ina2xx.c
++++ b/drivers/hwmon/ina2xx.c
+@@ -148,7 +148,8 @@ static int ina2xx_get_value(struct ina2x
+       switch (reg) {
+       case INA2XX_SHUNT_VOLTAGE:
+-              val = DIV_ROUND_CLOSEST(data->regs[reg],
++              /* signed register */
++              val = DIV_ROUND_CLOSEST((s16)data->regs[reg],
+                                       data->config->shunt_div);
+               break;
+       case INA2XX_BUS_VOLTAGE:
+@@ -160,8 +161,8 @@ static int ina2xx_get_value(struct ina2x
+               val = data->regs[reg] * data->config->power_lsb;
+               break;
+       case INA2XX_CURRENT:
+-              /* LSB=1mA (selected). Is in mA */
+-              val = data->regs[reg];
++              /* signed register, LSB=1mA (selected), in mA */
++              val = (s16)data->regs[reg];
+               break;
+       default:
+               /* programmer goofed */
diff --git a/queue-3.14/intel_pstate-correct-rounding-in-busy-calculation.patch b/queue-3.14/intel_pstate-correct-rounding-in-busy-calculation.patch
new file mode 100644 (file)
index 0000000..9e08490
--- /dev/null
@@ -0,0 +1,44 @@
+From 51d211e9c334b9eca3505f4052afa660c3e0606b Mon Sep 17 00:00:00 2001
+From: Doug Smythies <doug.smythies@gmail.com>
+Date: Tue, 17 Jun 2014 13:36:10 -0700
+Subject: intel_pstate: Correct rounding in busy calculation
+
+From: Doug Smythies <doug.smythies@gmail.com>
+
+commit 51d211e9c334b9eca3505f4052afa660c3e0606b upstream.
+
+There was a mistake in the actual rounding portion this previous patch:
+f0fe3cd7e12d (intel_pstate: Correct rounding in busy calculation) such that
+the rounding was asymetric and incorrect.
+
+Severity: Not very serious, but can increase target pstate by one extra value.
+For real world work flows the issue should self correct (but I have no proof).
+It is the equivalent of different PID gains for positive and negative numbers.
+
+Examples:
+ -3.000000 used to round to -4, rounds to -3 with this patch.
+ -3.503906 used to round to -5, rounds to -4 with this patch.
+
+Fixes: f0fe3cd7e12d (intel_pstate: Correct rounding in busy calculation)
+Signed-off-by: Doug Smythies <dsmythies@telus.net>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/cpufreq/intel_pstate.c |    5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+--- a/drivers/cpufreq/intel_pstate.c
++++ b/drivers/cpufreq/intel_pstate.c
+@@ -200,10 +200,7 @@ static signed int pid_calc(struct _pid *
+       pid->last_err = fp_error;
+       result = pterm + mul_fp(pid->integral, pid->i_gain) + dterm;
+-      if (result >= 0)
+-              result = result + (1 << (FRAC_BITS-1));
+-      else
+-              result = result - (1 << (FRAC_BITS-1));
++      result = result + (1 << (FRAC_BITS-1));
+       return (signed int)fp_toint(result);
+ }
diff --git a/queue-3.14/mac80211-don-t-check-netdev-state-for-debugfs-read-write.patch b/queue-3.14/mac80211-don-t-check-netdev-state-for-debugfs-read-write.patch
new file mode 100644 (file)
index 0000000..a3bd9d0
--- /dev/null
@@ -0,0 +1,43 @@
+From 923eaf367206e01f22c97aee22300e332d071916 Mon Sep 17 00:00:00 2001
+From: Arik Nemtsov <arik@wizery.com>
+Date: Mon, 26 May 2014 14:40:51 +0300
+Subject: mac80211: don't check netdev state for debugfs read/write
+
+From: Arik Nemtsov <arik@wizery.com>
+
+commit 923eaf367206e01f22c97aee22300e332d071916 upstream.
+
+Doing so will lead to an oops for a p2p-dev interface, since it has
+no netdev.
+
+Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com>
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/mac80211/debugfs_netdev.c |    6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+--- a/net/mac80211/debugfs_netdev.c
++++ b/net/mac80211/debugfs_netdev.c
+@@ -34,8 +34,7 @@ static ssize_t ieee80211_if_read(
+       ssize_t ret = -EINVAL;
+       read_lock(&dev_base_lock);
+-      if (sdata->dev->reg_state == NETREG_REGISTERED)
+-              ret = (*format)(sdata, buf, sizeof(buf));
++      ret = (*format)(sdata, buf, sizeof(buf));
+       read_unlock(&dev_base_lock);
+       if (ret >= 0)
+@@ -62,8 +61,7 @@ static ssize_t ieee80211_if_write(
+       ret = -ENODEV;
+       rtnl_lock();
+-      if (sdata->dev->reg_state == NETREG_REGISTERED)
+-              ret = (*write)(sdata, buf, count);
++      ret = (*write)(sdata, buf, count);
+       rtnl_unlock();
+       return ret;
diff --git a/queue-3.14/mac80211-fix-a-memory-leak-on-sta-rate-selection-table.patch b/queue-3.14/mac80211-fix-a-memory-leak-on-sta-rate-selection-table.patch
new file mode 100644 (file)
index 0000000..432c955
--- /dev/null
@@ -0,0 +1,36 @@
+From 53d045258ee2e38b1e882617cb0799a04d05f5fa Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Tue, 27 May 2014 22:33:57 +0200
+Subject: mac80211: fix a memory leak on sta rate selection table
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Felix Fietkau <nbd@openwrt.org>
+
+commit 53d045258ee2e38b1e882617cb0799a04d05f5fa upstream.
+
+If the rate control algorithm uses a selection table, it
+is leaked when the station is destroyed - fix that.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+Reported-by: Christophe Prévotaux <cprevotaux@nltinc.com>
+Fixes: 0d528d85c519 ("mac80211: improve the rate control API")
+[add commit log entry, remove pointless NULL check]
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/mac80211/sta_info.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/net/mac80211/sta_info.c
++++ b/net/mac80211/sta_info.c
+@@ -240,6 +240,7 @@ void sta_info_free(struct ieee80211_loca
+       sta_dbg(sta->sdata, "Destroyed STA %pM\n", sta->sta.addr);
++      kfree(rcu_dereference_raw(sta->sta.rates));
+       kfree(sta);
+ }
diff --git a/queue-3.14/mac80211-fix-ibss-join-by-initializing-last_scan_completed.patch b/queue-3.14/mac80211-fix-ibss-join-by-initializing-last_scan_completed.patch
new file mode 100644 (file)
index 0000000..4e52fe4
--- /dev/null
@@ -0,0 +1,35 @@
+From c7d37a66e345df2fdf1aa7b2c9a6d3d53846ca5b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Krzysztof=20Ha=C5=82asa?= <khalasa@piap.pl>
+Date: Mon, 26 May 2014 14:14:46 +0200
+Subject: mac80211: fix IBSS join by initializing last_scan_completed
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: =?UTF-8?q?Krzysztof=20Ha=C5=82asa?= <khalasa@piap.pl>
+
+commit c7d37a66e345df2fdf1aa7b2c9a6d3d53846ca5b upstream.
+
+Without this fix, freshly rebooted Linux creates a new IBSS
+instead of joining an existing one. Only when jiffies counter
+overflows after 5 minutes the IBSS can be successfully joined.
+
+Signed-off-by: Krzysztof Hałasa <khalasa@piap.pl>
+[edit commit message slightly]
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/mac80211/ibss.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/net/mac80211/ibss.c
++++ b/net/mac80211/ibss.c
+@@ -1655,6 +1655,7 @@ int ieee80211_ibss_join(struct ieee80211
+       sdata->u.ibss.control_port = params->control_port;
+       sdata->u.ibss.userspace_handles_dfs = params->userspace_handles_dfs;
+       sdata->u.ibss.basic_rates = params->basic_rates;
++      sdata->u.ibss.last_scan_completed = jiffies;
+       /* fix basic_rates if channel does not support these rates */
+       rate_flags = ieee80211_chandef_rate_flags(&params->chandef);
diff --git a/queue-3.14/ring-buffer-check-if-buffer-exists-before-polling.patch b/queue-3.14/ring-buffer-check-if-buffer-exists-before-polling.patch
new file mode 100644 (file)
index 0000000..e2910b8
--- /dev/null
@@ -0,0 +1,142 @@
+From 8b8b36834d0fff67fc8668093f4312dd04dcf21d Mon Sep 17 00:00:00 2001
+From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
+Date: Tue, 10 Jun 2014 09:46:00 -0400
+Subject: ring-buffer: Check if buffer exists before polling
+
+From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
+
+commit 8b8b36834d0fff67fc8668093f4312dd04dcf21d upstream.
+
+The per_cpu buffers are created one per possible CPU. But these do
+not mean that those CPUs are online, nor do they even exist.
+
+With the addition of the ring buffer polling, it assumes that the
+caller polls on an existing buffer. But this is not the case if
+the user reads trace_pipe from a CPU that does not exist, and this
+causes the kernel to crash.
+
+Simple fix is to check the cpu against buffer bitmask against to see
+if the buffer was allocated or not and return -ENODEV if it is
+not.
+
+More updates were done to pass the -ENODEV back up to userspace.
+
+Link: http://lkml.kernel.org/r/5393DB61.6060707@oracle.com
+
+Reported-by: Sasha Levin <sasha.levin@oracle.com>
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h
+index d69cf637a15a..49a4d6f59108 100644
+--- a/include/linux/ring_buffer.h
++++ b/include/linux/ring_buffer.h
+@@ -97,7 +97,7 @@ __ring_buffer_alloc(unsigned long size, unsigned flags, struct lock_class_key *k
+       __ring_buffer_alloc((size), (flags), &__key);   \
+ })
+-void ring_buffer_wait(struct ring_buffer *buffer, int cpu);
++int ring_buffer_wait(struct ring_buffer *buffer, int cpu);
+ int ring_buffer_poll_wait(struct ring_buffer *buffer, int cpu,
+                         struct file *filp, poll_table *poll_table);
+diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
+index c634868c2921..7c56c3d06943 100644
+--- a/kernel/trace/ring_buffer.c
++++ b/kernel/trace/ring_buffer.c
+@@ -543,7 +543,7 @@ static void rb_wake_up_waiters(struct irq_work *work)
+  * as data is added to any of the @buffer's cpu buffers. Otherwise
+  * it will wait for data to be added to a specific cpu buffer.
+  */
+-void ring_buffer_wait(struct ring_buffer *buffer, int cpu)
++int ring_buffer_wait(struct ring_buffer *buffer, int cpu)
+ {
+       struct ring_buffer_per_cpu *cpu_buffer;
+       DEFINE_WAIT(wait);
+@@ -557,6 +557,8 @@ void ring_buffer_wait(struct ring_buffer *buffer, int cpu)
+       if (cpu == RING_BUFFER_ALL_CPUS)
+               work = &buffer->irq_work;
+       else {
++              if (!cpumask_test_cpu(cpu, buffer->cpumask))
++                      return -ENODEV;
+               cpu_buffer = buffer->buffers[cpu];
+               work = &cpu_buffer->irq_work;
+       }
+@@ -591,6 +593,7 @@ void ring_buffer_wait(struct ring_buffer *buffer, int cpu)
+               schedule();
+       finish_wait(&work->waiters, &wait);
++      return 0;
+ }
+ /**
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index 16f7038d1f4d..56422f1decba 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -1085,13 +1085,13 @@ update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu)
+ }
+ #endif /* CONFIG_TRACER_MAX_TRACE */
+-static void wait_on_pipe(struct trace_iterator *iter)
++static int wait_on_pipe(struct trace_iterator *iter)
+ {
+       /* Iterators are static, they should be filled or empty */
+       if (trace_buffer_iter(iter, iter->cpu_file))
+-              return;
++              return 0;
+-      ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file);
++      return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file);
+ }
+ #ifdef CONFIG_FTRACE_STARTUP_TEST
+@@ -4378,6 +4378,7 @@ tracing_poll_pipe(struct file *filp, poll_table *poll_table)
+ static int tracing_wait_pipe(struct file *filp)
+ {
+       struct trace_iterator *iter = filp->private_data;
++      int ret;
+       while (trace_empty(iter)) {
+@@ -4399,10 +4400,13 @@ static int tracing_wait_pipe(struct file *filp)
+               mutex_unlock(&iter->mutex);
+-              wait_on_pipe(iter);
++              ret = wait_on_pipe(iter);
+               mutex_lock(&iter->mutex);
++              if (ret)
++                      return ret;
++
+               if (signal_pending(current))
+                       return -EINTR;
+       }
+@@ -5327,8 +5331,12 @@ tracing_buffers_read(struct file *filp, char __user *ubuf,
+                               goto out_unlock;
+                       }
+                       mutex_unlock(&trace_types_lock);
+-                      wait_on_pipe(iter);
++                      ret = wait_on_pipe(iter);
+                       mutex_lock(&trace_types_lock);
++                      if (ret) {
++                              size = ret;
++                              goto out_unlock;
++                      }
+                       if (signal_pending(current)) {
+                               size = -EINTR;
+                               goto out_unlock;
+@@ -5538,8 +5546,10 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
+                       goto out;
+               }
+               mutex_unlock(&trace_types_lock);
+-              wait_on_pipe(iter);
++              ret = wait_on_pipe(iter);
+               mutex_lock(&trace_types_lock);
++              if (ret)
++                      goto out;
+               if (signal_pending(current)) {
+                       ret = -EINTR;
+                       goto out;
index a2e95e62db0a449084f3d181ccb880c39967053e..8f95b46f23d3f9007ca7c4400b55cb370e0a9429 100644 (file)
@@ -45,3 +45,9 @@ bluetooth-allow-change-security-level-on-att_cid-in-slave-role.patch
 dm-thin-update-discard_granularity-to-reflect-the-thin-pool-blocksize.patch
 rbd-use-reference-counts-for-image-requests.patch
 rbd-handle-parent_overlap-on-writes-correctly.patch
+hwmon-ina2xx-cast-to-s16-on-shunt-and-current-regs.patch
+intel_pstate-correct-rounding-in-busy-calculation.patch
+mac80211-fix-ibss-join-by-initializing-last_scan_completed.patch
+mac80211-don-t-check-netdev-state-for-debugfs-read-write.patch
+mac80211-fix-a-memory-leak-on-sta-rate-selection-table.patch
+ring-buffer-check-if-buffer-exists-before-polling.patch