From 5db9c08124d2d419b4d44cfc3ac67785d5867d10 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 10 Jul 2012 17:54:32 -0700 Subject: [PATCH] 3.0-stable patches added patches: acpi-sysfs.c-strlen-fix.patch acpi-x86-fix-dell-m6600-acpi-reboot-regression-via-dmi.patch can-c_can-precedence-error-in-c_can_chip_config.patch cfg80211-fix-potential-deadlock-in-regulatory.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 oprofile-perf-use-nr_cpus-instead-or-nr_cpumask_bits-for-static-array.patch stable-allow-merging-of-backports-for-serious-user-visible-performance-issues.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 vfs-make-o_path-file-descriptors-usable-for-fchdir.patch --- queue-3.0/acpi-sysfs.c-strlen-fix.patch | 41 +++++ ...m6600-acpi-reboot-regression-via-dmi.patch | 40 +++++ ...recedence-error-in-c_can_chip_config.patch | 36 +++++ ...fix-potential-deadlock-in-regulatory.patch | 142 ++++++++++++++++++ ...aviour-on-unrecognised-action-frames.patch | 45 ++++++ .../mtd-cafe_nand-fix-an-vs-mistake.patch | 37 +++++ ...mwifiex-fix-11n-rx-packet-drop-issue.patch | 82 ++++++++++ ...-or-nr_cpumask_bits-for-static-array.patch | 41 +++++ queue-3.0/series | 13 ++ ...ious-user-visible-performance-issues.patch | 47 ++++++ queue-3.0/usb-cp210x-add-10-device-ids.patch | 58 +++++++ ...b-option-add-id-for-cellient-men-200.patch | 41 +++++ ...add-usb-id-for-novatel-ovation-mc551.patch | 38 +++++ ...h-file-descriptors-usable-for-fchdir.patch | 53 +++++++ 14 files changed, 714 insertions(+) create mode 100644 queue-3.0/acpi-sysfs.c-strlen-fix.patch create mode 100644 queue-3.0/acpi-x86-fix-dell-m6600-acpi-reboot-regression-via-dmi.patch create mode 100644 queue-3.0/can-c_can-precedence-error-in-c_can_chip_config.patch create mode 100644 queue-3.0/cfg80211-fix-potential-deadlock-in-regulatory.patch create mode 100644 queue-3.0/mac80211-correct-behaviour-on-unrecognised-action-frames.patch create mode 100644 queue-3.0/mtd-cafe_nand-fix-an-vs-mistake.patch create mode 100644 queue-3.0/mwifiex-fix-11n-rx-packet-drop-issue.patch create mode 100644 queue-3.0/oprofile-perf-use-nr_cpus-instead-or-nr_cpumask_bits-for-static-array.patch create mode 100644 queue-3.0/stable-allow-merging-of-backports-for-serious-user-visible-performance-issues.patch create mode 100644 queue-3.0/usb-cp210x-add-10-device-ids.patch create mode 100644 queue-3.0/usb-option-add-id-for-cellient-men-200.patch create mode 100644 queue-3.0/usb-option-add-usb-id-for-novatel-ovation-mc551.patch create mode 100644 queue-3.0/vfs-make-o_path-file-descriptors-usable-for-fchdir.patch diff --git a/queue-3.0/acpi-sysfs.c-strlen-fix.patch b/queue-3.0/acpi-sysfs.c-strlen-fix.patch new file mode 100644 index 00000000000..b22e1b19143 --- /dev/null +++ b/queue-3.0/acpi-sysfs.c-strlen-fix.patch @@ -0,0 +1,41 @@ +From 9f132652d94c96476b0b0a8caf0c10e96ab10fa8 Mon Sep 17 00:00:00 2001 +From: Pavel Vasilyev +Date: Tue, 5 Jun 2012 00:02:05 -0400 +Subject: ACPI sysfs.c strlen fix + +From: Pavel Vasilyev + +commit 9f132652d94c96476b0b0a8caf0c10e96ab10fa8 upstream. + +Current code is ignoring the last character of "enable" and "disable" +in comparisons. + +https://bugzilla.kernel.org/show_bug.cgi?id=33732 + +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/sysfs.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/acpi/sysfs.c ++++ b/drivers/acpi/sysfs.c +@@ -173,7 +173,7 @@ static int param_set_trace_state(const c + { + int result = 0; + +- if (!strncmp(val, "enable", strlen("enable") - 1)) { ++ if (!strncmp(val, "enable", strlen("enable"))) { + result = acpi_debug_trace(trace_method_name, trace_debug_level, + trace_debug_layer, 0); + if (result) +@@ -181,7 +181,7 @@ static int param_set_trace_state(const c + goto exit; + } + +- if (!strncmp(val, "disable", strlen("disable") - 1)) { ++ if (!strncmp(val, "disable", strlen("disable"))) { + int name = 0; + result = acpi_debug_trace((char *)&name, trace_debug_level, + trace_debug_layer, 0); diff --git a/queue-3.0/acpi-x86-fix-dell-m6600-acpi-reboot-regression-via-dmi.patch b/queue-3.0/acpi-x86-fix-dell-m6600-acpi-reboot-regression-via-dmi.patch new file mode 100644 index 00000000000..5d1c454d245 --- /dev/null +++ b/queue-3.0/acpi-x86-fix-dell-m6600-acpi-reboot-regression-via-dmi.patch @@ -0,0 +1,40 @@ +From 76eb9a30db4bc8fd172f9155247264b5f2686d7b Mon Sep 17 00:00:00 2001 +From: Zhang Rui +Date: Mon, 20 Feb 2012 14:20:06 +0800 +Subject: ACPI, x86: fix Dell M6600 ACPI reboot regression via DMI + +From: Zhang Rui + +commit 76eb9a30db4bc8fd172f9155247264b5f2686d7b upstream. + +Dell Precision M6600 is known to require PCI reboot, so add it to +the reboot blacklist in pci_reboot_dmi_table[]. + +https://bugzilla.kernel.org/show_bug.cgi?id=42749 + +cc: x86@kernel.org +Signed-off-by: Zhang Rui +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/reboot.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/arch/x86/kernel/reboot.c ++++ b/arch/x86/kernel/reboot.c +@@ -452,6 +452,14 @@ static struct dmi_system_id __initdata p + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6420"), + }, + }, ++ { /* Handle problems with rebooting on the Precision M6600. */ ++ .callback = set_pci_reboot, ++ .ident = "Dell OptiPlex 990", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"), ++ }, ++ }, + { } + }; + diff --git a/queue-3.0/can-c_can-precedence-error-in-c_can_chip_config.patch b/queue-3.0/can-c_can-precedence-error-in-c_can_chip_config.patch new file mode 100644 index 00000000000..43d8b1ce2a4 --- /dev/null +++ b/queue-3.0/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 +@@ -592,8 +592,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.0/cfg80211-fix-potential-deadlock-in-regulatory.patch b/queue-3.0/cfg80211-fix-potential-deadlock-in-regulatory.patch new file mode 100644 index 00000000000..5fc8f93bcbd --- /dev/null +++ b/queue-3.0/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 +@@ -1358,7 +1358,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.0/mac80211-correct-behaviour-on-unrecognised-action-frames.patch b/queue-3.0/mac80211-correct-behaviour-on-unrecognised-action-frames.patch new file mode 100644 index 00000000000..b6d2789c4c0 --- /dev/null +++ b/queue-3.0/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 +@@ -2291,7 +2291,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. +@@ -2301,6 +2301,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.0/mtd-cafe_nand-fix-an-vs-mistake.patch b/queue-3.0/mtd-cafe_nand-fix-an-vs-mistake.patch new file mode 100644 index 00000000000..70acdb3a632 --- /dev/null +++ b/queue-3.0/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.0/mwifiex-fix-11n-rx-packet-drop-issue.patch b/queue-3.0/mwifiex-fix-11n-rx-packet-drop-issue.patch new file mode 100644 index 00000000000..523f38b3c92 --- /dev/null +++ b/queue-3.0/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 +@@ -267,7 +267,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; +@@ -612,5 +613,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 +@@ -406,6 +406,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.0/oprofile-perf-use-nr_cpus-instead-or-nr_cpumask_bits-for-static-array.patch b/queue-3.0/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.0/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.0/series b/queue-3.0/series index a482ab89284..d722683350e 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -29,3 +29,16 @@ drm-nouveau-fbcon-using-nv_two_heads-is-not-a-good-idea.patch drm-i915-fix-edp-blank-screen-after-s3-resume-on-hp-desktops.patch acpi_pad-fix-power_saving-thread-deadlock.patch acpi-add-a-quirk-for-amilo-pro-v2030-to-ignore-the-timer-overriding.patch +acpi-x86-fix-dell-m6600-acpi-reboot-regression-via-dmi.patch +acpi-sysfs.c-strlen-fix.patch +stable-allow-merging-of-backports-for-serious-user-visible-performance-issues.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 +cfg80211-fix-potential-deadlock-in-regulatory.patch +can-c_can-precedence-error-in-c_can_chip_config.patch +oprofile-perf-use-nr_cpus-instead-or-nr_cpumask_bits-for-static-array.patch +mac80211-correct-behaviour-on-unrecognised-action-frames.patch +mwifiex-fix-11n-rx-packet-drop-issue.patch +vfs-make-o_path-file-descriptors-usable-for-fchdir.patch +mtd-cafe_nand-fix-an-vs-mistake.patch diff --git a/queue-3.0/stable-allow-merging-of-backports-for-serious-user-visible-performance-issues.patch b/queue-3.0/stable-allow-merging-of-backports-for-serious-user-visible-performance-issues.patch new file mode 100644 index 00000000000..488feff79fb --- /dev/null +++ b/queue-3.0/stable-allow-merging-of-backports-for-serious-user-visible-performance-issues.patch @@ -0,0 +1,47 @@ +From eb3979f64d25120d60b9e761a4c58f70b1a02f86 Mon Sep 17 00:00:00 2001 +From: Mel Gorman +Date: Thu, 21 Jun 2012 11:36:50 +0100 +Subject: stable: Allow merging of backports for serious user-visible performance issues + +From: Mel Gorman + +commit eb3979f64d25120d60b9e761a4c58f70b1a02f86 upstream. + +Distribution kernel maintainers routinely backport fixes for users that +were deemed important but not "something critical" as defined by the +rules. To users of these kernels they are very serious and failing to fix +them reduces the value of -stable. + +The problem is that the patches fixing these issues are often subtle and +prone to regressions in other ways and need greater care and attention. +To combat this, these "serious" backports should have a higher barrier +to entry. + +This patch relaxes the rules to allow a distribution maintainer to merge +to -stable a backported patch or small series that fixes a "serious" +user-visible performance issue. They should include additional information on +the user-visible bug affected and a link to the bugzilla entry if available. +The same rules about the patch being already in mainline still apply. + +Signed-off-by: Mel Gorman +Signed-off-by: Greg Kroah-Hartman + +--- + Documentation/stable_kernel_rules.txt | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/Documentation/stable_kernel_rules.txt ++++ b/Documentation/stable_kernel_rules.txt +@@ -12,6 +12,12 @@ Rules on what kind of patches are accept + marked CONFIG_BROKEN), an oops, a hang, data corruption, a real + security issue, or some "oh, that's not good" issue. In short, something + critical. ++ - Serious issues as reported by a user of a distribution kernel may also ++ be considered if they fix a notable performance or interactivity issue. ++ As these fixes are not as obvious and have a higher risk of a subtle ++ regression they should only be submitted by a distribution kernel ++ maintainer and include an addendum linking to a bugzilla entry if it ++ exists and additional information on the user-visible impact. + - New device IDs and quirks are also accepted. + - No "theoretical race condition" issues, unless an explanation of how the + race can be exploited is also provided. diff --git a/queue-3.0/usb-cp210x-add-10-device-ids.patch b/queue-3.0/usb-cp210x-add-10-device-ids.patch new file mode 100644 index 00000000000..c4ac93cc6cc --- /dev/null +++ b/queue-3.0/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.0/usb-option-add-id-for-cellient-men-200.patch b/queue-3.0/usb-option-add-id-for-cellient-men-200.patch new file mode 100644 index 00000000000..3aa7df411a6 --- /dev/null +++ b/queue-3.0/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, +@@ -1231,6 +1235,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.0/usb-option-add-usb-id-for-novatel-ovation-mc551.patch b/queue-3.0/usb-option-add-usb-id-for-novatel-ovation-mc551.patch new file mode 100644 index 00000000000..13fe4950dcb --- /dev/null +++ b/queue-3.0/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.0/vfs-make-o_path-file-descriptors-usable-for-fchdir.patch b/queue-3.0/vfs-make-o_path-file-descriptors-usable-for-fchdir.patch new file mode 100644 index 00000000000..a4a2b425eb4 --- /dev/null +++ b/queue-3.0/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; + } -- 2.47.3