From: Greg Kroah-Hartman Date: Wed, 11 Jul 2012 00:53:33 +0000 (-0700) Subject: 3.4-stable patches X-Git-Tag: v3.0.37~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f390b03bfede0da5992d8d359ed07e3db575e061;p=thirdparty%2Fkernel%2Fstable-queue.git 3.4-stable patches added patches: aio-make-kiocb-private-null-in-init_sync_kiocb.patch batman-adv-fix-skb-data-assignment.patch batman-adv-only-drop-packets-of-known-wifi-clients.patch can-c_can-precedence-error-in-c_can_chip_config.patch can-flexcan-use-be32_to_cpup-to-handle-the-value-of-dt-entry.patch cfg80211-fix-potential-deadlock-in-regulatory.patch clk-allow-late-cache-allocation-for-clk-parents.patch clk-fix-parent-validation-in-__clk_set_parent.patch gpiolib-wm8994-pay-attention-to-the-value-set-when-enabling-as-output.patch igbvf-fix-divide-by-zero.patch iwlwifi-fix-activating-inactive-stations.patch ixgbe-do-not-pad-fcoe-frames-as-this-can-cause-issues-with.patch mac80211-clear-ifmgd-bssid-only-after-building-delba.patch mac80211-correct-behaviour-on-unrecognised-action-frames.patch mtd-cafe_nand-fix-an-vs-mistake.patch mwifiex-fix-11n-rx-packet-drop-issue.patch mwifiex-fix-wps-eapol-handshake-failure.patch net-qmi_wwan-fix-gobi-device-probing.patch net-qmi_wwan-fix-oops-while-disconnecting.patch ocfs2-clear-unaligned-io-flag-when-dio-fails.patch oprofile-perf-use-nr_cpus-instead-or-nr_cpumask_bits-for-static-array.patch rtlwifi-rtl8192cu-new-usb-ids.patch scsi-usb-storage-add-try_rc_10_first-flag.patch usb-cp210x-add-10-device-ids.patch usb-option-add-id-for-cellient-men-200.patch usb-option-add-usb-id-for-novatel-ovation-mc551.patch usb-qmi_wwan-add-zte-vodafone-k3520-z.patch usb-qmi_wwan-make-forced-int-4-whitelist-generic.patch usb-storage-revert-commit-afff07e61a52-add-090c-1000-to-unusal-devs.patch vfs-make-o_path-file-descriptors-usable-for-fchdir.patch x86-compat-use-test_thread_flag-tif_ia32-in-compat-signal-delivery.patch x86-cpufeature-rename-x86_feature_dts-to-x86_feature_dtherm.patch --- diff --git a/queue-3.4/aio-make-kiocb-private-null-in-init_sync_kiocb.patch b/queue-3.4/aio-make-kiocb-private-null-in-init_sync_kiocb.patch new file mode 100644 index 00000000000..c9a1848ef00 --- /dev/null +++ b/queue-3.4/aio-make-kiocb-private-null-in-init_sync_kiocb.patch @@ -0,0 +1,37 @@ +From 2dfd06036ba7ae8e7be2daf5a2fff1dac42390bf Mon Sep 17 00:00:00 2001 +From: Junxiao Bi +Date: Wed, 27 Jun 2012 17:09:54 +0800 +Subject: aio: make kiocb->private NUll in init_sync_kiocb() + +From: Junxiao Bi + +commit 2dfd06036ba7ae8e7be2daf5a2fff1dac42390bf upstream. + +Ocfs2 uses kiocb.*private as a flag of unsigned long size. In +commit a11f7e6 ocfs2: serialize unaligned aio, the unaligned +io flag is involved in it to serialize the unaligned aio. As +*private is not initialized in init_sync_kiocb() of do_sync_write(), +this unaligned io flag may be unexpectly set in an aligned dio. +And this will cause OCFS2_I(inode)->ip_unaligned_aio decreased +to -1 in ocfs2_dio_end_io(), thus the following unaligned dio +will hang forever at ocfs2_aiodio_wait() in ocfs2_file_aio_write(). + +Signed-off-by: Junxiao Bi +Acked-by: Jeff Moyer +Signed-off-by: Joel Becker +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/aio.h | 1 + + 1 file changed, 1 insertion(+) + +--- a/include/linux/aio.h ++++ b/include/linux/aio.h +@@ -140,6 +140,7 @@ struct kiocb { + (x)->ki_dtor = NULL; \ + (x)->ki_obj.tsk = tsk; \ + (x)->ki_user_data = 0; \ ++ (x)->private = NULL; \ + } while (0) + + #define AIO_RING_MAGIC 0xa10a10a1 diff --git a/queue-3.4/batman-adv-fix-skb-data-assignment.patch b/queue-3.4/batman-adv-fix-skb-data-assignment.patch new file mode 100644 index 00000000000..b6bd0861abe --- /dev/null +++ b/queue-3.4/batman-adv-fix-skb-data-assignment.patch @@ -0,0 +1,39 @@ +From 2c995ff892313009e336ecc8ec3411022f5b1c39 Mon Sep 17 00:00:00 2001 +From: Antonio Quartulli +Date: Tue, 19 Jun 2012 09:26:39 +0000 +Subject: batman-adv: fix skb->data assignment + +From: Antonio Quartulli + +commit 2c995ff892313009e336ecc8ec3411022f5b1c39 upstream. + +skb_linearize(skb) possibly rearranges the skb internal data and then changes +the skb->data pointer value. For this reason any other pointer in the code that +was assigned skb->data before invoking skb_linearise(skb) must be re-assigned. + +In the current tt_query message handling code this is not done and therefore, in +case of skb linearization, the pointer used to handle the packet header ends up +in pointing to free'd memory. + +This bug was introduced by a73105b8d4c765d9ebfb664d0a66802127d8e4c7 +(batman-adv: improved client announcement mechanism) + +Signed-off-by: Antonio Quartulli +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/batman-adv/routing.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/net/batman-adv/routing.c ++++ b/net/batman-adv/routing.c +@@ -618,6 +618,8 @@ int recv_tt_query(struct sk_buff *skb, s + * changes */ + if (skb_linearize(skb) < 0) + goto out; ++ /* skb_linearize() possibly changed skb->data */ ++ tt_query = (struct tt_query_packet *)skb->data; + + tt_len = tt_query->tt_data * sizeof(struct tt_change); + diff --git a/queue-3.4/batman-adv-only-drop-packets-of-known-wifi-clients.patch b/queue-3.4/batman-adv-only-drop-packets-of-known-wifi-clients.patch new file mode 100644 index 00000000000..a71cd8615fe --- /dev/null +++ b/queue-3.4/batman-adv-only-drop-packets-of-known-wifi-clients.patch @@ -0,0 +1,53 @@ +From 5870adc68fc39d81089f1e80efdf64b97e5c37a1 Mon Sep 17 00:00:00 2001 +From: Marek Lindner +Date: Wed, 20 Jun 2012 17:16:05 +0200 +Subject: batman-adv: only drop packets of known wifi clients + +From: Marek Lindner + +commit 5870adc68fc39d81089f1e80efdf64b97e5c37a1 upstream. + +bug introduced with 59b699cdee039d75915c354da06937102d1f9a84 + +If the source or destination mac address of an ethernet packet +could not be found in the translation table the packet was +dropped if AP isolation was turned on. This behavior would +make it impossible to send broadcast packets over the mesh as +the broadcast address will never enter the translation table. + +Signed-off-by: Marek Lindner +Acked-by: Antonio Quartulli +Signed-off-by: Greg Kroah-Hartman + +--- + net/batman-adv/translation-table.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/net/batman-adv/translation-table.c ++++ b/net/batman-adv/translation-table.c +@@ -1803,10 +1803,10 @@ bool is_ap_isolated(struct bat_priv *bat + { + struct tt_local_entry *tt_local_entry = NULL; + struct tt_global_entry *tt_global_entry = NULL; +- bool ret = true; ++ bool ret = false; + + if (!atomic_read(&bat_priv->ap_isolation)) +- return false; ++ goto out; + + tt_local_entry = tt_local_hash_find(bat_priv, dst); + if (!tt_local_entry) +@@ -1816,10 +1816,10 @@ bool is_ap_isolated(struct bat_priv *bat + if (!tt_global_entry) + goto out; + +- if (_is_ap_isolated(tt_local_entry, tt_global_entry)) ++ if (!_is_ap_isolated(tt_local_entry, tt_global_entry)) + goto out; + +- ret = false; ++ ret = true; + + out: + if (tt_global_entry) diff --git a/queue-3.4/can-c_can-precedence-error-in-c_can_chip_config.patch b/queue-3.4/can-c_can-precedence-error-in-c_can_chip_config.patch new file mode 100644 index 00000000000..3ccc64b5f82 --- /dev/null +++ b/queue-3.4/can-c_can-precedence-error-in-c_can_chip_config.patch @@ -0,0 +1,36 @@ +From d9cb9bd63eb27ac19f26a8547128c053f43a5da8 Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Fri, 15 Jun 2012 00:20:44 +0000 +Subject: can: c_can: precedence error in c_can_chip_config() + +From: Dan Carpenter + +commit d9cb9bd63eb27ac19f26a8547128c053f43a5da8 upstream. + +(CAN_CTRLMODE_LISTENONLY & CAN_CTRLMODE_LOOPBACK) is (0x02 & 0x01) which +is zero so the condition is never true. The intent here was to test +that both flags were set. + +Signed-off-by: Dan Carpenter +Acked-by: Oliver Hartkopp +Signed-off-by: Marc Kleine-Budde +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/can/c_can/c_can.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/net/can/c_can/c_can.c ++++ b/drivers/net/can/c_can/c_can.c +@@ -590,8 +590,8 @@ static void c_can_chip_config(struct net + priv->write_reg(priv, &priv->regs->control, + CONTROL_ENABLE_AR); + +- if (priv->can.ctrlmode & (CAN_CTRLMODE_LISTENONLY & +- CAN_CTRLMODE_LOOPBACK)) { ++ if ((priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) && ++ (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)) { + /* loopback + silent mode : useful for hot self-test */ + priv->write_reg(priv, &priv->regs->control, CONTROL_EIE | + CONTROL_SIE | CONTROL_IE | CONTROL_TEST); diff --git a/queue-3.4/can-flexcan-use-be32_to_cpup-to-handle-the-value-of-dt-entry.patch b/queue-3.4/can-flexcan-use-be32_to_cpup-to-handle-the-value-of-dt-entry.patch new file mode 100644 index 00000000000..e6786dc83d0 --- /dev/null +++ b/queue-3.4/can-flexcan-use-be32_to_cpup-to-handle-the-value-of-dt-entry.patch @@ -0,0 +1,41 @@ +From 85f2f834e85517307f13e30e630a5fc86f757cb5 Mon Sep 17 00:00:00 2001 +From: Hui Wang +Date: Wed, 27 Jun 2012 16:19:18 +0800 +Subject: can: flexcan: use be32_to_cpup to handle the value of dt entry + +From: Hui Wang + +commit 85f2f834e85517307f13e30e630a5fc86f757cb5 upstream. + +The freescale arm i.MX series platform can support this driver, and +usually the arm cpu works in the little endian mode by default, while +device tree entry value is stored in big endian format, we should use +be32_to_cpup() to handle them, after modification, it can work well +both on the le cpu and be cpu. + +Cc: Shawn Guo +Signed-off-by: Hui Wang +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/can/flexcan.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/net/can/flexcan.c ++++ b/drivers/net/can/flexcan.c +@@ -933,12 +933,12 @@ static int __devinit flexcan_probe(struc + u32 clock_freq = 0; + + if (pdev->dev.of_node) { +- const u32 *clock_freq_p; ++ const __be32 *clock_freq_p; + + clock_freq_p = of_get_property(pdev->dev.of_node, + "clock-frequency", NULL); + if (clock_freq_p) +- clock_freq = *clock_freq_p; ++ clock_freq = be32_to_cpup(clock_freq_p); + } + + if (!clock_freq) { diff --git a/queue-3.4/cfg80211-fix-potential-deadlock-in-regulatory.patch b/queue-3.4/cfg80211-fix-potential-deadlock-in-regulatory.patch new file mode 100644 index 00000000000..3255873e6bc --- /dev/null +++ b/queue-3.4/cfg80211-fix-potential-deadlock-in-regulatory.patch @@ -0,0 +1,142 @@ +From fe20b39ec32e975f1054c0b7866c873a954adf05 Mon Sep 17 00:00:00 2001 +From: Eliad Peller +Date: Tue, 12 Jun 2012 12:53:13 +0300 +Subject: cfg80211: fix potential deadlock in regulatory + +From: Eliad Peller + +commit fe20b39ec32e975f1054c0b7866c873a954adf05 upstream. + +reg_timeout_work() calls restore_regulatory_settings() which +takes cfg80211_mutex. + +reg_set_request_processed() already holds cfg80211_mutex +before calling cancel_delayed_work_sync(reg_timeout), +so it might deadlock. + +Call the async cancel_delayed_work instead, in order +to avoid the potential deadlock. + +This is the relevant lockdep warning: + +cfg80211: Calling CRDA for country: XX + +====================================================== +[ INFO: possible circular locking dependency detected ] +3.4.0-rc5-wl+ #26 Not tainted +------------------------------------------------------- +kworker/0:2/1391 is trying to acquire lock: + (cfg80211_mutex){+.+.+.}, at: [] restore_regulatory_settings+0x34/0x418 [cfg80211] + +but task is already holding lock: + ((reg_timeout).work){+.+...}, at: [] process_one_work+0x1f0/0x480 + +which lock already depends on the new lock. + +the existing dependency chain (in reverse order) is: + +-> #2 ((reg_timeout).work){+.+...}: + [] validate_chain+0xb94/0x10f0 + [] __lock_acquire+0x8c8/0x9b0 + [] lock_acquire+0xf0/0x114 + [] wait_on_work+0x4c/0x154 + [] __cancel_work_timer+0xd4/0x11c + [] cancel_delayed_work_sync+0x1c/0x20 + [] reg_set_request_processed+0x50/0x78 [cfg80211] + [] set_regdom+0x550/0x600 [cfg80211] + [] nl80211_set_reg+0x218/0x258 [cfg80211] + [] genl_rcv_msg+0x1a8/0x1e8 + [] netlink_rcv_skb+0x5c/0xc0 + [] genl_rcv+0x28/0x34 + [] netlink_unicast+0x15c/0x228 + [] netlink_sendmsg+0x218/0x298 + [] sock_sendmsg+0xa4/0xc0 + [] __sys_sendmsg+0x1e4/0x268 + [] sys_sendmsg+0x4c/0x70 + [] ret_fast_syscall+0x0/0x3c + +-> #1 (reg_mutex){+.+.+.}: + [] validate_chain+0xb94/0x10f0 + [] __lock_acquire+0x8c8/0x9b0 + [] lock_acquire+0xf0/0x114 + [] mutex_lock_nested+0x48/0x320 + [] reg_todo+0x30/0x538 [cfg80211] + [] process_one_work+0x2a0/0x480 + [] worker_thread+0x1bc/0x2bc + [] kthread+0x98/0xa4 + [] kernel_thread_exit+0x0/0x8 + +-> #0 (cfg80211_mutex){+.+.+.}: + [] print_circular_bug+0x68/0x2cc + [] validate_chain+0x978/0x10f0 + [] __lock_acquire+0x8c8/0x9b0 + [] lock_acquire+0xf0/0x114 + [] mutex_lock_nested+0x48/0x320 + [] restore_regulatory_settings+0x34/0x418 [cfg80211] + [] reg_timeout_work+0x1c/0x20 [cfg80211] + [] process_one_work+0x2a0/0x480 + [] worker_thread+0x1bc/0x2bc + [] kthread+0x98/0xa4 + [] kernel_thread_exit+0x0/0x8 + +other info that might help us debug this: + +Chain exists of: + cfg80211_mutex --> reg_mutex --> (reg_timeout).work + + Possible unsafe locking scenario: + + CPU0 CPU1 + ---- ---- + lock((reg_timeout).work); + lock(reg_mutex); + lock((reg_timeout).work); + lock(cfg80211_mutex); + + *** DEADLOCK *** + +2 locks held by kworker/0:2/1391: + #0: (events){.+.+.+}, at: [] process_one_work+0x1f0/0x480 + #1: ((reg_timeout).work){+.+...}, at: [] process_one_work+0x1f0/0x480 + +stack backtrace: +[] (unwind_backtrace+0x0/0x12c) from [] (dump_stack+0x20/0x24) +[] (dump_stack+0x20/0x24) from [] (print_circular_bug+0x280/0x2cc) +[] (print_circular_bug+0x280/0x2cc) from [] (validate_chain+0x978/0x10f0) +[] (validate_chain+0x978/0x10f0) from [] (__lock_acquire+0x8c8/0x9b0) +[] (__lock_acquire+0x8c8/0x9b0) from [] (lock_acquire+0xf0/0x114) +[] (lock_acquire+0xf0/0x114) from [] (mutex_lock_nested+0x48/0x320) +[] (mutex_lock_nested+0x48/0x320) from [] (restore_regulatory_settings+0x34/0x418 [cfg80211]) +[] (restore_regulatory_settings+0x34/0x418 [cfg80211]) from [] (reg_timeout_work+0x1c/0x20 [cfg80211]) +[] (reg_timeout_work+0x1c/0x20 [cfg80211]) from [] (process_one_work+0x2a0/0x480) +[] (process_one_work+0x2a0/0x480) from [] (worker_thread+0x1bc/0x2bc) +[] (worker_thread+0x1bc/0x2bc) from [] (kthread+0x98/0xa4) +[] (kthread+0x98/0xa4) from [] (kernel_thread_exit+0x0/0x8) +cfg80211: Calling CRDA to update world regulatory domain +cfg80211: World regulatory domain updated: +cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) +cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) +cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) +cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) +cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) +cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) + +Signed-off-by: Eliad Peller +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman + +--- + net/wireless/reg.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/net/wireless/reg.c ++++ b/net/wireless/reg.c +@@ -1389,7 +1389,7 @@ static void reg_set_request_processed(vo + spin_unlock(®_requests_lock); + + if (last_request->initiator == NL80211_REGDOM_SET_BY_USER) +- cancel_delayed_work_sync(®_timeout); ++ cancel_delayed_work(®_timeout); + + if (need_more_processing) + schedule_work(®_work); diff --git a/queue-3.4/clk-allow-late-cache-allocation-for-clk-parents.patch b/queue-3.4/clk-allow-late-cache-allocation-for-clk-parents.patch new file mode 100644 index 00000000000..352af3884ac --- /dev/null +++ b/queue-3.4/clk-allow-late-cache-allocation-for-clk-parents.patch @@ -0,0 +1,71 @@ +From 7975059db572eb47f0fb272a62afeae272a4b209 Mon Sep 17 00:00:00 2001 +From: Rajendra Nayak +Date: Wed, 6 Jun 2012 14:41:31 +0530 +Subject: clk: Allow late cache allocation for clk->parents + +From: Rajendra Nayak + +commit 7975059db572eb47f0fb272a62afeae272a4b209 upstream. + +Parent clocks for muxes are cached in clk->parents to +avoid frequent lookups, however the cache allocation happens +only during clock registeration and later clk_set_parent() +assumes a cache space available and allocated. + +This is not entirely true for platforms which do early clock +registerations wherein the cache allocation using kzalloc +could fail during clock registeration. + +Allow cache allocation to happen later as part of clk_set_parent() +to help such cases and avoid crashes assuming a cache being +available. + +While here also replace existing kmalloc() with kzalloc() +in the file. + +Signed-off-by: Rajendra Nayak +Signed-off-by: Mike Turquette +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/clk/clk.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +--- a/drivers/clk/clk.c ++++ b/drivers/clk/clk.c +@@ -997,7 +997,7 @@ static struct clk *__clk_init_parent(str + + if (!clk->parents) + clk->parents = +- kmalloc((sizeof(struct clk*) * clk->num_parents), ++ kzalloc((sizeof(struct clk*) * clk->num_parents), + GFP_KERNEL); + + if (!clk->parents) +@@ -1063,9 +1063,13 @@ static int __clk_set_parent(struct clk * + old_parent = clk->parent; + + /* find index of new parent clock using cached parent ptrs */ +- for (i = 0; i < clk->num_parents; i++) +- if (clk->parents[i] == parent) +- break; ++ if (clk->parents) ++ for (i = 0; i < clk->num_parents; i++) ++ if (clk->parents[i] == parent) ++ break; ++ else ++ clk->parents = kzalloc((sizeof(struct clk*) * clk->num_parents), ++ GFP_KERNEL); + + /* + * find index of new parent clock using string name comparison +@@ -1074,7 +1078,8 @@ static int __clk_set_parent(struct clk * + if (i == clk->num_parents) + for (i = 0; i < clk->num_parents; i++) + if (!strcmp(clk->parent_names[i], parent->name)) { +- clk->parents[i] = __clk_lookup(parent->name); ++ if (clk->parents) ++ clk->parents[i] = __clk_lookup(parent->name); + break; + } + diff --git a/queue-3.4/clk-fix-parent-validation-in-__clk_set_parent.patch b/queue-3.4/clk-fix-parent-validation-in-__clk_set_parent.patch new file mode 100644 index 00000000000..7babbaea5a1 --- /dev/null +++ b/queue-3.4/clk-fix-parent-validation-in-__clk_set_parent.patch @@ -0,0 +1,83 @@ +From 863b13271f1608ab3af6f7a371047d9a66693e38 Mon Sep 17 00:00:00 2001 +From: Rajendra Nayak +Date: Tue, 3 Jul 2012 12:11:41 +0530 +Subject: clk: fix parent validation in __clk_set_parent() + +From: Rajendra Nayak + +commit 863b13271f1608ab3af6f7a371047d9a66693e38 upstream. + +The below commit introduced a bug in __clk_set_parent() +which could cause it to *skip* the parent validation +which makes sure the parent passed to the api is a valid +one. + + commit 7975059db572eb47f0fb272a62afeae272a4b209 + Author: Rajendra Nayak + Date: Wed Jun 6 14:41:31 2012 +0530 + + clk: Allow late cache allocation for clk->parents + +This was identified by the following compiler warning.. + + drivers/clk/clk.c: In function '__clk_set_parent': + drivers/clk/clk.c:1083:5: warning: 'i' may be used uninitialized in this function [-Wuninitialized] + +.. as reported by Marc Kleine-Budde. + +There were various options discussed on how to fix this, one +being initing 'i' to clk->num_parents, but the below approach +was found to be more appropriate as it also makes the 'parent +validation' code simpler to read. + +Reported-by: Marc Kleine-Budde +Signed-off-by: Rajendra Nayak +Signed-off-by: Mike Turquette +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/clk/clk.c | 28 +++++++++++++--------------- + 1 file changed, 13 insertions(+), 15 deletions(-) + +--- a/drivers/clk/clk.c ++++ b/drivers/clk/clk.c +@@ -1062,26 +1062,24 @@ static int __clk_set_parent(struct clk * + + old_parent = clk->parent; + +- /* find index of new parent clock using cached parent ptrs */ +- if (clk->parents) +- for (i = 0; i < clk->num_parents; i++) +- if (clk->parents[i] == parent) +- break; +- else ++ if (!clk->parents) + clk->parents = kzalloc((sizeof(struct clk*) * clk->num_parents), + GFP_KERNEL); + + /* +- * find index of new parent clock using string name comparison +- * also try to cache the parent to avoid future calls to __clk_lookup ++ * find index of new parent clock using cached parent ptrs, ++ * or if not yet cached, use string name comparison and cache ++ * them now to avoid future calls to __clk_lookup. + */ +- if (i == clk->num_parents) +- for (i = 0; i < clk->num_parents; i++) +- if (!strcmp(clk->parent_names[i], parent->name)) { +- if (clk->parents) +- clk->parents[i] = __clk_lookup(parent->name); +- break; +- } ++ for (i = 0; i < clk->num_parents; i++) { ++ if (clk->parents && clk->parents[i] == parent) ++ break; ++ else if (!strcmp(clk->parent_names[i], parent->name)) { ++ if (clk->parents) ++ clk->parents[i] = __clk_lookup(parent->name); ++ break; ++ } ++ } + + if (i == clk->num_parents) { + pr_debug("%s: clock %s is not a possible parent of clock %s\n", diff --git a/queue-3.4/gpiolib-wm8994-pay-attention-to-the-value-set-when-enabling-as-output.patch b/queue-3.4/gpiolib-wm8994-pay-attention-to-the-value-set-when-enabling-as-output.patch new file mode 100644 index 00000000000..a9b7df96896 --- /dev/null +++ b/queue-3.4/gpiolib-wm8994-pay-attention-to-the-value-set-when-enabling-as-output.patch @@ -0,0 +1,37 @@ +From 8cd578b6e28693f357867a77598a88ef3deb6b39 Mon Sep 17 00:00:00 2001 +From: Mark Brown +Date: Sat, 9 Jun 2012 11:07:56 +0800 +Subject: gpiolib: wm8994: Pay attention to the value set when enabling as output + +From: Mark Brown + +commit 8cd578b6e28693f357867a77598a88ef3deb6b39 upstream. + +Not paying attention to the value being set is a bad thing because it +means that we'll not set the hardware up to reflect what was requested. +Not setting the hardware up to reflect what was requested means that the +caller won't get the results they wanted. + +Signed-off-by: Mark Brown +Signed-off-by: Linus Walleij +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpio/gpio-wm8994.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/gpio/gpio-wm8994.c ++++ b/drivers/gpio/gpio-wm8994.c +@@ -89,8 +89,11 @@ static int wm8994_gpio_direction_out(str + struct wm8994_gpio *wm8994_gpio = to_wm8994_gpio(chip); + struct wm8994 *wm8994 = wm8994_gpio->wm8994; + ++ if (value) ++ value = WM8994_GPN_LVL; ++ + return wm8994_set_bits(wm8994, WM8994_GPIO_1 + offset, +- WM8994_GPN_DIR, 0); ++ WM8994_GPN_DIR | WM8994_GPN_LVL, value); + } + + static void wm8994_gpio_set(struct gpio_chip *chip, unsigned offset, int value) diff --git a/queue-3.4/igbvf-fix-divide-by-zero.patch b/queue-3.4/igbvf-fix-divide-by-zero.patch new file mode 100644 index 00000000000..50b51252641 --- /dev/null +++ b/queue-3.4/igbvf-fix-divide-by-zero.patch @@ -0,0 +1,67 @@ +From 0e90b49ca4b891f085b57559a3071a4feefb496c Mon Sep 17 00:00:00 2001 +From: Mitch A Williams +Date: Sat, 30 Jun 2012 00:23:19 +0000 +Subject: igbvf: fix divide by zero + +From: Mitch A Williams + +commit 0e90b49ca4b891f085b57559a3071a4feefb496c upstream. + +Using ethtool -C ethX rx-usecs 0 crashes with a divide by zero. +Refactor this function to fix this issue and make it more clear +what the intent of each conditional is. Add comment regarding +using a setting of zero. + +CC: David Ahern +Signed-off-by: Mitch Williams +Tested-by: Aaron Brown +Signed-off-by: Jeff Kirsher +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/ethernet/intel/igbvf/ethtool.c | 29 ++++++++++++++++++----------- + 1 file changed, 18 insertions(+), 11 deletions(-) + +--- a/drivers/net/ethernet/intel/igbvf/ethtool.c ++++ b/drivers/net/ethernet/intel/igbvf/ethtool.c +@@ -357,21 +357,28 @@ static int igbvf_set_coalesce(struct net + struct igbvf_adapter *adapter = netdev_priv(netdev); + struct e1000_hw *hw = &adapter->hw; + +- if ((ec->rx_coalesce_usecs > IGBVF_MAX_ITR_USECS) || +- ((ec->rx_coalesce_usecs > 3) && +- (ec->rx_coalesce_usecs < IGBVF_MIN_ITR_USECS)) || +- (ec->rx_coalesce_usecs == 2)) +- return -EINVAL; +- +- /* convert to rate of irq's per second */ +- if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3) { ++ if ((ec->rx_coalesce_usecs >= IGBVF_MIN_ITR_USECS) && ++ (ec->rx_coalesce_usecs <= IGBVF_MAX_ITR_USECS)) { ++ adapter->current_itr = ec->rx_coalesce_usecs << 2; ++ adapter->requested_itr = 1000000000 / ++ (adapter->current_itr * 256); ++ } else if ((ec->rx_coalesce_usecs == 3) || ++ (ec->rx_coalesce_usecs == 2)) { + adapter->current_itr = IGBVF_START_ITR; + adapter->requested_itr = ec->rx_coalesce_usecs; +- } else { +- adapter->current_itr = ec->rx_coalesce_usecs << 2; ++ } else if (ec->rx_coalesce_usecs == 0) { ++ /* ++ * The user's desire is to turn off interrupt throttling ++ * altogether, but due to HW limitations, we can't do that. ++ * Instead we set a very small value in EITR, which would ++ * allow ~967k interrupts per second, but allow the adapter's ++ * internal clocking to still function properly. ++ */ ++ adapter->current_itr = 4; + adapter->requested_itr = 1000000000 / + (adapter->current_itr * 256); +- } ++ } else ++ return -EINVAL; + + writel(adapter->current_itr, + hw->hw_addr + adapter->rx_ring->itr_register); diff --git a/queue-3.4/iwlwifi-fix-activating-inactive-stations.patch b/queue-3.4/iwlwifi-fix-activating-inactive-stations.patch new file mode 100644 index 00000000000..a52c1a271ae --- /dev/null +++ b/queue-3.4/iwlwifi-fix-activating-inactive-stations.patch @@ -0,0 +1,54 @@ +From eac9ac6d1f5d0e9d33e4ded682187b630e7606cd Mon Sep 17 00:00:00 2001 +From: Johannes Berg +Date: Mon, 25 Jun 2012 09:36:41 +0200 +Subject: iwlwifi: fix activating inactive stations + +From: Johannes Berg + +commit eac9ac6d1f5d0e9d33e4ded682187b630e7606cd upstream. + +When authentication/association timed out, the driver would +complain bitterly, printing the message +ACTIVATE a non DRIVER active station id ... addr ... + +The cause turns out to be that when the AP station is added +but we don't associate, the IWL_STA_UCODE_INPROGRESS is set +but never cleared. This then causes iwl_restore_stations() +to attempt to resend it because it uses the flag internally +and uploads even if it didn't set it itself. + +To fix this issue and not upload the station again when it +has already been removed by mac80211, clear the flag after +adding it in case we add it only for association. + +Reviewed-by: Meenakshi Venkataraman +Reviewed-by: Emmanuel Grumbach +Signed-off-by: Johannes Berg +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/iwlwifi/iwl-mac80211.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +--- a/drivers/net/wireless/iwlwifi/iwl-mac80211.c ++++ b/drivers/net/wireless/iwlwifi/iwl-mac80211.c +@@ -788,6 +788,18 @@ static int iwlagn_mac_sta_state(struct i + switch (op) { + case ADD: + ret = iwlagn_mac_sta_add(hw, vif, sta); ++ if (ret) ++ break; ++ /* ++ * Clear the in-progress flag, the AP station entry was added ++ * but we'll initialize LQ only when we've associated (which ++ * would also clear the in-progress flag). This is necessary ++ * in case we never initialize LQ because association fails. ++ */ ++ spin_lock_bh(&priv->sta_lock); ++ priv->stations[iwl_sta_id(sta)].used &= ++ ~IWL_STA_UCODE_INPROGRESS; ++ spin_unlock_bh(&priv->sta_lock); + break; + case REMOVE: + ret = iwlagn_mac_sta_remove(hw, vif, sta); diff --git a/queue-3.4/ixgbe-do-not-pad-fcoe-frames-as-this-can-cause-issues-with.patch b/queue-3.4/ixgbe-do-not-pad-fcoe-frames-as-this-can-cause-issues-with.patch new file mode 100644 index 00000000000..baefde2e653 --- /dev/null +++ b/queue-3.4/ixgbe-do-not-pad-fcoe-frames-as-this-can-cause-issues-with.patch @@ -0,0 +1,108 @@ +From 57efd44c8cad440fb00ef8078cb018ab2f221373 Mon Sep 17 00:00:00 2001 +From: Alexander Duyck +Date: Mon, 25 Jun 2012 21:54:46 +0000 +Subject: ixgbe: Do not pad FCoE frames as this can cause issues with + FCoE DDP + +From: Alexander Duyck + +commit 57efd44c8cad440fb00ef8078cb018ab2f221373 upstream. + +FCoE target mode was experiencing issues due to the fact that we were +sending up data frames that were padded to 60 bytes after the DDP logic had +already stripped the frame down to 52 or 56 depending on the use of VLANs. +This was resulting in the FCoE DDP logic having issues since it thought the +frame still had data in it due to the padding. + +To resolve this, adding code so that we do not pad FCoE frames prior to +handling them to the stack. + +Signed-off-by: Alexander Duyck +Tested-by: Phil Schmitt +Tested-by: Ross Brattain +Signed-off-by: Jeff Kirsher +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/ethernet/intel/ixgbe/ixgbe.h | 4 ++-- + drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c | 2 +- + drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 14 ++++++++++---- + 3 files changed, 13 insertions(+), 7 deletions(-) + +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h +@@ -189,7 +189,7 @@ enum ixgbe_ring_state_t { + __IXGBE_HANG_CHECK_ARMED, + __IXGBE_RX_RSC_ENABLED, + __IXGBE_RX_CSUM_UDP_ZERO_ERR, +- __IXGBE_RX_FCOE_BUFSZ, ++ __IXGBE_RX_FCOE, + }; + + #define check_for_tx_hang(ring) \ +@@ -283,7 +283,7 @@ struct ixgbe_ring_feature { + #if defined(IXGBE_FCOE) && (PAGE_SIZE < 8192) + static inline unsigned int ixgbe_rx_pg_order(struct ixgbe_ring *ring) + { +- return test_bit(__IXGBE_RX_FCOE_BUFSZ, &ring->state) ? 1 : 0; ++ return test_bit(__IXGBE_RX_FCOE, &ring->state) ? 1 : 0; + } + #else + #define ixgbe_rx_pg_order(_ring) 0 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c +@@ -628,7 +628,7 @@ static int ixgbe_alloc_q_vector(struct i + f = &adapter->ring_feature[RING_F_FCOE]; + if ((rxr_idx >= f->mask) && + (rxr_idx < f->mask + f->indices)) +- set_bit(__IXGBE_RX_FCOE_BUFSZ, &ring->state); ++ set_bit(__IXGBE_RX_FCOE, &ring->state); + } + + #endif /* IXGBE_FCOE */ +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +@@ -1036,17 +1036,17 @@ static inline void ixgbe_rx_hash(struct + #ifdef IXGBE_FCOE + /** + * ixgbe_rx_is_fcoe - check the rx desc for incoming pkt type +- * @adapter: address of board private structure ++ * @ring: structure containing ring specific data + * @rx_desc: advanced rx descriptor + * + * Returns : true if it is FCoE pkt + */ +-static inline bool ixgbe_rx_is_fcoe(struct ixgbe_adapter *adapter, ++static inline bool ixgbe_rx_is_fcoe(struct ixgbe_ring *ring, + union ixgbe_adv_rx_desc *rx_desc) + { + __le16 pkt_info = rx_desc->wb.lower.lo_dword.hs_rss.pkt_info; + +- return (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) && ++ return test_bit(__IXGBE_RX_FCOE, &ring->state) && + ((pkt_info & cpu_to_le16(IXGBE_RXDADV_PKTTYPE_ETQF_MASK)) == + (cpu_to_le16(IXGBE_ETQF_FILTER_FCOE << + IXGBE_RXDADV_PKTTYPE_ETQF_SHIFT))); +@@ -1519,6 +1519,12 @@ static bool ixgbe_cleanup_headers(struct + skb->truesize -= ixgbe_rx_bufsz(rx_ring); + } + ++#ifdef IXGBE_FCOE ++ /* do not attempt to pad FCoE Frames as this will disrupt DDP */ ++ if (ixgbe_rx_is_fcoe(rx_ring, rx_desc)) ++ return false; ++ ++#endif + /* if skb_pad returns an error the skb was freed */ + if (unlikely(skb->len < 60)) { + int pad_len = 60 - skb->len; +@@ -1745,7 +1751,7 @@ static bool ixgbe_clean_rx_irq(struct ix + + #ifdef IXGBE_FCOE + /* if ddp, not passing to ULD unless for FCP_RSP or error */ +- if (ixgbe_rx_is_fcoe(adapter, rx_desc)) { ++ if (ixgbe_rx_is_fcoe(rx_ring, rx_desc)) { + ddp_bytes = ixgbe_fcoe_ddp(adapter, rx_desc, skb); + if (!ddp_bytes) { + dev_kfree_skb_any(skb); diff --git a/queue-3.4/mac80211-clear-ifmgd-bssid-only-after-building-delba.patch b/queue-3.4/mac80211-clear-ifmgd-bssid-only-after-building-delba.patch new file mode 100644 index 00000000000..ee630f2d395 --- /dev/null +++ b/queue-3.4/mac80211-clear-ifmgd-bssid-only-after-building-delba.patch @@ -0,0 +1,77 @@ +From 88a9e31c506c00c8b7a2f1611406d0e38dcb33b3 Mon Sep 17 00:00:00 2001 +From: Eliad Peller +Date: Fri, 1 Jun 2012 11:14:03 +0300 +Subject: mac80211: clear ifmgd->bssid only after building DELBA + +From: Eliad Peller + +commit 88a9e31c506c00c8b7a2f1611406d0e38dcb33b3 upstream. + +ieee80211_set_disassoc() clears ifmgd->bssid before +building DELBA frames, resulting in frames with invalid +bssid ("00:00:00:00:00:00"). + +Fix it by clearing ifmgd->bssid only after building +all the needed frames. + +After this change, we no longer need to save the +bssid (before clearing it), so remove the local array. + +Reported-by: Ido Yariv +Signed-off-by: Eliad Peller +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman + +--- + net/mac80211/mlme.c | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +--- a/net/mac80211/mlme.c ++++ b/net/mac80211/mlme.c +@@ -1375,7 +1375,6 @@ static void ieee80211_set_disassoc(struc + struct ieee80211_local *local = sdata->local; + struct sta_info *sta; + u32 changed = 0; +- u8 bssid[ETH_ALEN]; + + ASSERT_MGD_MTX(ifmgd); + +@@ -1385,10 +1384,7 @@ static void ieee80211_set_disassoc(struc + if (WARN_ON(!ifmgd->associated)) + return; + +- memcpy(bssid, ifmgd->associated->bssid, ETH_ALEN); +- + ifmgd->associated = NULL; +- memset(ifmgd->bssid, 0, ETH_ALEN); + + /* + * we need to commit the associated = NULL change because the +@@ -1408,7 +1404,7 @@ static void ieee80211_set_disassoc(struc + netif_carrier_off(sdata->dev); + + mutex_lock(&local->sta_mtx); +- sta = sta_info_get(sdata, bssid); ++ sta = sta_info_get(sdata, ifmgd->bssid); + if (sta) { + set_sta_flag(sta, WLAN_STA_BLOCK_BA); + ieee80211_sta_tear_down_BA_sessions(sta, tx); +@@ -1417,13 +1413,16 @@ static void ieee80211_set_disassoc(struc + + /* deauthenticate/disassociate now */ + if (tx || frame_buf) +- ieee80211_send_deauth_disassoc(sdata, bssid, stype, reason, +- tx, frame_buf); ++ ieee80211_send_deauth_disassoc(sdata, ifmgd->bssid, stype, ++ reason, tx, frame_buf); + + /* flush out frame */ + if (tx) + drv_flush(local, false); + ++ /* clear bssid only after building the needed mgmt frames */ ++ memset(ifmgd->bssid, 0, ETH_ALEN); ++ + /* remove AP and TDLS peers */ + sta_info_flush(local, sdata); + diff --git a/queue-3.4/mac80211-correct-behaviour-on-unrecognised-action-frames.patch b/queue-3.4/mac80211-correct-behaviour-on-unrecognised-action-frames.patch new file mode 100644 index 00000000000..07558c54be6 --- /dev/null +++ b/queue-3.4/mac80211-correct-behaviour-on-unrecognised-action-frames.patch @@ -0,0 +1,45 @@ +From 4b5ebccc40843104d980f0714bc86bfcd5568941 Mon Sep 17 00:00:00 2001 +From: Johannes Berg +Date: Wed, 27 Jun 2012 15:38:56 +0200 +Subject: mac80211: correct behaviour on unrecognised action frames + +From: Johannes Berg + +commit 4b5ebccc40843104d980f0714bc86bfcd5568941 upstream. + +When receiving an "individually addressed" action frame, the +receiver is required to return it to the sender. mac80211 +gets this wrong as it also returns group addressed (mcast) +frames to the sender. Fix this and update the reference to +the new 802.11 standards version since things were shuffled +around significantly. + +Signed-off-by: Johannes Berg +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + net/mac80211/rx.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/net/mac80211/rx.c ++++ b/net/mac80211/rx.c +@@ -2459,7 +2459,7 @@ ieee80211_rx_h_action_return(struct ieee + * frames that we didn't handle, including returning unknown + * ones. For all other modes we will return them to the sender, + * setting the 0x80 bit in the action category, as required by +- * 802.11-2007 7.3.1.11. ++ * 802.11-2012 9.24.4. + * Newer versions of hostapd shall also use the management frame + * registration mechanisms, but older ones still use cooked + * monitor interfaces so push all frames there. +@@ -2469,6 +2469,9 @@ ieee80211_rx_h_action_return(struct ieee + sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) + return RX_DROP_MONITOR; + ++ if (is_multicast_ether_addr(mgmt->da)) ++ return RX_DROP_MONITOR; ++ + /* do not return rejected action frames */ + if (mgmt->u.action.category & 0x80) + return RX_DROP_UNUSABLE; diff --git a/queue-3.4/mtd-cafe_nand-fix-an-vs-mistake.patch b/queue-3.4/mtd-cafe_nand-fix-an-vs-mistake.patch new file mode 100644 index 00000000000..70acdb3a632 --- /dev/null +++ b/queue-3.4/mtd-cafe_nand-fix-an-vs-mistake.patch @@ -0,0 +1,37 @@ +From 48f8b641297df49021093763a3271119a84990a2 Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Sat, 9 Jun 2012 19:08:25 +0300 +Subject: mtd: cafe_nand: fix an & vs | mistake + +From: Dan Carpenter + +commit 48f8b641297df49021093763a3271119a84990a2 upstream. + +The intent here was clearly to set result to true if the 0x40000000 flag +was set. But instead there was a | vs & typo and we always set result +to true. + +Artem: check the spec at +wiki.laptop.org/images/5/5c/88ALP01_Datasheet_July_2007.pdf +and this fix looks correct. + +Signed-off-by: Dan Carpenter +Signed-off-by: Artem Bityutskiy +Signed-off-by: David Woodhouse +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mtd/nand/cafe_nand.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/mtd/nand/cafe_nand.c ++++ b/drivers/mtd/nand/cafe_nand.c +@@ -102,7 +102,7 @@ static const char *part_probes[] = { "cm + static int cafe_device_ready(struct mtd_info *mtd) + { + struct cafe_priv *cafe = mtd->priv; +- int result = !!(cafe_readl(cafe, NAND_STATUS) | 0x40000000); ++ int result = !!(cafe_readl(cafe, NAND_STATUS) & 0x40000000); + uint32_t irqs = cafe_readl(cafe, NAND_IRQ); + + cafe_writel(cafe, irqs, NAND_IRQ); diff --git a/queue-3.4/mwifiex-fix-11n-rx-packet-drop-issue.patch b/queue-3.4/mwifiex-fix-11n-rx-packet-drop-issue.patch new file mode 100644 index 00000000000..b3e9e0a0954 --- /dev/null +++ b/queue-3.4/mwifiex-fix-11n-rx-packet-drop-issue.patch @@ -0,0 +1,82 @@ +From 925839243dc9aa4ef25305f5afd10ed18258a4ac Mon Sep 17 00:00:00 2001 +From: Stone Piao +Date: Wed, 20 Jun 2012 20:21:10 -0700 +Subject: mwifiex: fix 11n rx packet drop issue + +From: Stone Piao + +commit 925839243dc9aa4ef25305f5afd10ed18258a4ac upstream. + +Currently we check the sequence number of last packet received +against start_win. If a sequence hole is detected, start_win is +updated to next sequence number. + +Since the rx sequence number is initialized to 0, a corner case +exists when BA setup happens immediately after association. As +0 is a valid sequence number, start_win gets increased to 1 +incorrectly. This causes the first packet with sequence number 0 +being dropped. + +Initialize rx sequence number as 0xffff and skip adjusting +start_win if the sequence number remains 0xffff. The sequence +number will be updated once the first packet is received. + +Signed-off-by: Stone Piao +Signed-off-by: Avinash Patil +Signed-off-by: Kiran Divekar +Signed-off-by: Bing Zhao +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/mwifiex/11n_rxreorder.c | 5 +++-- + drivers/net/wireless/mwifiex/11n_rxreorder.h | 7 +++++++ + drivers/net/wireless/mwifiex/wmm.c | 2 ++ + 3 files changed, 12 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/mwifiex/11n_rxreorder.c ++++ b/drivers/net/wireless/mwifiex/11n_rxreorder.c +@@ -256,7 +256,8 @@ mwifiex_11n_create_rx_reorder_tbl(struct + else + last_seq = priv->rx_seq[tid]; + +- if (last_seq >= new_node->start_win) ++ if (last_seq != MWIFIEX_DEF_11N_RX_SEQ_NUM && ++ last_seq >= new_node->start_win) + new_node->start_win = last_seq + 1; + + new_node->win_size = win_size; +@@ -596,5 +597,5 @@ void mwifiex_11n_cleanup_reorder_tbl(str + spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); + + INIT_LIST_HEAD(&priv->rx_reorder_tbl_ptr); +- memset(priv->rx_seq, 0, sizeof(priv->rx_seq)); ++ mwifiex_reset_11n_rx_seq_num(priv); + } +--- a/drivers/net/wireless/mwifiex/11n_rxreorder.h ++++ b/drivers/net/wireless/mwifiex/11n_rxreorder.h +@@ -37,6 +37,13 @@ + + #define ADDBA_RSP_STATUS_ACCEPT 0 + ++#define MWIFIEX_DEF_11N_RX_SEQ_NUM 0xffff ++ ++static inline void mwifiex_reset_11n_rx_seq_num(struct mwifiex_private *priv) ++{ ++ memset(priv->rx_seq, 0xff, sizeof(priv->rx_seq)); ++} ++ + int mwifiex_11n_rx_reorder_pkt(struct mwifiex_private *, + u16 seqNum, + u16 tid, u8 *ta, +--- a/drivers/net/wireless/mwifiex/wmm.c ++++ b/drivers/net/wireless/mwifiex/wmm.c +@@ -404,6 +404,8 @@ mwifiex_wmm_init(struct mwifiex_adapter + priv->add_ba_param.tx_win_size = MWIFIEX_AMPDU_DEF_TXWINSIZE; + priv->add_ba_param.rx_win_size = MWIFIEX_AMPDU_DEF_RXWINSIZE; + ++ mwifiex_reset_11n_rx_seq_num(priv); ++ + atomic_set(&priv->wmm.tx_pkts_queued, 0); + atomic_set(&priv->wmm.highest_queued_prio, HIGH_PRIO_TID); + } diff --git a/queue-3.4/mwifiex-fix-wps-eapol-handshake-failure.patch b/queue-3.4/mwifiex-fix-wps-eapol-handshake-failure.patch new file mode 100644 index 00000000000..20a34c2a1ed --- /dev/null +++ b/queue-3.4/mwifiex-fix-wps-eapol-handshake-failure.patch @@ -0,0 +1,39 @@ +From f03ba7e9a24e5e9efaad56bd1713b994ea556b16 Mon Sep 17 00:00:00 2001 +From: Stone Piao +Date: Wed, 20 Jun 2012 20:21:11 -0700 +Subject: mwifiex: fix WPS eapol handshake failure + +From: Stone Piao + +commit f03ba7e9a24e5e9efaad56bd1713b994ea556b16 upstream. + +After association, STA will go through eapol handshake with WPS +enabled AP. It's observed that WPS handshake fails with some 11n +AP. The reason for the failure is that the eapol packet is sent +via 11n frame aggregation. + +The eapol packet should be sent directly without 11n aggregation. + +This patch fixes the problem by adding WPS session control while +dequeuing Tx packets for transmission. + +Signed-off-by: Stone Piao +Signed-off-by: Avinash Patil +Signed-off-by: Bing Zhao +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/mwifiex/wmm.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/net/wireless/mwifiex/wmm.c ++++ b/drivers/net/wireless/mwifiex/wmm.c +@@ -1211,6 +1211,7 @@ mwifiex_dequeue_tx_packet(struct mwifiex + + if (!ptr->is_11n_enabled || + mwifiex_is_ba_stream_setup(priv, ptr, tid) || ++ priv->wps.session_enable || + ((priv->sec_info.wpa_enabled || + priv->sec_info.wpa2_enabled) && + !priv->wpa_is_gtk_set)) { diff --git a/queue-3.4/net-qmi_wwan-fix-gobi-device-probing.patch b/queue-3.4/net-qmi_wwan-fix-gobi-device-probing.patch new file mode 100644 index 00000000000..8d9dd83f4fe --- /dev/null +++ b/queue-3.4/net-qmi_wwan-fix-gobi-device-probing.patch @@ -0,0 +1,192 @@ +From b9f90eb2740203ff2592efe640409ad48335d1c2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= +Date: Thu, 21 Jun 2012 02:45:58 +0000 +Subject: net: qmi_wwan: fix Gobi device probing +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= + +commit b9f90eb2740203ff2592efe640409ad48335d1c2 upstream. + +Ignoring interfaces with additional descriptors is not a reliable +method for locating the correct interface on Gobi devices. There +is at least one device where this method fails: +https://bbs.archlinux.org/viewtopic.php?id=143506 + +The result is that the AT command port (interface #2) is hidden +from qcserial, preventing traditional serial modem usage: + +[ 15.562552] qmi_wwan 4-1.6:1.0: cdc-wdm0: USB WDM device +[ 15.562691] qmi_wwan 4-1.6:1.0: wwan0: register 'qmi_wwan' at usb-0000:00:1d.0-1.6, Qualcomm Gobi wwan/QMI device, 1e:df:3c:3a:4e:3b +[ 15.563383] qmi_wwan: probe of 4-1.6:1.1 failed with error -22 +[ 15.564189] qmi_wwan 4-1.6:1.2: cdc-wdm1: USB WDM device +[ 15.564302] qmi_wwan 4-1.6:1.2: wwan1: register 'qmi_wwan' at usb-0000:00:1d.0-1.6, Qualcomm Gobi wwan/QMI device, 1e:df:3c:3a:4e:3b +[ 15.564328] qmi_wwan: probe of 4-1.6:1.3 failed with error -22 +[ 15.569376] qcserial 4-1.6:1.1: Qualcomm USB modem converter detected +[ 15.569440] usb 4-1.6: Qualcomm USB modem converter now attached to ttyUSB0 +[ 15.570372] qcserial 4-1.6:1.3: Qualcomm USB modem converter detected +[ 15.570430] usb 4-1.6: Qualcomm USB modem converter now attached to ttyUSB1 + +Use static interface numbers taken from the interface map in +qcserial for all Gobi devices instead: + + Gobi 1K USB layout: + 0: serial port (doesn't respond) + 1: serial port (doesn't respond) + 2: AT-capable modem port + 3: QMI/net + + Gobi 2K+ USB layout: + 0: QMI/net + 1: DM/DIAG (use libqcdm from ModemManager for communication) + 2: AT-capable modem port + 3: NMEA + +This should be more reliable over all, and will also prevent the +noisy "probe failed" messages. The whitelisting logic is expected +to be replaced by direct interface number matching in 3.6. + +Reported-by: Heinrich Siebmanns (Harvey) +Signed-off-by: Bjørn Mork +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/usb/qmi_wwan.c | 83 +++++++++++++++++++++------------------------ + 1 file changed, 40 insertions(+), 43 deletions(-) + +--- a/drivers/net/usb/qmi_wwan.c ++++ b/drivers/net/usb/qmi_wwan.c +@@ -257,29 +257,6 @@ err: + return rv; + } + +-/* Gobi devices uses identical class/protocol codes for all interfaces regardless +- * of function. Some of these are CDC ACM like and have the exact same endpoints +- * we are looking for. This leaves two possible strategies for identifying the +- * correct interface: +- * a) hardcoding interface number, or +- * b) use the fact that the wwan interface is the only one lacking additional +- * (CDC functional) descriptors +- * +- * Let's see if we can get away with the generic b) solution. +- */ +-static int qmi_wwan_bind_gobi(struct usbnet *dev, struct usb_interface *intf) +-{ +- int rv = -EINVAL; +- +- /* ignore any interface with additional descriptors */ +- if (intf->cur_altsetting->extralen) +- goto err; +- +- rv = qmi_wwan_bind_shared(dev, intf); +-err: +- return rv; +-} +- + static void qmi_wwan_unbind_shared(struct usbnet *dev, struct usb_interface *intf) + { + struct usb_driver *subdriver = (void *)dev->data[0]; +@@ -347,15 +324,15 @@ static const struct driver_info qmi_wwan + .manage_power = qmi_wwan_manage_power, + }; + +-static const struct driver_info qmi_wwan_gobi = { +- .description = "Qualcomm Gobi wwan/QMI device", ++static const struct driver_info qmi_wwan_force_int0 = { ++ .description = "Qualcomm WWAN/QMI device", + .flags = FLAG_WWAN, +- .bind = qmi_wwan_bind_gobi, ++ .bind = qmi_wwan_bind_shared, + .unbind = qmi_wwan_unbind_shared, + .manage_power = qmi_wwan_manage_power, ++ .data = BIT(0), /* interface whitelist bitmap */ + }; + +-/* ZTE suck at making USB descriptors */ + static const struct driver_info qmi_wwan_force_int1 = { + .description = "Qualcomm WWAN/QMI device", + .flags = FLAG_WWAN, +@@ -365,6 +342,15 @@ static const struct driver_info qmi_wwan + .data = BIT(1), /* interface whitelist bitmap */ + }; + ++static const struct driver_info qmi_wwan_force_int3 = { ++ .description = "Qualcomm WWAN/QMI device", ++ .flags = FLAG_WWAN, ++ .bind = qmi_wwan_bind_shared, ++ .unbind = qmi_wwan_unbind_shared, ++ .manage_power = qmi_wwan_manage_power, ++ .data = BIT(3), /* interface whitelist bitmap */ ++}; ++ + static const struct driver_info qmi_wwan_force_int4 = { + .description = "Qualcomm WWAN/QMI device", + .flags = FLAG_WWAN, +@@ -390,16 +376,23 @@ static const struct driver_info qmi_wwan + static const struct driver_info qmi_wwan_sierra = { + .description = "Sierra Wireless wwan/QMI device", + .flags = FLAG_WWAN, +- .bind = qmi_wwan_bind_gobi, ++ .bind = qmi_wwan_bind_shared, + .unbind = qmi_wwan_unbind_shared, + .manage_power = qmi_wwan_manage_power, + .data = BIT(8) | BIT(19), /* interface whitelist bitmap */ + }; + + #define HUAWEI_VENDOR_ID 0x12D1 ++ ++/* Gobi 1000 QMI/wwan interface number is 3 according to qcserial */ ++#define QMI_GOBI1K_DEVICE(vend, prod) \ ++ USB_DEVICE(vend, prod), \ ++ .driver_info = (unsigned long)&qmi_wwan_force_int3 ++ ++/* Gobi 2000 and Gobi 3000 QMI/wwan interface number is 0 according to qcserial */ + #define QMI_GOBI_DEVICE(vend, prod) \ + USB_DEVICE(vend, prod), \ +- .driver_info = (unsigned long)&qmi_wwan_gobi ++ .driver_info = (unsigned long)&qmi_wwan_force_int0 + + static const struct usb_device_id products[] = { + { /* Huawei E392, E398 and possibly others sharing both device id and more... */ +@@ -493,20 +486,24 @@ static const struct usb_device_id produc + .bInterfaceProtocol = 0xff, + .driver_info = (unsigned long)&qmi_wwan_sierra, + }, +- {QMI_GOBI_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ +- {QMI_GOBI_DEVICE(0x03f0, 0x1f1d)}, /* HP un2400 Gobi Modem Device */ +- {QMI_GOBI_DEVICE(0x03f0, 0x371d)}, /* HP un2430 Mobile Broadband Module */ +- {QMI_GOBI_DEVICE(0x04da, 0x250d)}, /* Panasonic Gobi Modem device */ +- {QMI_GOBI_DEVICE(0x413c, 0x8172)}, /* Dell Gobi Modem device */ +- {QMI_GOBI_DEVICE(0x1410, 0xa001)}, /* Novatel Gobi Modem device */ +- {QMI_GOBI_DEVICE(0x0b05, 0x1776)}, /* Asus Gobi Modem device */ +- {QMI_GOBI_DEVICE(0x19d2, 0xfff3)}, /* ONDA Gobi Modem device */ +- {QMI_GOBI_DEVICE(0x05c6, 0x9001)}, /* Generic Gobi Modem device */ +- {QMI_GOBI_DEVICE(0x05c6, 0x9002)}, /* Generic Gobi Modem device */ +- {QMI_GOBI_DEVICE(0x05c6, 0x9202)}, /* Generic Gobi Modem device */ +- {QMI_GOBI_DEVICE(0x05c6, 0x9203)}, /* Generic Gobi Modem device */ +- {QMI_GOBI_DEVICE(0x05c6, 0x9222)}, /* Generic Gobi Modem device */ +- {QMI_GOBI_DEVICE(0x05c6, 0x9009)}, /* Generic Gobi Modem device */ ++ ++ /* Gobi 1000 devices */ ++ {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ ++ {QMI_GOBI1K_DEVICE(0x03f0, 0x1f1d)}, /* HP un2400 Gobi Modem Device */ ++ {QMI_GOBI1K_DEVICE(0x03f0, 0x371d)}, /* HP un2430 Mobile Broadband Module */ ++ {QMI_GOBI1K_DEVICE(0x04da, 0x250d)}, /* Panasonic Gobi Modem device */ ++ {QMI_GOBI1K_DEVICE(0x413c, 0x8172)}, /* Dell Gobi Modem device */ ++ {QMI_GOBI1K_DEVICE(0x1410, 0xa001)}, /* Novatel Gobi Modem device */ ++ {QMI_GOBI1K_DEVICE(0x0b05, 0x1776)}, /* Asus Gobi Modem device */ ++ {QMI_GOBI1K_DEVICE(0x19d2, 0xfff3)}, /* ONDA Gobi Modem device */ ++ {QMI_GOBI1K_DEVICE(0x05c6, 0x9001)}, /* Generic Gobi Modem device */ ++ {QMI_GOBI1K_DEVICE(0x05c6, 0x9002)}, /* Generic Gobi Modem device */ ++ {QMI_GOBI1K_DEVICE(0x05c6, 0x9202)}, /* Generic Gobi Modem device */ ++ {QMI_GOBI1K_DEVICE(0x05c6, 0x9203)}, /* Generic Gobi Modem device */ ++ {QMI_GOBI1K_DEVICE(0x05c6, 0x9222)}, /* Generic Gobi Modem device */ ++ {QMI_GOBI1K_DEVICE(0x05c6, 0x9009)}, /* Generic Gobi Modem device */ ++ ++ /* Gobi 2000 and 3000 devices */ + {QMI_GOBI_DEVICE(0x413c, 0x8186)}, /* Dell Gobi 2000 Modem device (N0218, VU936) */ + {QMI_GOBI_DEVICE(0x05c6, 0x920b)}, /* Generic Gobi 2000 Modem device */ + {QMI_GOBI_DEVICE(0x05c6, 0x9225)}, /* Sony Gobi 2000 Modem device (N0279, VU730) */ diff --git a/queue-3.4/net-qmi_wwan-fix-oops-while-disconnecting.patch b/queue-3.4/net-qmi_wwan-fix-oops-while-disconnecting.patch new file mode 100644 index 00000000000..93c740fb6e4 --- /dev/null +++ b/queue-3.4/net-qmi_wwan-fix-oops-while-disconnecting.patch @@ -0,0 +1,104 @@ +From d9b8706843a501034d09bea63ca6723a2ed02b11 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= +Date: Thu, 21 Jun 2012 23:11:18 +0000 +Subject: net: qmi_wwan: fix Oops while disconnecting +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= + +commit d9b8706843a501034d09bea63ca6723a2ed02b11 upstream. + +usbnet_disconnect() will set intfdata to NULL before calling +the minidriver unbind function. The cdc_wdm subdriver cannot +know that it is disconnecting until the qmi_wwan unbind +function has called its disconnect function. This means that +we must be able to support the cdc_wdm subdriver operating +normally while usbnet_disconnect() is running, and in +particular that intfdata may be NULL. + +The only place this matters is in qmi_wwan_cdc_wdm_manage_power +which is called from cdc_wdm. Simply testing for NULL +intfdata there is sufficient to allow it to continue working +at all times. + +Fixes this Oops where a cdc-wdm device was closed while the +USB device was disconnecting, causing wdm_release to call +qmi_wwan_cdc_wdm_manage_power after intfdata was set to +NULL by usbnet_disconnect: + +[41819.087460] BUG: unable to handle kernel NULL pointer dereference at 00000080 +[41819.087815] IP: [] qmi_wwan_manage_power+0x68/0x90 [qmi_wwan] +[41819.088028] *pdpt = 000000000314f001 *pde = 0000000000000000 +[41819.088028] Oops: 0002 [#1] SMP +[41819.088028] Modules linked in: qmi_wwan option usb_wwan usbserial usbnet +cdc_wdm nls_iso8859_1 nls_cp437 vfat fat usb_storage bnep rfcomm bluetooth +parport_pc ppdev binfmt_misc iptable_nat nf_nat nf_conntrack_ipv4 +nf_conntrack nf_defrag_ipv4 iptable_mangle iptable_filter ip_tables +x_tables dm_crypt uvcvideo snd_hda_codec_realtek snd_hda_intel +videobuf2_core snd_hda_codec joydev videodev videobuf2_vmalloc +hid_multitouch snd_hwdep arc4 videobuf2_memops snd_pcm snd_seq_midi +snd_rawmidi snd_seq_midi_event ath9k mac80211 snd_seq ath9k_common ath9k_hw +ath snd_timer snd_seq_device sparse_keymap dm_multipath scsi_dh coretemp +mac_hid snd soundcore cfg80211 snd_page_alloc psmouse serio_raw microcode +lp parport dm_mirror dm_region_hash dm_log usbhid hid i915 drm_kms_helper +drm r8169 i2c_algo_bit wmi video [last unloaded: qmi_wwan] +[41819.088028] +[41819.088028] Pid: 23292, comm: qmicli Not tainted 3.4.0-5-generic #11-Ubuntu GIGABYTE T1005/T1005 +[41819.088028] EIP: 0060:[] EFLAGS: 00010246 CPU: 1 +[41819.088028] EIP is at qmi_wwan_manage_power+0x68/0x90 [qmi_wwan] +[41819.088028] EAX: 00000000 EBX: 00000000 ECX: 000000c3 EDX: 00000000 +[41819.088028] ESI: c3b27658 EDI: 00000000 EBP: c298bea4 ESP: c298be98 +[41819.088028] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 +[41819.088028] CR0: 8005003b CR2: 00000080 CR3: 3605e000 CR4: 000007f0 +[41819.088028] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000 +[41819.088028] DR6: ffff0ff0 DR7: 00000400 +[41819.088028] Process qmicli (pid: 23292, ti=c298a000 task=f343b280 task.ti=c298a000) +[41819.088028] Stack: +[41819.088028] 00000000 c3b27658 e2a80d00 c298beb0 f864051a c3b27600 c298bec0 f9027099 +[41819.088028] c2fd6000 00000008 c298bef0 c1147f96 00000001 00000000 00000000 f4e54790 +[41819.088028] ecf43a00 ecf43a00 c2fd6008 c2fd6000 ebbd7600 ffffffb9 c298bf08 c1144474 +[41819.088028] Call Trace: +[41819.088028] [] qmi_wwan_cdc_wdm_manage_power+0x1a/0x20 [qmi_wwan] +[41819.088028] [] wdm_release+0x69/0x70 [cdc_wdm] +[41819.088028] [] fput+0xe6/0x210 +[41819.088028] [] filp_close+0x54/0x80 +[41819.088028] [] put_files_struct+0x75/0xc0 +[41819.088028] [] exit_files+0x46/0x60 +[41819.088028] [] do_exit+0x141/0x780 +[41819.088028] [] ? wake_up_state+0xf/0x20 +[41819.088028] [] ? signal_wake_up+0x28/0x40 +[41819.088028] [] ? zap_other_threads+0x6b/0x80 +[41819.088028] [] do_group_exit+0x34/0xa0 +[41819.088028] [] sys_exit_group+0x18/0x20 +[41819.088028] [] sysenter_do_call+0x12/0x28 +[41819.088028] Code: 04 83 e7 01 c1 e7 03 0f b6 42 18 83 e0 f7 09 f8 88 42 +18 8b 43 04 e8 48 9a dd c8 89 f0 8b 5d f4 8b 75 f8 8b 7d fc 89 ec 5d c3 90 + ff 88 80 00 00 00 0f 94 c0 84 c0 75 b7 31 f6 8b 5d f4 89 f0 +[41819.088028] EIP: [] qmi_wwan_manage_power+0x68/0x90 [qmi_wwan] SS:ESP 0068:c298be98 +[41819.088028] CR2: 0000000000000080 +[41819.149492] ---[ end trace 0944479ff8257f55 ]--- + +Reported-by: Marius Bjørnstad Kotsbak +Signed-off-by: Bjørn Mork +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/usb/qmi_wwan.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/net/usb/qmi_wwan.c ++++ b/drivers/net/usb/qmi_wwan.c +@@ -197,6 +197,10 @@ err: + static int qmi_wwan_cdc_wdm_manage_power(struct usb_interface *intf, int on) + { + struct usbnet *dev = usb_get_intfdata(intf); ++ ++ /* can be called while disconnecting */ ++ if (!dev) ++ return 0; + return qmi_wwan_manage_power(dev, on); + } + diff --git a/queue-3.4/ocfs2-clear-unaligned-io-flag-when-dio-fails.patch b/queue-3.4/ocfs2-clear-unaligned-io-flag-when-dio-fails.patch new file mode 100644 index 00000000000..2cca9dd2bb7 --- /dev/null +++ b/queue-3.4/ocfs2-clear-unaligned-io-flag-when-dio-fails.patch @@ -0,0 +1,36 @@ +From 3e5d3c35a68c9a933bdbdd8685bd1a205b57e806 Mon Sep 17 00:00:00 2001 +From: Junxiao Bi +Date: Wed, 27 Jun 2012 17:09:55 +0800 +Subject: ocfs2: clear unaligned io flag when dio fails + +From: Junxiao Bi + +commit 3e5d3c35a68c9a933bdbdd8685bd1a205b57e806 upstream. + +The unaligned io flag is set in the kiocb when an unaligned +dio is issued, it should be cleared even when the dio fails, +or it may affect the following io which are using the same +kiocb. + +Signed-off-by: Junxiao Bi +Signed-off-by: Joel Becker +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ocfs2/file.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/fs/ocfs2/file.c ++++ b/fs/ocfs2/file.c +@@ -2422,8 +2422,10 @@ out_dio: + unaligned_dio = 0; + } + +- if (unaligned_dio) ++ if (unaligned_dio) { ++ ocfs2_iocb_clear_unaligned_aio(iocb); + atomic_dec(&OCFS2_I(inode)->ip_unaligned_aio); ++ } + + out: + if (rw_level != -1) diff --git a/queue-3.4/oprofile-perf-use-nr_cpus-instead-or-nr_cpumask_bits-for-static-array.patch b/queue-3.4/oprofile-perf-use-nr_cpus-instead-or-nr_cpumask_bits-for-static-array.patch new file mode 100644 index 00000000000..8a2cefe4b94 --- /dev/null +++ b/queue-3.4/oprofile-perf-use-nr_cpus-instead-or-nr_cpumask_bits-for-static-array.patch @@ -0,0 +1,41 @@ +From e734568b675c985db2026848fefaac01c22977a5 Mon Sep 17 00:00:00 2001 +From: Will Deacon +Date: Fri, 8 Jun 2012 16:16:04 +0100 +Subject: oprofile: perf: use NR_CPUS instead or nr_cpumask_bits for static array + +From: Will Deacon + +commit e734568b675c985db2026848fefaac01c22977a5 upstream. + +The OProfile perf backend uses a static array to keep track of the +perf events on the system. When compiling with CONFIG_CPUMASK_OFFSTACK=y +&& SMP, nr_cpumask_bits is not a compile-time constant and the build +will fail with: + +oprofile_perf.c:28: error: variably modified 'perf_events' at file scope + +This patch uses NR_CPUs instead of nr_cpumask_bits for the array +initialisation. If this causes space problems in the future, we can +always move to dynamic allocation for the events array. + +Cc: Matt Fleming +Reported-by: Russell King - ARM Linux +Signed-off-by: Will Deacon +Signed-off-by: Robert Richter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/oprofile/oprofile_perf.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/oprofile/oprofile_perf.c ++++ b/drivers/oprofile/oprofile_perf.c +@@ -25,7 +25,7 @@ static int oprofile_perf_enabled; + static DEFINE_MUTEX(oprofile_perf_mutex); + + static struct op_counter_config *counter_config; +-static struct perf_event **perf_events[nr_cpumask_bits]; ++static struct perf_event **perf_events[NR_CPUS]; + static int num_counters; + + /* diff --git a/queue-3.4/rtlwifi-rtl8192cu-new-usb-ids.patch b/queue-3.4/rtlwifi-rtl8192cu-new-usb-ids.patch new file mode 100644 index 00000000000..b62a3ce226b --- /dev/null +++ b/queue-3.4/rtlwifi-rtl8192cu-new-usb-ids.patch @@ -0,0 +1,43 @@ +From f63d7dabd5da9ef41f28f6d69b29bc084db0ca5a Mon Sep 17 00:00:00 2001 +From: Larry Finger +Date: Mon, 25 Jun 2012 18:01:12 -0500 +Subject: rtlwifi: rtl8192cu: New USB IDs + +From: Larry Finger + +commit f63d7dabd5da9ef41f28f6d69b29bc084db0ca5a upstream. + +The latest Realtek driver for the RTL8188CU and RTL8192CU chips adds three +new USB IDs. + +Reported-by: Xose Vazquez Perez +Signed-off-by: Larry Finger +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/rtlwifi/rtl8192cu/sw.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c ++++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c +@@ -301,9 +301,11 @@ static struct usb_device_id rtl8192c_usb + {RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/ + {RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/ + {RTL_USB_DEVICE(0x0846, 0x9041, rtl92cu_hal_cfg)}, /*NetGear WNA1000M*/ ++ {RTL_USB_DEVICE(0x0bda, 0x5088, rtl92cu_hal_cfg)}, /*Thinkware-CC&C*/ + {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ + {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ + {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/ ++ {RTL_USB_DEVICE(0x4856, 0x0091, rtl92cu_hal_cfg)}, /*NetweeN - Feixun*/ + /* HP - Lite-On ,8188CUS Slim Combo */ + {RTL_USB_DEVICE(0x103c, 0x1629, rtl92cu_hal_cfg)}, + {RTL_USB_DEVICE(0x13d3, 0x3357, rtl92cu_hal_cfg)}, /* AzureWave */ +@@ -345,6 +347,7 @@ static struct usb_device_id rtl8192c_usb + {RTL_USB_DEVICE(0x07b8, 0x8178, rtl92cu_hal_cfg)}, /*Funai -Abocom*/ + {RTL_USB_DEVICE(0x0846, 0x9021, rtl92cu_hal_cfg)}, /*Netgear-Sercomm*/ + {RTL_USB_DEVICE(0x0b05, 0x17ab, rtl92cu_hal_cfg)}, /*ASUS-Edimax*/ ++ {RTL_USB_DEVICE(0x0bda, 0x8186, rtl92cu_hal_cfg)}, /*Realtek 92CE-VAU*/ + {RTL_USB_DEVICE(0x0df6, 0x0061, rtl92cu_hal_cfg)}, /*Sitecom-Edimax*/ + {RTL_USB_DEVICE(0x0e66, 0x0019, rtl92cu_hal_cfg)}, /*Hawking-Edimax*/ + {RTL_USB_DEVICE(0x2001, 0x3307, rtl92cu_hal_cfg)}, /*D-Link-Cameo*/ diff --git a/queue-3.4/scsi-usb-storage-add-try_rc_10_first-flag.patch b/queue-3.4/scsi-usb-storage-add-try_rc_10_first-flag.patch new file mode 100644 index 00000000000..dbd773cf1f9 --- /dev/null +++ b/queue-3.4/scsi-usb-storage-add-try_rc_10_first-flag.patch @@ -0,0 +1,80 @@ +From 6a0bdffa0073857870a4ed1b4489762146359eb4 Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Wed, 20 Jun 2012 16:04:19 -0400 +Subject: SCSI & usb-storage: add try_rc_10_first flag + +From: Alan Stern + +commit 6a0bdffa0073857870a4ed1b4489762146359eb4 upstream. + +Several bug reports have been received recently for USB mass-storage +devices that don't handle READ CAPACITY(16) commands properly. They +report bogus sizes, in some cases becoming unusable as a result. + +The bugs were triggered by commit +09b6b51b0b6c1b9bb61815baf205e4d74c89ff04 (SCSI & usb-storage: add +flags for VPD pages and REPORT LUNS), which caused usb-storage to stop +overriding the SCSI level reported by devices. By default, the sd +driver will try READ CAPACITY(16) first for any device whose level is +above SCSI_SPC_2. + +It seems likely that any device large enough to require the use of +READ CAPACITY(16) (i.e., 2 TB or more) would be able to handle READ +CAPACITY(10) commands properly. Indeed, I don't know of any devices +that don't handle READ CAPACITY(10) properly. + +Therefore this patch (as1559) adds a new flag telling the sd driver +to try READ CAPACITY(10) before READ CAPACITY(16), and sets this flag +for every USB mass-storage device. If a device really is larger than +2 TB, sd will fall back to READ CAPACITY(16) just as it used to. + +This fixes Bugzilla #43391. + +Signed-off-by: Alan Stern +Acked-by: Hans de Goede +CC: "James E.J. Bottomley" +CC: Matthew Dharm +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/sd.c | 2 ++ + drivers/usb/storage/scsiglue.c | 6 ++++++ + include/scsi/scsi_device.h | 1 + + 3 files changed, 9 insertions(+) + +--- a/drivers/scsi/sd.c ++++ b/drivers/scsi/sd.c +@@ -1898,6 +1898,8 @@ static int sd_try_rc16_first(struct scsi + { + if (sdp->host->max_cmd_len < 16) + return 0; ++ if (sdp->try_rc_10_first) ++ return 0; + if (sdp->scsi_level > SCSI_SPC_2) + return 1; + if (scsi_device_protection(sdp)) +--- a/drivers/usb/storage/scsiglue.c ++++ b/drivers/usb/storage/scsiglue.c +@@ -202,6 +202,12 @@ static int slave_configure(struct scsi_d + if (us->fflags & US_FL_NO_READ_CAPACITY_16) + sdev->no_read_capacity_16 = 1; + ++ /* ++ * Many devices do not respond properly to READ_CAPACITY_16. ++ * Tell the SCSI layer to try READ_CAPACITY_10 first. ++ */ ++ sdev->try_rc_10_first = 1; ++ + /* assume SPC3 or latter devices support sense size > 18 */ + if (sdev->scsi_level > SCSI_SPC_2) + us->fflags |= US_FL_SANE_SENSE; +--- a/include/scsi/scsi_device.h ++++ b/include/scsi/scsi_device.h +@@ -151,6 +151,7 @@ struct scsi_device { + SD_LAST_BUGGY_SECTORS */ + unsigned no_read_disc_info:1; /* Avoid READ_DISC_INFO cmds */ + unsigned no_read_capacity_16:1; /* Avoid READ_CAPACITY_16 cmds */ ++ unsigned try_rc_10_first:1; /* Try READ_CAPACACITY_10 first */ + unsigned is_visible:1; /* is the device visible in sysfs */ + + DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */ diff --git a/queue-3.4/series b/queue-3.4/series index 496ec6d40f7..aeb642ef45f 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -87,3 +87,35 @@ mm-correctly-synchronize-rss-counters-at-exit-exec.patch pm-sleep-prevent-waiting-forever-on-asynchronous-suspend-after-abort.patch dmaengine-pl330-dont-complete-descriptor-for-cyclic-dma.patch nfs-force-the-legacy-idmapper-to-be-single-threaded.patch +clk-allow-late-cache-allocation-for-clk-parents.patch +clk-fix-parent-validation-in-__clk_set_parent.patch +gpiolib-wm8994-pay-attention-to-the-value-set-when-enabling-as-output.patch +usb-option-add-id-for-cellient-men-200.patch +usb-option-add-usb-id-for-novatel-ovation-mc551.patch +usb-cp210x-add-10-device-ids.patch +scsi-usb-storage-add-try_rc_10_first-flag.patch +usb-storage-revert-commit-afff07e61a52-add-090c-1000-to-unusal-devs.patch +cfg80211-fix-potential-deadlock-in-regulatory.patch +batman-adv-fix-skb-data-assignment.patch +batman-adv-only-drop-packets-of-known-wifi-clients.patch +ixgbe-do-not-pad-fcoe-frames-as-this-can-cause-issues-with.patch +can-c_can-precedence-error-in-c_can_chip_config.patch +can-flexcan-use-be32_to_cpup-to-handle-the-value-of-dt-entry.patch +usb-qmi_wwan-make-forced-int-4-whitelist-generic.patch +usb-qmi_wwan-add-zte-vodafone-k3520-z.patch +net-qmi_wwan-fix-gobi-device-probing.patch +net-qmi_wwan-fix-oops-while-disconnecting.patch +oprofile-perf-use-nr_cpus-instead-or-nr_cpumask_bits-for-static-array.patch +x86-compat-use-test_thread_flag-tif_ia32-in-compat-signal-delivery.patch +x86-cpufeature-rename-x86_feature_dts-to-x86_feature_dtherm.patch +igbvf-fix-divide-by-zero.patch +rtlwifi-rtl8192cu-new-usb-ids.patch +mac80211-clear-ifmgd-bssid-only-after-building-delba.patch +mac80211-correct-behaviour-on-unrecognised-action-frames.patch +mwifiex-fix-11n-rx-packet-drop-issue.patch +mwifiex-fix-wps-eapol-handshake-failure.patch +vfs-make-o_path-file-descriptors-usable-for-fchdir.patch +mtd-cafe_nand-fix-an-vs-mistake.patch +aio-make-kiocb-private-null-in-init_sync_kiocb.patch +ocfs2-clear-unaligned-io-flag-when-dio-fails.patch +iwlwifi-fix-activating-inactive-stations.patch diff --git a/queue-3.4/usb-cp210x-add-10-device-ids.patch b/queue-3.4/usb-cp210x-add-10-device-ids.patch new file mode 100644 index 00000000000..c4ac93cc6cc --- /dev/null +++ b/queue-3.4/usb-cp210x-add-10-device-ids.patch @@ -0,0 +1,58 @@ +From 3fcc8f96829776cf181918461923d1e3bbb831a2 Mon Sep 17 00:00:00 2001 +From: Craig Shelley +Date: Tue, 26 Jun 2012 23:20:04 +0100 +Subject: USB: CP210x Add 10 Device IDs + +From: Craig Shelley + +commit 3fcc8f96829776cf181918461923d1e3bbb831a2 upstream. + +This patch adds 10 device IDs for CP210x based devices from the following manufacturers: +Timewave +Clipsal +Festo +Link Instruments + +Signed-off-by: Craig Shelley +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/cp210x.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +--- a/drivers/usb/serial/cp210x.c ++++ b/drivers/usb/serial/cp210x.c +@@ -93,6 +93,7 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ + { USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */ + { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */ ++ { USB_DEVICE(0x10C4, 0x815F) }, /* Timewave HamLinkUSB */ + { USB_DEVICE(0x10C4, 0x818B) }, /* AVIT Research USB to TTL */ + { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */ + { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */ +@@ -134,7 +135,13 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */ + { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ + { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */ ++ { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */ ++ { USB_DEVICE(0x166A, 0x0301) }, /* Clipsal 5800PC C-Bus Wireless PC Interface */ + { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ ++ { USB_DEVICE(0x166A, 0x0304) }, /* Clipsal 5000CT2 C-Bus Black and White Touchscreen */ ++ { USB_DEVICE(0x166A, 0x0305) }, /* Clipsal C-5000CT2 C-Bus Spectrum Colour Touchscreen */ ++ { USB_DEVICE(0x166A, 0x0401) }, /* Clipsal L51xx C-Bus Architectural Dimmer */ ++ { USB_DEVICE(0x166A, 0x0101) }, /* Clipsal 5560884 C-Bus Multi-room Audio Matrix Switcher */ + { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ + { USB_DEVICE(0x16DC, 0x0010) }, /* W-IE-NE-R Plein & Baus GmbH PL512 Power Supply */ + { USB_DEVICE(0x16DC, 0x0011) }, /* W-IE-NE-R Plein & Baus GmbH RCM Remote Control for MARATON Power Supply */ +@@ -146,7 +153,11 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */ + { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ + { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */ ++ { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */ ++ { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */ + { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */ ++ { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */ ++ { USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */ + { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */ + { } /* Terminating Entry */ + }; diff --git a/queue-3.4/usb-option-add-id-for-cellient-men-200.patch b/queue-3.4/usb-option-add-id-for-cellient-men-200.patch new file mode 100644 index 00000000000..18044dbc601 --- /dev/null +++ b/queue-3.4/usb-option-add-id-for-cellient-men-200.patch @@ -0,0 +1,41 @@ +From 1e2c4e59d2b8797973471b4a287a43eac12a0f40 Mon Sep 17 00:00:00 2001 +From: Dmitry Shmygov +Date: Wed, 20 Jun 2012 15:51:40 +0400 +Subject: USB: option: add id for Cellient MEN-200 + +From: Dmitry Shmygov + +commit 1e2c4e59d2b8797973471b4a287a43eac12a0f40 upstream. + +Add vendor and product ID to option.c driver +for Cellient MEN-200 EVDO Rev.B 450MHz data module. +http://cellient.com + +Signed-off-by: Dmitry Shmygov +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -497,6 +497,10 @@ static void option_instat_callback(struc + /* MediaTek products */ + #define MEDIATEK_VENDOR_ID 0x0e8d + ++/* Cellient products */ ++#define CELLIENT_VENDOR_ID 0x2692 ++#define CELLIENT_PRODUCT_MEN200 0x9005 ++ + /* some devices interfaces need special handling due to a number of reasons */ + enum option_blacklist_reason { + OPTION_BLACKLIST_NONE = 0, +@@ -1233,6 +1237,7 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a1, 0xff, 0x02, 0x01) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x02, 0x01) }, /* MediaTek MT6276M modem & app port */ ++ { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, + { } /* Terminating entry */ + }; + MODULE_DEVICE_TABLE(usb, option_ids); diff --git a/queue-3.4/usb-option-add-usb-id-for-novatel-ovation-mc551.patch b/queue-3.4/usb-option-add-usb-id-for-novatel-ovation-mc551.patch new file mode 100644 index 00000000000..13fe4950dcb --- /dev/null +++ b/queue-3.4/usb-option-add-usb-id-for-novatel-ovation-mc551.patch @@ -0,0 +1,38 @@ +From 065b07e7a14676f4138ce4619d229c0be5a74230 Mon Sep 17 00:00:00 2001 +From: Forest Bond +Date: Fri, 22 Jun 2012 10:30:38 -0400 +Subject: USB: option: Add USB ID for Novatel Ovation MC551 + +From: Forest Bond + +commit 065b07e7a14676f4138ce4619d229c0be5a74230 upstream. + +This device is also known as the Verizon USB551L. + +Signed-off-by: Forest Bond +Acked-by: Dan Williams +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -236,6 +236,7 @@ static void option_instat_callback(struc + #define NOVATELWIRELESS_PRODUCT_G1 0xA001 + #define NOVATELWIRELESS_PRODUCT_G1_M 0xA002 + #define NOVATELWIRELESS_PRODUCT_G2 0xA010 ++#define NOVATELWIRELESS_PRODUCT_MC551 0xB001 + + /* AMOI PRODUCTS */ + #define AMOI_VENDOR_ID 0x1614 +@@ -738,6 +739,8 @@ static const struct usb_device_id option + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1) }, + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1_M) }, + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G2) }, ++ /* Novatel Ovation MC551 a.k.a. Verizon USB551L */ ++ { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC551, 0xff, 0xff, 0xff) }, + + { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) }, + { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) }, diff --git a/queue-3.4/usb-qmi_wwan-add-zte-vodafone-k3520-z.patch b/queue-3.4/usb-qmi_wwan-add-zte-vodafone-k3520-z.patch new file mode 100644 index 00000000000..8e963fabb7f --- /dev/null +++ b/queue-3.4/usb-qmi_wwan-add-zte-vodafone-k3520-z.patch @@ -0,0 +1,55 @@ +From f7142e6c226076fd40c2ebaad9fb0c9a631b790e Mon Sep 17 00:00:00 2001 +From: "Andrew Bird (Sphere Systems)" +Date: Sat, 19 May 2012 22:28:38 +0000 +Subject: USB: qmi_wwan: Add ZTE (Vodafone) K3520-Z +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: "Andrew Bird (Sphere Systems)" + +commit f7142e6c226076fd40c2ebaad9fb0c9a631b790e upstream. + +Signed-off-by: Andrew Bird +Acked-by: Bjørn Mork +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/usb/qmi_wwan.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +--- a/drivers/net/usb/qmi_wwan.c ++++ b/drivers/net/usb/qmi_wwan.c +@@ -356,6 +356,15 @@ static const struct driver_info qmi_wwan + }; + + /* ZTE suck at making USB descriptors */ ++static const struct driver_info qmi_wwan_force_int1 = { ++ .description = "Qualcomm WWAN/QMI device", ++ .flags = FLAG_WWAN, ++ .bind = qmi_wwan_bind_shared, ++ .unbind = qmi_wwan_unbind_shared, ++ .manage_power = qmi_wwan_manage_power, ++ .data = BIT(1), /* interface whitelist bitmap */ ++}; ++ + static const struct driver_info qmi_wwan_force_int4 = { + .description = "Qualcomm WWAN/QMI device", + .flags = FLAG_WWAN, +@@ -430,6 +439,15 @@ static const struct usb_device_id produc + .bInterfaceProtocol = 0xff, + .driver_info = (unsigned long)&qmi_wwan_force_int4, + }, ++ { /* ZTE (Vodafone) K3520-Z */ ++ .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, ++ .idVendor = 0x19d2, ++ .idProduct = 0x0055, ++ .bInterfaceClass = 0xff, ++ .bInterfaceSubClass = 0xff, ++ .bInterfaceProtocol = 0xff, ++ .driver_info = (unsigned long)&qmi_wwan_force_int1, ++ }, + { /* ZTE (Vodafone) K3565-Z */ + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, + .idVendor = 0x19d2, diff --git a/queue-3.4/usb-qmi_wwan-make-forced-int-4-whitelist-generic.patch b/queue-3.4/usb-qmi_wwan-make-forced-int-4-whitelist-generic.patch new file mode 100644 index 00000000000..06c287133c5 --- /dev/null +++ b/queue-3.4/usb-qmi_wwan-make-forced-int-4-whitelist-generic.patch @@ -0,0 +1,48 @@ +From 00001880cd8faaa349fe2ebb158f7e0cd8026048 Mon Sep 17 00:00:00 2001 +From: "Andrew Bird (Sphere Systems)" +Date: Sat, 19 May 2012 22:28:36 +0000 +Subject: USB: qmi_wwan: Make forced int 4 whitelist generic +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: "Andrew Bird (Sphere Systems)" + +commit 00001880cd8faaa349fe2ebb158f7e0cd8026048 upstream. + +Change the forced interface 4 whitelist to use the generic shared +binder instead of the Gobi specific one. Certain ZTE devices +(K3520-Z & K3765-Z) don't work with the Gobi version, but function +quite happily with the generic. This has been tested with the following +devices: +K3520-Z +K3565-Z +K3765-Z +K4505-Z +It hasn't been tested with the ZTE MF820D, which is the only other +device that uses this whitelist at present. Although Bjorn doesn't +expect any problems, any testing with that device would be appreciated. + +Signed-off-by: Andrew Bird +Acked-by: Bjørn Mork +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/usb/qmi_wwan.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/net/usb/qmi_wwan.c ++++ b/drivers/net/usb/qmi_wwan.c +@@ -357,9 +357,9 @@ static const struct driver_info qmi_wwan + + /* ZTE suck at making USB descriptors */ + static const struct driver_info qmi_wwan_force_int4 = { +- .description = "Qualcomm Gobi wwan/QMI device", ++ .description = "Qualcomm WWAN/QMI device", + .flags = FLAG_WWAN, +- .bind = qmi_wwan_bind_gobi, ++ .bind = qmi_wwan_bind_shared, + .unbind = qmi_wwan_unbind_shared, + .manage_power = qmi_wwan_manage_power, + .data = BIT(4), /* interface whitelist bitmap */ diff --git a/queue-3.4/usb-storage-revert-commit-afff07e61a52-add-090c-1000-to-unusal-devs.patch b/queue-3.4/usb-storage-revert-commit-afff07e61a52-add-090c-1000-to-unusal-devs.patch new file mode 100644 index 00000000000..27c10e8900f --- /dev/null +++ b/queue-3.4/usb-storage-revert-commit-afff07e61a52-add-090c-1000-to-unusal-devs.patch @@ -0,0 +1,40 @@ +From 0070513b5e005161a7a7fd9a3f48f982b41eb094 Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Wed, 20 Jun 2012 16:04:30 -0400 +Subject: usb-storage: revert commit afff07e61a52 (Add 090c:1000 to unusal-devs) + +From: Alan Stern + +commit 0070513b5e005161a7a7fd9a3f48f982b41eb094 upstream. + +This patch (as1560) reverts commit +afff07e61a5243e14ee3f0a272a0380cd744a8a3 (usb-storage: Add 090c:1000 +to unusal-devs). It is no longer needed, because usb-storage now +tells the sd driver to try READ CAPACITY(10) before READ CAPACITY(16) +for every USB mass-storage device. + +Signed-off-by: Alan Stern +Acked-by: Hans de Goede +CC: Matthew Dharm +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/storage/unusual_devs.h | 7 ------- + 1 file changed, 7 deletions(-) + +--- a/drivers/usb/storage/unusual_devs.h ++++ b/drivers/usb/storage/unusual_devs.h +@@ -1107,13 +1107,6 @@ UNUSUAL_DEV( 0x090a, 0x1200, 0x0000, 0x9 + USB_SC_RBC, USB_PR_BULK, NULL, + 0 ), + +-/* Feiya QDI U2 DISK, reported by Hans de Goede */ +-UNUSUAL_DEV( 0x090c, 0x1000, 0x0000, 0xffff, +- "Feiya", +- "QDI U2 DISK", +- USB_SC_DEVICE, USB_PR_DEVICE, NULL, +- US_FL_NO_READ_CAPACITY_16 ), +- + /* aeb */ + UNUSUAL_DEV( 0x090c, 0x1132, 0x0000, 0xffff, + "Feiya", diff --git a/queue-3.4/vfs-make-o_path-file-descriptors-usable-for-fchdir.patch b/queue-3.4/vfs-make-o_path-file-descriptors-usable-for-fchdir.patch new file mode 100644 index 00000000000..a4a2b425eb4 --- /dev/null +++ b/queue-3.4/vfs-make-o_path-file-descriptors-usable-for-fchdir.patch @@ -0,0 +1,53 @@ +From 332a2e1244bd08b9e3ecd378028513396a004a24 Mon Sep 17 00:00:00 2001 +From: Linus Torvalds +Date: Sat, 7 Jul 2012 10:17:00 -0700 +Subject: vfs: make O_PATH file descriptors usable for 'fchdir()' +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Linus Torvalds + +commit 332a2e1244bd08b9e3ecd378028513396a004a24 upstream. + +We already use them for openat() and friends, but fchdir() also wants to +be able to use O_PATH file descriptors. This should make it comparable +to the O_SEARCH of Solaris. In particular, O_PATH allows you to access +(not-quite-open) a directory you don't have read persmission to, only +execute permission. + +Noticed during development of multithread support for ksh93. + +Reported-by: ольга крыжановская +Cc: Al Viro +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/open.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/fs/open.c ++++ b/fs/open.c +@@ -396,10 +396,10 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd + { + struct file *file; + struct inode *inode; +- int error; ++ int error, fput_needed; + + error = -EBADF; +- file = fget(fd); ++ file = fget_raw_light(fd, &fput_needed); + if (!file) + goto out; + +@@ -413,7 +413,7 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd + if (!error) + set_fs_pwd(current->fs, &file->f_path); + out_putf: +- fput(file); ++ fput_light(file, fput_needed); + out: + return error; + } diff --git a/queue-3.4/x86-compat-use-test_thread_flag-tif_ia32-in-compat-signal-delivery.patch b/queue-3.4/x86-compat-use-test_thread_flag-tif_ia32-in-compat-signal-delivery.patch new file mode 100644 index 00000000000..53a4ba06861 --- /dev/null +++ b/queue-3.4/x86-compat-use-test_thread_flag-tif_ia32-in-compat-signal-delivery.patch @@ -0,0 +1,34 @@ +From 0b91f45b23cb73ce11acdc3cf4c6efd4441e3b3e Mon Sep 17 00:00:00 2001 +From: Suresh Siddha +Date: Thu, 14 Jun 2012 18:07:15 -0700 +Subject: x86, compat: Use test_thread_flag(TIF_IA32) in compat signal delivery + +From: Suresh Siddha + +commit 0b91f45b23cb73ce11acdc3cf4c6efd4441e3b3e upstream. + +Signal delivery compat path may not have the 'TS_COMPAT' flag (that +flag indicates how we entered the kernel). So use +test_thread_flag(TIF_IA32) instead of is_ia32_task(): one of the +functions of TIF_IA32 is just what kind of signal frame we want. + +Signed-off-by: Suresh Siddha +Link: http://lkml.kernel.org/r/1339722435.3475.57.camel@sbsiddha-desk.sc.intel.com +Signed-off-by: H. Peter Anvin +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/ia32/ia32_signal.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/x86/ia32/ia32_signal.c ++++ b/arch/x86/ia32/ia32_signal.c +@@ -38,7 +38,7 @@ + int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) + { + int err = 0; +- bool ia32 = is_ia32_task(); ++ bool ia32 = test_thread_flag(TIF_IA32); + + if (!access_ok(VERIFY_WRITE, to, sizeof(compat_siginfo_t))) + return -EFAULT; diff --git a/queue-3.4/x86-cpufeature-rename-x86_feature_dts-to-x86_feature_dtherm.patch b/queue-3.4/x86-cpufeature-rename-x86_feature_dts-to-x86_feature_dtherm.patch new file mode 100644 index 00000000000..903c0fde955 --- /dev/null +++ b/queue-3.4/x86-cpufeature-rename-x86_feature_dts-to-x86_feature_dtherm.patch @@ -0,0 +1,74 @@ +From 4ad33411308596f2f918603509729922a1ec4411 Mon Sep 17 00:00:00 2001 +From: "H. Peter Anvin" +Date: Fri, 22 Jun 2012 10:58:06 -0700 +Subject: x86, cpufeature: Rename X86_FEATURE_DTS to X86_FEATURE_DTHERM + +From: "H. Peter Anvin" + +commit 4ad33411308596f2f918603509729922a1ec4411 upstream. + +It makes sense to label "Digital Thermal Sensor" as "DTS", but +unfortunately the string "dts" was already used for "Debug Store", and +/proc/cpuinfo is a user space ABI. + +Therefore, rename this to "dtherm". + +This conflict went into mainline via the hwmon tree without any x86 +maintainer ack, and without any kind of hint in the subject. + + a4659053 x86/hwmon: fix initialization of coretemp + +Reported-by: Jean Delvare +Link: http://lkml.kernel.org/r/4FE34BCB.5050305@linux.intel.com +Cc: Jan Beulich +Signed-off-by: H. Peter Anvin +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/include/asm/cpufeature.h | 2 +- + arch/x86/kernel/cpu/scattered.c | 2 +- + drivers/hwmon/coretemp.c | 4 ++-- + 3 files changed, 4 insertions(+), 4 deletions(-) + +--- a/arch/x86/include/asm/cpufeature.h ++++ b/arch/x86/include/asm/cpufeature.h +@@ -176,7 +176,7 @@ + #define X86_FEATURE_XSAVEOPT (7*32+ 4) /* Optimized Xsave */ + #define X86_FEATURE_PLN (7*32+ 5) /* Intel Power Limit Notification */ + #define X86_FEATURE_PTS (7*32+ 6) /* Intel Package Thermal Status */ +-#define X86_FEATURE_DTS (7*32+ 7) /* Digital Thermal Sensor */ ++#define X86_FEATURE_DTHERM (7*32+ 7) /* Digital Thermal Sensor */ + #define X86_FEATURE_HW_PSTATE (7*32+ 8) /* AMD HW-PState */ + + /* Virtualization flags: Linux defined, word 8 */ +--- a/arch/x86/kernel/cpu/scattered.c ++++ b/arch/x86/kernel/cpu/scattered.c +@@ -31,7 +31,7 @@ void __cpuinit init_scattered_cpuid_feat + const struct cpuid_bit *cb; + + static const struct cpuid_bit __cpuinitconst cpuid_bits[] = { +- { X86_FEATURE_DTS, CR_EAX, 0, 0x00000006, 0 }, ++ { X86_FEATURE_DTHERM, CR_EAX, 0, 0x00000006, 0 }, + { X86_FEATURE_IDA, CR_EAX, 1, 0x00000006, 0 }, + { X86_FEATURE_ARAT, CR_EAX, 2, 0x00000006, 0 }, + { X86_FEATURE_PLN, CR_EAX, 4, 0x00000006, 0 }, +--- a/drivers/hwmon/coretemp.c ++++ b/drivers/hwmon/coretemp.c +@@ -664,7 +664,7 @@ static void __cpuinit get_core_online(un + * sensors. We check this bit only, all the early CPUs + * without thermal sensors will be filtered out. + */ +- if (!cpu_has(c, X86_FEATURE_DTS)) ++ if (!cpu_has(c, X86_FEATURE_DTHERM)) + return; + + if (!pdev) { +@@ -765,7 +765,7 @@ static struct notifier_block coretemp_cp + }; + + static const struct x86_cpu_id coretemp_ids[] = { +- { X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_DTS }, ++ { X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_DTHERM }, + {} + }; + MODULE_DEVICE_TABLE(x86cpu, coretemp_ids);