summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2011-06-14 16:47:37 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2011-06-14 16:47:37 -0700
commit95f6efca1e53868e0f76109b7a3e0e44fd752085 (patch)
treef464625ac27def2b435ce446007e66909cde9d2d
parent37832412a68e25c85c4b9341761a0f811d1c4dd9 (diff)
downloadstable-queue-95f6efca1e53868e0f76109b7a3e0e44fd752085.tar.gz
.39 patches
-rw-r--r--queue-2.6.39/cpufreq-remove-cpufreq_stats-sysfs-entries-on-module-unload.patch30
-rw-r--r--queue-2.6.39/igb-fix-i350-sr-iov-failture.patch40
-rw-r--r--queue-2.6.39/iwl4965-set-tx-power-after-rxon_assoc.patch45
-rw-r--r--queue-2.6.39/iwlagn-use-cts-to-self-protection-on-5000-adapters-series.patch100
-rw-r--r--queue-2.6.39/mac80211-fix-ibss-teardown-race.patch53
-rw-r--r--queue-2.6.39/md-check-hot_remove_disk-when-removing-disk.patch74
-rw-r--r--queue-2.6.39/md-raid5-fix-fua-request-handling-in-ops_run_io.patch55
-rw-r--r--queue-2.6.39/md-raid5-fix-raid5_set_bi_hw_segments.patch36
-rw-r--r--queue-2.6.39/series11
-rw-r--r--queue-2.6.39/tomoyo-fix-oops-in-tomoyo_mount_acl.patch33
-rw-r--r--queue-2.6.39/x86-cpu-hotplug-prevent-softirq-wakeup-on-wrong-cpu.patch78
-rw-r--r--queue-2.6.39/x86-devicetree-add-missing-early_init_dt_setup_initrd_arch.patch59
12 files changed, 614 insertions, 0 deletions
diff --git a/queue-2.6.39/cpufreq-remove-cpufreq_stats-sysfs-entries-on-module-unload.patch b/queue-2.6.39/cpufreq-remove-cpufreq_stats-sysfs-entries-on-module-unload.patch
new file mode 100644
index 0000000000..9ec1548d5e
--- /dev/null
+++ b/queue-2.6.39/cpufreq-remove-cpufreq_stats-sysfs-entries-on-module-unload.patch
@@ -0,0 +1,30 @@
+From 13f067537f34456443f61c950cd6dc37d1d5f3ee Mon Sep 17 00:00:00 2001
+From: Dave Jones <davej@redhat.com>
+Date: Sun, 12 Jun 2011 16:35:28 -0400
+Subject: CPUFREQ: Remove cpufreq_stats sysfs entries on module unload.
+
+From: Dave Jones <davej@redhat.com>
+
+commit 13f067537f34456443f61c950cd6dc37d1d5f3ee upstream.
+
+cpufreq_stats leaves behind its sysfs entries, which causes a panic
+when something stumbled across them.
+(Discovered by unloading cpufreq_stats while powertop was loaded).
+
+Signed-off-by: Dave Jones <davej@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/cpufreq/cpufreq_stats.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/cpufreq/cpufreq_stats.c
++++ b/drivers/cpufreq/cpufreq_stats.c
+@@ -388,6 +388,7 @@ static void __exit cpufreq_stats_exit(vo
+ unregister_hotcpu_notifier(&cpufreq_stat_cpu_notifier);
+ for_each_online_cpu(cpu) {
+ cpufreq_stats_free_table(cpu);
++ cpufreq_stats_free_sysfs(cpu);
+ }
+ }
+
diff --git a/queue-2.6.39/igb-fix-i350-sr-iov-failture.patch b/queue-2.6.39/igb-fix-i350-sr-iov-failture.patch
new file mode 100644
index 0000000000..4db0ba9ce1
--- /dev/null
+++ b/queue-2.6.39/igb-fix-i350-sr-iov-failture.patch
@@ -0,0 +1,40 @@
+From 665c8c8ee405738375b679246b49342ce38ba056 Mon Sep 17 00:00:00 2001
+From: "Williams, Mitch A" <mitch.a.williams@intel.com>
+Date: Tue, 7 Jun 2011 14:22:57 -0700
+Subject: igb: fix i350 SR-IOV failture
+
+From: "Williams, Mitch A" <mitch.a.williams@intel.com>
+
+commit 665c8c8ee405738375b679246b49342ce38ba056 upstream.
+
+When SR-IOV is enabled, i350 devices fail to pass traffic. This is due to
+the driver attempting to enable RSS on the PF device, which is not
+supported by the i350.
+
+When max_vfs is specified on an i350 adapter, set the number of RSS queues
+to 1.
+
+This issue affects 2.6.39 as well.
+
+Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
+Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/igb/igb_main.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/net/igb/igb_main.c
++++ b/drivers/net/igb/igb_main.c
+@@ -2372,6 +2372,9 @@ static int __devinit igb_sw_init(struct
+ }
+ #endif /* CONFIG_PCI_IOV */
+ adapter->rss_queues = min_t(u32, IGB_MAX_RX_QUEUES, num_online_cpus());
++ /* i350 cannot do RSS and SR-IOV at the same time */
++ if (hw->mac.type == e1000_i350 && adapter->vfs_allocated_count)
++ adapter->rss_queues = 1;
+
+ /*
+ * if rss_queues > 4 or vfs are going to be allocated with rss_queues
diff --git a/queue-2.6.39/iwl4965-set-tx-power-after-rxon_assoc.patch b/queue-2.6.39/iwl4965-set-tx-power-after-rxon_assoc.patch
new file mode 100644
index 0000000000..cbbe1d6a83
--- /dev/null
+++ b/queue-2.6.39/iwl4965-set-tx-power-after-rxon_assoc.patch
@@ -0,0 +1,45 @@
+From 51892dbbd511911c0f965a36b431fc3e8f1e4f8a Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Mon, 6 Jun 2011 15:11:30 +0200
+Subject: iwl4965: set tx power after rxon_assoc
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit 51892dbbd511911c0f965a36b431fc3e8f1e4f8a upstream.
+
+Setting tx power can be deferred during scan or changing channel.
+If after that correct tx power settings will not be sent to device,
+we can observe transmission problems and timeouts. Force to send
+tx power settings also after partial rxon change, to assure device
+always be configured with up-to-date settings.
+
+Resolves:
+https://bugzilla.kernel.org/show_bug.cgi?id=36492
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlegacy/iwl-4965.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/iwlegacy/iwl-4965.c
++++ b/drivers/net/wireless/iwlegacy/iwl-4965.c
+@@ -1237,7 +1237,7 @@ static int iwl4965_commit_rxon(struct iw
+
+ memcpy(active_rxon, &ctx->staging, sizeof(*active_rxon));
+ iwl_legacy_print_rx_config_cmd(priv, ctx);
+- return 0;
++ goto set_tx_power;
+ }
+
+ /* If we are currently associated and the new config requires
+@@ -1317,6 +1317,7 @@ static int iwl4965_commit_rxon(struct iw
+
+ iwl4965_init_sensitivity(priv);
+
++set_tx_power:
+ /* If we issue a new RXON command which required a tune then we must
+ * send a new TXPOWER command or we won't be able to Tx any frames */
+ ret = iwl_legacy_set_tx_power(priv, priv->tx_power_next, true);
diff --git a/queue-2.6.39/iwlagn-use-cts-to-self-protection-on-5000-adapters-series.patch b/queue-2.6.39/iwlagn-use-cts-to-self-protection-on-5000-adapters-series.patch
new file mode 100644
index 0000000000..9e4a33516c
--- /dev/null
+++ b/queue-2.6.39/iwlagn-use-cts-to-self-protection-on-5000-adapters-series.patch
@@ -0,0 +1,100 @@
+From 42b70a5f6d18165a075d189d1bee82fad7cdbf29 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Thu, 26 May 2011 17:14:22 +0200
+Subject: iwlagn: use cts-to-self protection on 5000 adapters series
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit 42b70a5f6d18165a075d189d1bee82fad7cdbf29 upstream.
+
+This patch fixes 802.11n stability and performance regression we have
+since 2.6.35. It boost performance on my 5GHz N-only network from about
+5MB/s to 8MB/s. Similar percentage boost can be observed on 2.4 GHz.
+
+These are test results of 5x downloading of approximately 700MB iso
+image:
+
+vanilla: 5.27 5.22 4.94 4.47 5.31 ; avr 5.0420 std 0.35110
+patched: 8.07 7.95 8.06 7.99 7.96 ; avr 8.0060 std 0.055946
+
+This was achieved with NetworkManager configured to do not perform
+periodical scans, by configuring constant BSSID. With periodical scans,
+after some time, performance downgrade to unpatched driver level, like
+in example below:
+
+patched: 7.40 7.61 4.28 4.37 4.80 avr 5.6920 std 1.6683
+
+However patch still make better here, since similar test on unpatched
+driver make link disconnects with below messages after some time:
+
+wlan1: authenticate with 00:23:69:35:d1:3f (try 1)
+wlan1: authenticate with 00:23:69:35:d1:3f (try 2)
+wlan1: authenticate with 00:23:69:35:d1:3f (try 3)
+wlan1: authentication with 00:23:69:35:d1:3f timed out
+
+On 2.6.35 kernel patch helps against connection hangs with messages:
+
+iwlagn 0000:20:00.0: queue 10 stuck 3 time. Fw reload.
+iwlagn 0000:20:00.0: On demand firmware reload
+iwlagn 0000:20:00.0: Stopping AGG while state not ON or starting
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Acked-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-5000.c | 1 -
+ drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c | 12 ++----------
+ drivers/net/wireless/iwlwifi/iwl-agn-rxon.c | 8 ++++++++
+ 3 files changed, 10 insertions(+), 11 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
++++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
+@@ -513,7 +513,6 @@ static struct iwl_base_params iwl5000_ba
+ };
+ static struct iwl_ht_params iwl5000_ht_params = {
+ .ht_greenfield_support = true,
+- .use_rts_for_aggregation = true, /* use rts/cts protection */
+ };
+
+ #define IWL_DEVICE_5000 \
+--- a/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c
+@@ -217,17 +217,9 @@ static void iwlagn_tx_cmd_protection(str
+ __le16 fc, __le32 *tx_flags)
+ {
+ if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS ||
+- info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
++ info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT ||
++ info->flags & IEEE80211_TX_CTL_AMPDU)
+ *tx_flags |= TX_CMD_FLG_PROT_REQUIRE_MSK;
+- return;
+- }
+-
+- if (priv->cfg->ht_params &&
+- priv->cfg->ht_params->use_rts_for_aggregation &&
+- info->flags & IEEE80211_TX_CTL_AMPDU) {
+- *tx_flags |= TX_CMD_FLG_PROT_REQUIRE_MSK;
+- return;
+- }
+ }
+
+ /* Calc max signal level (dBm) among 3 possible receivers */
+--- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
+@@ -173,6 +173,14 @@ int iwlagn_commit_rxon(struct iwl_priv *
+ return 0;
+ }
+
++ /*
++ * force CTS-to-self frames protection if RTS-CTS is not preferred
++ * one aggregation protection method
++ */
++ if (!(priv->cfg->ht_params &&
++ priv->cfg->ht_params->use_rts_for_aggregation))
++ ctx->staging.flags |= RXON_FLG_SELF_CTS_EN;
++
+ if ((ctx->vif && ctx->vif->bss_conf.use_short_slot) ||
+ !(ctx->staging.flags & RXON_FLG_BAND_24G_MSK))
+ ctx->staging.flags |= RXON_FLG_SHORT_SLOT_MSK;
diff --git a/queue-2.6.39/mac80211-fix-ibss-teardown-race.patch b/queue-2.6.39/mac80211-fix-ibss-teardown-race.patch
new file mode 100644
index 0000000000..c39a9ef200
--- /dev/null
+++ b/queue-2.6.39/mac80211-fix-ibss-teardown-race.patch
@@ -0,0 +1,53 @@
+From f3209bea110cade12e2b133da8b8499689cb0e2e Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Wed, 8 Jun 2011 13:27:29 +0200
+Subject: mac80211: fix IBSS teardown race
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+commit f3209bea110cade12e2b133da8b8499689cb0e2e upstream.
+
+Ignacy reports that sometimes after leaving an IBSS
+joining a new one didn't work because there still
+were stations on the list. He fixed it by flushing
+stations when attempting to join a new IBSS, but
+this shouldn't be happening in the first case. When
+I looked into it I saw a race condition in teardown
+that could cause stations to be added after flush,
+and thus cause this situation. Ignacy confirms that
+after applying my patch he hasn't seen this happen
+again.
+
+Reported-by: Ignacy Gawedzki <i@lri.fr>
+Debugged-by: Ignacy Gawedzki <i@lri.fr>
+Tested-by: Ignacy Gawedzki <i@lri.fr>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/ibss.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/net/mac80211/ibss.c
++++ b/net/mac80211/ibss.c
+@@ -967,6 +967,10 @@ int ieee80211_ibss_leave(struct ieee8021
+
+ mutex_lock(&sdata->u.ibss.mtx);
+
++ sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH;
++ memset(sdata->u.ibss.bssid, 0, ETH_ALEN);
++ sdata->u.ibss.ssid_len = 0;
++
+ active_ibss = ieee80211_sta_active_ibss(sdata);
+
+ if (!active_ibss && !is_zero_ether_addr(ifibss->bssid)) {
+@@ -1000,8 +1004,6 @@ int ieee80211_ibss_leave(struct ieee8021
+ kfree_skb(skb);
+
+ skb_queue_purge(&sdata->skb_queue);
+- memset(sdata->u.ibss.bssid, 0, ETH_ALEN);
+- sdata->u.ibss.ssid_len = 0;
+
+ del_timer_sync(&sdata->u.ibss.timer);
+
diff --git a/queue-2.6.39/md-check-hot_remove_disk-when-removing-disk.patch b/queue-2.6.39/md-check-hot_remove_disk-when-removing-disk.patch
new file mode 100644
index 0000000000..0c175f7c8f
--- /dev/null
+++ b/queue-2.6.39/md-check-hot_remove_disk-when-removing-disk.patch
@@ -0,0 +1,74 @@
+From 01393f3d5836b7d62e925e6f4658a7eb22b83a11 Mon Sep 17 00:00:00 2001
+From: Namhyung Kim <namhyung@gmail.com>
+Date: Thu, 9 Jun 2011 11:42:54 +1000
+Subject: md: check ->hot_remove_disk when removing disk
+
+From: Namhyung Kim <namhyung@gmail.com>
+
+commit 01393f3d5836b7d62e925e6f4658a7eb22b83a11 upstream.
+
+Check pers->hot_remove_disk instead of pers->hot_add_disk in slot_store()
+during disk removal. The linear personality only has ->hot_add_disk and
+no ->hot_remove_disk, so that removing disk in the array resulted to
+following kernel bug:
+
+$ sudo mdadm --create /dev/md0 --level=linear --raid-devices=4 /dev/loop[0-3]
+$ echo none | sudo tee /sys/block/md0/md/dev-loop2/slot
+ BUG: unable to handle kernel NULL pointer dereference at (null)
+ IP: [< (null)>] (null)
+ PGD c9f5d067 PUD 8575a067 PMD 0
+ Oops: 0010 [#1] SMP
+ CPU 2
+ Modules linked in: linear loop bridge stp llc kvm_intel kvm asus_atk0110 sr_mod cdrom sg
+
+ Pid: 10450, comm: tee Not tainted 3.0.0-rc1-leonard+ #173 System manufacturer System Product Name/P5G41TD-M PRO
+ RIP: 0010:[<0000000000000000>] [< (null)>] (null)
+ RSP: 0018:ffff880085757df0 EFLAGS: 00010282
+ RAX: ffffffffa00168e0 RBX: ffff8800d1431800 RCX: 000000000000006e
+ RDX: 0000000000000001 RSI: 0000000000000002 RDI: ffff88008543c000
+ RBP: ffff880085757e48 R08: 0000000000000002 R09: 000000000000000a
+ R10: 0000000000000000 R11: ffff88008543c2e0 R12: 00000000ffffffff
+ R13: ffff8800b4641000 R14: 0000000000000005 R15: 0000000000000000
+ FS: 00007fe8c9e05700(0000) GS:ffff88011fa00000(0000) knlGS:0000000000000000
+ CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
+ CR2: 0000000000000000 CR3: 00000000b4502000 CR4: 00000000000406e0
+ DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+ DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
+ Process tee (pid: 10450, threadinfo ffff880085756000, task ffff8800c9f08000)
+ Stack:
+ ffffffff8138496a ffff8800b4641000 ffff88008543c268 0000000000000000
+ ffff8800b4641000 ffff88008543c000 ffff8800d1431868 ffffffff81a78a90
+ ffff8800b4641000 ffff88008543c000 ffff8800d1431800 ffff880085757e98
+ Call Trace:
+ [<ffffffff8138496a>] ? slot_store+0xaa/0x265
+ [<ffffffff81384bae>] rdev_attr_store+0x89/0xa8
+ [<ffffffff8115a96a>] sysfs_write_file+0x108/0x144
+ [<ffffffff81106b87>] vfs_write+0xb1/0x10d
+ [<ffffffff8106e6c0>] ? trace_hardirqs_on_caller+0x111/0x135
+ [<ffffffff81106cac>] sys_write+0x4d/0x77
+ [<ffffffff814fe702>] system_call_fastpath+0x16/0x1b
+ Code: Bad RIP value.
+ RIP [< (null)>] (null)
+ RSP <ffff880085757df0>
+ CR2: 0000000000000000
+ ---[ end trace ba5fc64319a826fb ]---
+
+Signed-off-by: Namhyung Kim <namhyung@gmail.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/md.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/md/md.c
++++ b/drivers/md/md.c
+@@ -2462,7 +2462,7 @@ slot_store(mdk_rdev_t *rdev, const char
+ if (rdev->raid_disk == -1)
+ return -EEXIST;
+ /* personality does all needed checks */
+- if (rdev->mddev->pers->hot_add_disk == NULL)
++ if (rdev->mddev->pers->hot_remove_disk == NULL)
+ return -EINVAL;
+ err = rdev->mddev->pers->
+ hot_remove_disk(rdev->mddev, rdev->raid_disk);
diff --git a/queue-2.6.39/md-raid5-fix-fua-request-handling-in-ops_run_io.patch b/queue-2.6.39/md-raid5-fix-fua-request-handling-in-ops_run_io.patch
new file mode 100644
index 0000000000..2fd827eab1
--- /dev/null
+++ b/queue-2.6.39/md-raid5-fix-fua-request-handling-in-ops_run_io.patch
@@ -0,0 +1,55 @@
+From b062962edb086011e94ec4d9eb3f6a6d814f2a8f Mon Sep 17 00:00:00 2001
+From: Namhyung Kim <namhyung@gmail.com>
+Date: Tue, 14 Jun 2011 14:20:19 +1000
+Subject: md/raid5: fix FUA request handling in ops_run_io()
+
+From: Namhyung Kim <namhyung@gmail.com>
+
+commit b062962edb086011e94ec4d9eb3f6a6d814f2a8f upstream.
+
+Commit e9c7469bb4f5 ("md: implment REQ_FLUSH/FUA support")
+introduced R5_WantFUA flag and set rw to WRITE_FUA in that case.
+However remaining code still checks whether rw is exactly same
+as WRITE or not, so FUAed-write ends up with being treated as
+READ. Fix it.
+
+This bug has been present since 2.6.37 and the fix is suitable for any
+-stable kernel since then. It is not clear why this has not caused
+more problems.
+
+Cc: Tejun Heo <tj@kernel.org>
+Signed-off-by: Namhyung Kim <namhyung@gmail.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/raid5.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -514,7 +514,7 @@ static void ops_run_io(struct stripe_hea
+ bi = &sh->dev[i].req;
+
+ bi->bi_rw = rw;
+- if (rw == WRITE)
++ if (rw & WRITE)
+ bi->bi_end_io = raid5_end_write_request;
+ else
+ bi->bi_end_io = raid5_end_read_request;
+@@ -548,13 +548,13 @@ static void ops_run_io(struct stripe_hea
+ bi->bi_io_vec[0].bv_offset = 0;
+ bi->bi_size = STRIPE_SIZE;
+ bi->bi_next = NULL;
+- if (rw == WRITE &&
++ if ((rw & WRITE) &&
+ test_bit(R5_ReWrite, &sh->dev[i].flags))
+ atomic_add(STRIPE_SECTORS,
+ &rdev->corrected_errors);
+ generic_make_request(bi);
+ } else {
+- if (rw == WRITE)
++ if (rw & WRITE)
+ set_bit(STRIPE_DEGRADED, &sh->state);
+ pr_debug("skip op %ld on disc %d for sector %llu\n",
+ bi->bi_rw, i, (unsigned long long)sh->sector);
diff --git a/queue-2.6.39/md-raid5-fix-raid5_set_bi_hw_segments.patch b/queue-2.6.39/md-raid5-fix-raid5_set_bi_hw_segments.patch
new file mode 100644
index 0000000000..b830782cd7
--- /dev/null
+++ b/queue-2.6.39/md-raid5-fix-raid5_set_bi_hw_segments.patch
@@ -0,0 +1,36 @@
+From 9b2dc8b665932a8e681a7ab3237f60475e75e161 Mon Sep 17 00:00:00 2001
+From: Namhyung Kim <namhyung@gmail.com>
+Date: Mon, 13 Jun 2011 14:48:22 +0900
+Subject: md/raid5: fix raid5_set_bi_hw_segments
+
+From: Namhyung Kim <namhyung@gmail.com>
+
+commit 9b2dc8b665932a8e681a7ab3237f60475e75e161 upstream.
+
+The @bio->bi_phys_segments consists of active stripes count in the
+lower 16 bits and processed stripes count in the upper 16 bits. So
+logical-OR operator should be bitwise one.
+
+This bug has been present since 2.6.27 and the fix is suitable for any
+-stable kernel since then. Fortunately the bad code is only used on
+error paths and is relatively unlikely to be hit.
+
+Signed-off-by: Namhyung Kim <namhyung@gmail.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/raid5.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -129,7 +129,7 @@ static inline int raid5_dec_bi_hw_segmen
+
+ static inline void raid5_set_bi_hw_segments(struct bio *bio, unsigned int cnt)
+ {
+- bio->bi_phys_segments = raid5_bi_phys_segments(bio) || (cnt << 16);
++ bio->bi_phys_segments = raid5_bi_phys_segments(bio) | (cnt << 16);
+ }
+
+ /* Find first data disk in a raid6 stripe */
diff --git a/queue-2.6.39/series b/queue-2.6.39/series
index 6954bfe5c4..c4c596c749 100644
--- a/queue-2.6.39/series
+++ b/queue-2.6.39/series
@@ -73,3 +73,14 @@ oprofile-free-potentially-owned-tasks-in-case-of-errors.patch
oprofile-fix-locking-dependency-in-sync_start.patch
oprofile-dcookies-fix-possible-circular-locking-dependency.patch
drm-radeon-kms-do-bounds-checking-for-3d_load_vbpntr-and.patch
+iwlagn-use-cts-to-self-protection-on-5000-adapters-series.patch
+iwl4965-set-tx-power-after-rxon_assoc.patch
+igb-fix-i350-sr-iov-failture.patch
+mac80211-fix-ibss-teardown-race.patch
+x86-devicetree-add-missing-early_init_dt_setup_initrd_arch.patch
+x86-cpu-hotplug-prevent-softirq-wakeup-on-wrong-cpu.patch
+cpufreq-remove-cpufreq_stats-sysfs-entries-on-module-unload.patch
+tomoyo-fix-oops-in-tomoyo_mount_acl.patch
+md-check-hot_remove_disk-when-removing-disk.patch
+md-raid5-fix-raid5_set_bi_hw_segments.patch
+md-raid5-fix-fua-request-handling-in-ops_run_io.patch
diff --git a/queue-2.6.39/tomoyo-fix-oops-in-tomoyo_mount_acl.patch b/queue-2.6.39/tomoyo-fix-oops-in-tomoyo_mount_acl.patch
new file mode 100644
index 0000000000..ff79d9c8b4
--- /dev/null
+++ b/queue-2.6.39/tomoyo-fix-oops-in-tomoyo_mount_acl.patch
@@ -0,0 +1,33 @@
+From 4e78c724d47e2342aa8fde61f6b8536f662f795f Mon Sep 17 00:00:00 2001
+From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
+Date: Mon, 13 Jun 2011 13:49:11 +0900
+Subject: TOMOYO: Fix oops in tomoyo_mount_acl().
+
+From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
+
+commit 4e78c724d47e2342aa8fde61f6b8536f662f795f upstream.
+
+In tomoyo_mount_acl() since 2.6.36, kern_path() was called without checking
+dev_name != NULL. As a result, an unprivileged user can trigger oops by issuing
+mount(NULL, "/", "ext3", 0, NULL) request.
+Fix this by checking dev_name != NULL before calling kern_path(dev_name).
+
+Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
+Signed-off-by: James Morris <jmorris@namei.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ security/tomoyo/mount.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/security/tomoyo/mount.c
++++ b/security/tomoyo/mount.c
+@@ -138,7 +138,7 @@ static int tomoyo_mount_acl(struct tomoy
+ }
+ if (need_dev) {
+ /* Get mount point or device file. */
+- if (kern_path(dev_name, LOOKUP_FOLLOW, &path)) {
++ if (!dev_name || kern_path(dev_name, LOOKUP_FOLLOW, &path)) {
+ error = -ENOENT;
+ goto out;
+ }
diff --git a/queue-2.6.39/x86-cpu-hotplug-prevent-softirq-wakeup-on-wrong-cpu.patch b/queue-2.6.39/x86-cpu-hotplug-prevent-softirq-wakeup-on-wrong-cpu.patch
new file mode 100644
index 0000000000..f1971fc3b2
--- /dev/null
+++ b/queue-2.6.39/x86-cpu-hotplug-prevent-softirq-wakeup-on-wrong-cpu.patch
@@ -0,0 +1,78 @@
+From fd8a7de177b6f56a0fc59ad211c197a7df06b1ad Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 20 Jul 2010 14:34:50 +0200
+Subject: x86: cpu-hotplug: Prevent softirq wakeup on wrong CPU
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+commit fd8a7de177b6f56a0fc59ad211c197a7df06b1ad upstream.
+
+After a newly plugged CPU sets the cpu_online bit it enables
+interrupts and goes idle. The cpu which brought up the new cpu waits
+for the cpu_online bit and when it observes it, it sets the cpu_active
+bit for this cpu. The cpu_active bit is the relevant one for the
+scheduler to consider the cpu as a viable target.
+
+With forced threaded interrupt handlers which imply forced threaded
+softirqs we observed the following race:
+
+cpu 0 cpu 1
+
+bringup(cpu1);
+ set_cpu_online(smp_processor_id(), true);
+ local_irq_enable();
+while (!cpu_online(cpu1));
+ timer_interrupt()
+ -> wake_up(softirq_thread_cpu1);
+ -> enqueue_on(softirq_thread_cpu1, cpu0);
+
+ ^^^^
+
+cpu_notify(CPU_ONLINE, cpu1);
+ -> sched_cpu_active(cpu1)
+ -> set_cpu_active((cpu1, true);
+
+When an interrupt happens before the cpu_active bit is set by the cpu
+which brought up the newly onlined cpu, then the scheduler refuses to
+enqueue the woken thread which is bound to that newly onlined cpu on
+that newly onlined cpu due to the not yet set cpu_active bit and
+selects a fallback runqueue. Not really an expected and desirable
+behaviour.
+
+So far this has only been observed with forced hard/softirq threading,
+but in theory this could happen without forced threaded hard/softirqs
+as well. It's probably unobservable as it would take a massive
+interrupt storm on the newly onlined cpu which causes the softirq loop
+to wake up the softirq thread and an even longer delay of the cpu
+which waits for the cpu_online bit.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Reviewed-by: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/smpboot.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+--- a/arch/x86/kernel/smpboot.c
++++ b/arch/x86/kernel/smpboot.c
+@@ -285,6 +285,19 @@ notrace static void __cpuinit start_seco
+ per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;
+ x86_platform.nmi_init();
+
++ /*
++ * Wait until the cpu which brought this one up marked it
++ * online before enabling interrupts. If we don't do that then
++ * we can end up waking up the softirq thread before this cpu
++ * reached the active state, which makes the scheduler unhappy
++ * and schedule the softirq thread on the wrong cpu. This is
++ * only observable with forced threaded interrupts, but in
++ * theory it could also happen w/o them. It's just way harder
++ * to achieve.
++ */
++ while (!cpumask_test_cpu(smp_processor_id(), cpu_active_mask))
++ cpu_relax();
++
+ /* enable local interrupts */
+ local_irq_enable();
+
diff --git a/queue-2.6.39/x86-devicetree-add-missing-early_init_dt_setup_initrd_arch.patch b/queue-2.6.39/x86-devicetree-add-missing-early_init_dt_setup_initrd_arch.patch
new file mode 100644
index 0000000000..65462921d3
--- /dev/null
+++ b/queue-2.6.39/x86-devicetree-add-missing-early_init_dt_setup_initrd_arch.patch
@@ -0,0 +1,59 @@
+From 977cb76d52e7aa040e18a84b29fe6fd80d79319b Mon Sep 17 00:00:00 2001
+From: Florian Fainelli <ffainelli@freebox.fr>
+Date: Mon, 6 Jun 2011 10:15:49 +0200
+Subject: x86: devicetree: Add missing early_init_dt_setup_initrd_arch
+ stub
+
+From: Florian Fainelli <ffainelli@freebox.fr>
+
+commit 977cb76d52e7aa040e18a84b29fe6fd80d79319b upstream.
+
+This patch fixes the following build failure:
+
+drivers/built-in.o: In function `early_init_dt_check_for_initrd':
+/home/florian/dev/kernel/x86/linux-2.6-x86/drivers/of/fdt.c:571:
+undefined reference to `early_init_dt_setup_initrd_arch'
+make: *** [.tmp_vmlinux1] Error 1
+
+which happens as soon as we enable initrd support on a x86 devicetree
+platform such as Intel CE4100.
+
+Signed-off-by: Florian Fainelli <ffainelli@freebox.fr>
+Acked-by: Grant Likely <grant.likely@secretlab.ca>
+Cc: Maxime Bizon <mbizon@freebox.fr>
+Acked-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
+Link: http://lkml.kernel.org/r/201106061015.50039.ffainelli@freebox.fr
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/devicetree.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+--- a/arch/x86/kernel/devicetree.c
++++ b/arch/x86/kernel/devicetree.c
+@@ -13,6 +13,7 @@
+ #include <linux/slab.h>
+ #include <linux/pci.h>
+ #include <linux/of_pci.h>
++#include <linux/initrd.h>
+
+ #include <asm/hpet.h>
+ #include <asm/irq_controller.h>
+@@ -98,6 +99,16 @@ void * __init early_init_dt_alloc_memory
+ return __alloc_bootmem(size, align, __pa(MAX_DMA_ADDRESS));
+ }
+
++#ifdef CONFIG_BLK_DEV_INITRD
++void __init early_init_dt_setup_initrd_arch(unsigned long start,
++ unsigned long end)
++{
++ initrd_start = (unsigned long)__va(start);
++ initrd_end = (unsigned long)__va(end);
++ initrd_below_start_ok = 1;
++}
++#endif
++
+ void __init add_dtb(u64 data)
+ {
+ initial_dtb = data + offsetof(struct setup_data, data);