From: Greg Kroah-Hartman Date: Mon, 7 Jul 2014 20:04:12 +0000 (-0700) Subject: 3.14-stable patches X-Git-Tag: v3.4.98~37 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ac33ce35b9eb458b65984d5ffe8415c4374fc1a1;p=thirdparty%2Fkernel%2Fstable-queue.git 3.14-stable patches 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 --- 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 index 00000000000..cc4736e143f --- /dev/null +++ b/queue-3.14/hwmon-ina2xx-cast-to-s16-on-shunt-and-current-regs.patch @@ -0,0 +1,49 @@ +From c0214f98943b1fe43f7be61b7782b0c8f0836f28 Mon Sep 17 00:00:00 2001 +From: Fabio Baltieri +Date: Sun, 8 Jun 2014 22:06:24 +0100 +Subject: hwmon: (ina2xx) Cast to s16 on shunt and current regs + +From: Fabio Baltieri + +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 +Signed-off-by: Guenter Roeck +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..9e08490c10f --- /dev/null +++ b/queue-3.14/intel_pstate-correct-rounding-in-busy-calculation.patch @@ -0,0 +1,44 @@ +From 51d211e9c334b9eca3505f4052afa660c3e0606b Mon Sep 17 00:00:00 2001 +From: Doug Smythies +Date: Tue, 17 Jun 2014 13:36:10 -0700 +Subject: intel_pstate: Correct rounding in busy calculation + +From: Doug Smythies + +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 +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..a3bd9d0b62d --- /dev/null +++ b/queue-3.14/mac80211-don-t-check-netdev-state-for-debugfs-read-write.patch @@ -0,0 +1,43 @@ +From 923eaf367206e01f22c97aee22300e332d071916 Mon Sep 17 00:00:00 2001 +From: Arik Nemtsov +Date: Mon, 26 May 2014 14:40:51 +0300 +Subject: mac80211: don't check netdev state for debugfs read/write + +From: Arik Nemtsov + +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 +Signed-off-by: Emmanuel Grumbach +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..432c9556db9 --- /dev/null +++ b/queue-3.14/mac80211-fix-a-memory-leak-on-sta-rate-selection-table.patch @@ -0,0 +1,36 @@ +From 53d045258ee2e38b1e882617cb0799a04d05f5fa Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +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 + +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 +Reported-by: Christophe Prévotaux +Fixes: 0d528d85c519 ("mac80211: improve the rate control API") +[add commit log entry, remove pointless NULL check] +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..4e52fe46581 --- /dev/null +++ b/queue-3.14/mac80211-fix-ibss-join-by-initializing-last_scan_completed.patch @@ -0,0 +1,35 @@ +From c7d37a66e345df2fdf1aa7b2c9a6d3d53846ca5b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Krzysztof=20Ha=C5=82asa?= +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?= + +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 +[edit commit message slightly] +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman + +--- + 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(¶ms->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 index 00000000000..e2910b85dbe --- /dev/null +++ b/queue-3.14/ring-buffer-check-if-buffer-exists-before-polling.patch @@ -0,0 +1,142 @@ +From 8b8b36834d0fff67fc8668093f4312dd04dcf21d Mon Sep 17 00:00:00 2001 +From: "Steven Rostedt (Red Hat)" +Date: Tue, 10 Jun 2014 09:46:00 -0400 +Subject: ring-buffer: Check if buffer exists before polling + +From: "Steven Rostedt (Red Hat)" + +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 +Signed-off-by: Steven Rostedt +Signed-off-by: Greg Kroah-Hartman + +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; diff --git a/queue-3.14/series b/queue-3.14/series index a2e95e62db0..8f95b46f23d 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -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