]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 11 Jul 2012 23:27:06 +0000 (16:27 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 11 Jul 2012 23:27:06 +0000 (16:27 -0700)
added patches:
md-raid10-don-t-try-to-recovery-unmatched-and-unused-chunks.patch
md-raid5-do-not-add-data_offset-before-call-to-is_badblock.patch
raid5-delayed-stripe-fix.patch
rtl8187-brightness_set-can-not-sleep.patch
umem-fix-up-unplugging.patch
vhost-don-t-forget-to-schedule.patch
x86-cpufeature-rename-x86_feature_dts-to-x86_feature_dtherm.patch

queue-3.0/arm-fix-rcu-stalls-on-smp-platforms.patch
queue-3.0/ath9k_htc-configure-bssid-on-assoc-ibss-change.patch [deleted file]
queue-3.0/md-raid10-don-t-try-to-recovery-unmatched-and-unused-chunks.patch [new file with mode: 0644]
queue-3.0/md-raid5-do-not-add-data_offset-before-call-to-is_badblock.patch [new file with mode: 0644]
queue-3.0/raid5-delayed-stripe-fix.patch [new file with mode: 0644]
queue-3.0/rtl8187-brightness_set-can-not-sleep.patch [new file with mode: 0644]
queue-3.0/series
queue-3.0/udf-avoid-run-away-loop-when-partition-table-length-is-corrupted.patch
queue-3.0/umem-fix-up-unplugging.patch [new file with mode: 0644]
queue-3.0/vhost-don-t-forget-to-schedule.patch [new file with mode: 0644]
queue-3.0/x86-cpufeature-rename-x86_feature_dts-to-x86_feature_dtherm.patch [new file with mode: 0644]

index e2c6270437c6882129d362f2c3141b67d4c6590c..2e1b9fd96e87e82c11c75b53e9f80ced3c2155dd 100644 (file)
@@ -14,12 +14,13 @@ friends.  Add the necessary calls, and remove the one from within
 ipi_timer(), so that they're all in a common place.
 
 Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+[add irq_enter()/irq_exit() in do_local_timer]
 Signed-off-by: UCHINO Satoshi <satoshi.uchino@toshiba.co.jp>
 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
 ---
- arch/arm/kernel/smp.c |   1++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
+ arch/arm/kernel/smp.c |   12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
 
 --- a/arch/arm/kernel/smp.c
 +++ b/arch/arm/kernel/smp.c
@@ -33,7 +34,17 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  }
  
  #ifdef CONFIG_LOCAL_TIMERS
-@@ -568,7 +566,9 @@ asmlinkage void __exception_irq_entry do
+@@ -458,7 +456,9 @@ asmlinkage void __exception_irq_entry do
+       if (local_timer_ack()) {
+               __inc_irq_stat(cpu, local_timer_irqs);
++              irq_enter();
+               ipi_timer();
++              irq_exit();
+       }
+       set_irq_regs(old_regs);
+@@ -568,7 +568,9 @@ asmlinkage void __exception_irq_entry do
  
        switch (ipinr) {
        case IPI_TIMER:
@@ -43,7 +54,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
                break;
  
        case IPI_RESCHEDULE:
-@@ -576,15 +576,21 @@ asmlinkage void __exception_irq_entry do
+@@ -576,15 +578,21 @@ asmlinkage void __exception_irq_entry do
                break;
  
        case IPI_CALL_FUNC:
diff --git a/queue-3.0/ath9k_htc-configure-bssid-on-assoc-ibss-change.patch b/queue-3.0/ath9k_htc-configure-bssid-on-assoc-ibss-change.patch
deleted file mode 100644 (file)
index 3d9e6a0..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-From 931cb03afed7b541392295f3afc4638da32f08a0 Mon Sep 17 00:00:00 2001
-From: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
-Date: Wed, 20 Jun 2012 16:29:20 +0530
-Subject: ath9k_htc: configure bssid on ASSOC/IBSS change
-
-From: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
-
-commit 931cb03afed7b541392295f3afc4638da32f08a0 upstream.
-
-After the change "mac80211: remove spurious BSSID change flag",
-BSS_CHANGED_BSSID will not be passed on association or IBSS
-status changes. So it could be better to program bssid on ASSOC
-or IBSS change notification. Not doing so, is affecting the
-packet transmission.
-
-Reported-by: Michael Leun <lkml20120218@newton.leun.net>
-Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
-Signed-off-by: John W. Linville <linville@tuxdriver.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/wireless/ath/ath9k/htc_drv_main.c |    5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
-+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
-@@ -1487,6 +1487,7 @@ static void ath9k_htc_bss_info_changed(s
-                       priv->num_sta_assoc_vif++ : priv->num_sta_assoc_vif--;
-               if (priv->ah->opmode == NL80211_IFTYPE_STATION) {
-+                      ath9k_htc_choose_set_bssid(priv);
-                       if (bss_conf->assoc && (priv->num_sta_assoc_vif == 1))
-                               ath9k_htc_start_ani(priv);
-                       else if (priv->num_sta_assoc_vif == 0)
-@@ -1494,13 +1495,11 @@ static void ath9k_htc_bss_info_changed(s
-               }
-       }
--      if (changed & BSS_CHANGED_BSSID) {
-+      if (changed & BSS_CHANGED_IBSS) {
-               if (priv->ah->opmode == NL80211_IFTYPE_ADHOC) {
-                       common->curaid = bss_conf->aid;
-                       memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
-                       ath9k_htc_set_bssid(priv);
--              } else if (priv->ah->opmode == NL80211_IFTYPE_STATION) {
--                      ath9k_htc_choose_set_bssid(priv);
-               }
-       }
diff --git a/queue-3.0/md-raid10-don-t-try-to-recovery-unmatched-and-unused-chunks.patch b/queue-3.0/md-raid10-don-t-try-to-recovery-unmatched-and-unused-chunks.patch
new file mode 100644 (file)
index 0000000..6c4d9af
--- /dev/null
@@ -0,0 +1,46 @@
+From: NeilBrown <neilb@suse.de>
+Date: Tue, 3 Jul 2012 10:37:30 +1000
+Subject: md/raid10: Don't try to recovery unmatched (and unused) chunks.
+
+From: NeilBrown <neilb@suse.de>
+
+commit fc448a18ae6219af9a73257b1fbcd009efab4a81 upstream.
+
+If a RAID10 has an odd number of chunks - as might happen when there
+are an odd number of devices - the last chunk has no pair and so is
+not mirrored.  We don't store data there, but when recovering the last
+device in an array we retry to recover that last chunk from a
+non-existent location.  This results in an error, and the recovery
+aborts.
+
+When we get to that last chunk we should just stop - there is nothing
+more to do anyway.
+
+This bug has been present since the introduction of RAID10, so the
+patch is appropriate for any -stable kernel.
+
+Reported-by: Christian Balzer <chibi@gol.com>
+Tested-by: Christian Balzer <chibi@gol.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/md/raid10.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/md/raid10.c
++++ b/drivers/md/raid10.c
+@@ -1858,6 +1858,12 @@ static sector_t sync_request(mddev_t *md
+                       /* want to reconstruct this device */
+                       rb2 = r10_bio;
+                       sect = raid10_find_virt(conf, sector_nr, i);
++                      if (sect >= mddev->resync_max_sectors) {
++                              /* last stripe is not complete - don't
++                               * try to recover this sector.
++                               */
++                              continue;
++                      }
+                       /* Unless we are doing a full sync, we only need
+                        * to recover the block if it is set in the bitmap
+                        */
diff --git a/queue-3.0/md-raid5-do-not-add-data_offset-before-call-to-is_badblock.patch b/queue-3.0/md-raid5-do-not-add-data_offset-before-call-to-is_badblock.patch
new file mode 100644 (file)
index 0000000..ff9bff9
--- /dev/null
@@ -0,0 +1,50 @@
+From: majianpeng <majianpeng@gmail.com>
+Date: Tue, 12 Jun 2012 08:31:10 +0800
+Subject: md/raid5: Do not add data_offset before call to is_badblock
+
+From: majianpeng <majianpeng@gmail.com>
+
+commit 6c0544e255dd6582a9899572e120fb55d9f672a4 upstream.
+
+In chunk_aligned_read() we are adding data_offset before calling
+is_badblock.  But is_badblock also adds data_offset, so that is bad.
+
+So move the addition of data_offset to after the call to
+is_badblock.
+
+This bug was introduced by commit 31c176ecdf3563140e639
+     md/raid5: avoid reading from known bad blocks.
+which first appeared in 3.0.  So that patch is suitable for any
+-stable kernel from 3.0.y onwards.  However it will need minor
+revision for most of those (as the comment didn't appear until
+recently).
+
+Signed-off-by: majianpeng <majianpeng@gmail.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+[bwh: Backported to 3.2: ignored missing comment]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/md/raid5.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -3848,7 +3848,6 @@ static int chunk_aligned_read(mddev_t *m
+               raid_bio->bi_next = (void*)rdev;
+               align_bi->bi_bdev =  rdev->bdev;
+               align_bi->bi_flags &= ~(1 << BIO_SEG_VALID);
+-              align_bi->bi_sector += rdev->data_offset;
+               if (!bio_fits_rdev(align_bi)) {
+                       /* too big in some way */
+@@ -3857,6 +3856,9 @@ static int chunk_aligned_read(mddev_t *m
+                       return 0;
+               }
++              /* No reshape active, so we can trust rdev->data_offset */
++              align_bi->bi_sector += rdev->data_offset;
++
+               spin_lock_irq(&conf->device_lock);
+               wait_event_lock_irq(conf->wait_for_stripe,
+                                   conf->quiesce == 0,
diff --git a/queue-3.0/raid5-delayed-stripe-fix.patch b/queue-3.0/raid5-delayed-stripe-fix.patch
new file mode 100644 (file)
index 0000000..30ce6e3
--- /dev/null
@@ -0,0 +1,41 @@
+From fab363b5ff502d1b39ddcfec04271f5858d9f26e Mon Sep 17 00:00:00 2001
+From: Shaohua Li <shli@kernel.org>
+Date: Tue, 3 Jul 2012 15:57:19 +1000
+Subject: raid5: delayed stripe fix
+
+From: Shaohua Li <shli@kernel.org>
+
+commit fab363b5ff502d1b39ddcfec04271f5858d9f26e upstream.
+
+There isn't locking setting STRIPE_DELAYED and STRIPE_PREREAD_ACTIVE bits, but
+the two bits have relationship. A delayed stripe can be moved to hold list only
+when preread active stripe count is below IO_THRESHOLD. If a stripe has both
+the bits set, such stripe will be in delayed list and preread count not 0,
+which will make such stripe never leave delayed list.
+
+Signed-off-by: Shaohua Li <shli@fusionio.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/raid5.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -199,12 +199,14 @@ static void __release_stripe(raid5_conf_
+               BUG_ON(!list_empty(&sh->lru));
+               BUG_ON(atomic_read(&conf->active_stripes)==0);
+               if (test_bit(STRIPE_HANDLE, &sh->state)) {
+-                      if (test_bit(STRIPE_DELAYED, &sh->state))
++                      if (test_bit(STRIPE_DELAYED, &sh->state) &&
++                          !test_bit(STRIPE_PREREAD_ACTIVE, &sh->state))
+                               list_add_tail(&sh->lru, &conf->delayed_list);
+                       else if (test_bit(STRIPE_BIT_DELAY, &sh->state) &&
+                                  sh->bm_seq - conf->seq_write > 0)
+                               list_add_tail(&sh->lru, &conf->bitmap_list);
+                       else {
++                              clear_bit(STRIPE_DELAYED, &sh->state);
+                               clear_bit(STRIPE_BIT_DELAY, &sh->state);
+                               list_add_tail(&sh->lru, &conf->handle_list);
+                       }
diff --git a/queue-3.0/rtl8187-brightness_set-can-not-sleep.patch b/queue-3.0/rtl8187-brightness_set-can-not-sleep.patch
new file mode 100644 (file)
index 0000000..0d38eec
--- /dev/null
@@ -0,0 +1,55 @@
+From 0fde0a8cfd0ede7f310d6a681c8e5a7cb3e32406 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Wed, 16 May 2012 11:06:21 +0200
+Subject: rtl8187: ->brightness_set can not sleep
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit 0fde0a8cfd0ede7f310d6a681c8e5a7cb3e32406 upstream.
+
+Fix:
+
+BUG: sleeping function called from invalid context at kernel/workqueue.c:2547
+in_atomic(): 1, irqs_disabled(): 0, pid: 629, name: wpa_supplicant
+2 locks held by wpa_supplicant/629:
+ #0:  (rtnl_mutex){+.+.+.}, at: [<c08b2b84>] rtnl_lock+0x14/0x20
+ #1:  (&trigger->leddev_list_lock){.+.?..}, at: [<c0867f41>] led_trigger_event+0x21/0x80
+Pid: 629, comm: wpa_supplicant Not tainted 3.3.0-0.rc3.git5.1.fc17.i686
+Call Trace:
+ [<c046a9f6>] __might_sleep+0x126/0x1d0
+ [<c0457d6c>] wait_on_work+0x2c/0x1d0
+ [<c045a09a>] __cancel_work_timer+0x6a/0x120
+ [<c045a160>] cancel_delayed_work_sync+0x10/0x20
+ [<f7dd3c22>] rtl8187_led_brightness_set+0x82/0xf0 [rtl8187]
+ [<c0867f7c>] led_trigger_event+0x5c/0x80
+ [<f7ff5e6d>] ieee80211_led_radio+0x1d/0x40 [mac80211]
+ [<f7ff3583>] ieee80211_stop_device+0x13/0x230 [mac80211]
+
+Removing _sync is ok, because if led_on work is currently running
+it will be finished before led_off work start to perform, since
+they are always queued on the same mac80211 local->workqueue.
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=795176
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Acked-by: Larry Finger <Larry.Finger@lwfinger.net>
+Acked-by: Hin-Tak Leung <htl10@users.sourceforge.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Cc: Josh Boyer <jwboyer@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/rtl818x/rtl8187/leds.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/rtl818x/rtl8187/leds.c
++++ b/drivers/net/wireless/rtl818x/rtl8187/leds.c
+@@ -117,7 +117,7 @@ static void rtl8187_led_brightness_set(s
+                       radio_on = true;
+               } else if (radio_on) {
+                       radio_on = false;
+-                      cancel_delayed_work_sync(&priv->led_on);
++                      cancel_delayed_work(&priv->led_on);
+                       ieee80211_queue_delayed_work(hw, &priv->led_off, 0);
+               }
+       } else if (radio_on) {
index 3e3b129f9ab670ff6fe4cc14ec0c0301dfdee0ae..97a57122e348d837fb9d962ea4193743820515b0 100644 (file)
@@ -20,7 +20,6 @@ udf-avoid-run-away-loop-when-partition-table-length-is-corrupted.patch
 udf-fortify-loading-of-sparing-table.patch
 ath9k-fix-softlockup-in-ar9485.patch
 ath9k_hw-avoid-possible-infinite-loop-in.patch
-ath9k_htc-configure-bssid-on-assoc-ibss-change.patch
 ath9k-enable-serialize_regmode-for-non-pcie-ar9287.patch
 asoc-tlv320aic3x-fix-codec-pll-configure-bug.patch
 btrfs-run-delayed-directory-updates-during-log-replay.patch
@@ -53,3 +52,10 @@ pci-ehci-fix-crash-during-suspend-on-asus-computers.patch
 xhci-avoid-dead-ports-when-config_usb_xhci_hcd-n.patch
 ipheth-add-support-for-ipad.patch
 tracing-change-cpu-ring-buffer-state-from-tracing_cpumask.patch
+vhost-don-t-forget-to-schedule.patch
+raid5-delayed-stripe-fix.patch
+rtl8187-brightness_set-can-not-sleep.patch
+umem-fix-up-unplugging.patch
+x86-cpufeature-rename-x86_feature_dts-to-x86_feature_dtherm.patch
+md-raid5-do-not-add-data_offset-before-call-to-is_badblock.patch
+md-raid10-don-t-try-to-recovery-unmatched-and-unused-chunks.patch
index fd49b104a9c101ba84144fd297f48ece39a383a4..aa66ca810d0e4bc89ff28a006cbee14dd500b4ef 100644 (file)
@@ -33,7 +33,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
        lvd = (struct logicalVolDesc *)bh->b_data;
 +      table_len = le32_to_cpu(lvd->mapTableLength);
 +      if (sizeof(*lvd) + table_len > sb->s_blocksize) {
-+              udf_error(sb, "error loading logical volume descriptor: "
++              udf_error(sb, __func__, "error loading logical volume descriptor: "
 +                      "Partition table too long (%u > %lu)\n", table_len,
 +                      sb->s_blocksize - sizeof(*lvd));
 +              goto out_bh;
diff --git a/queue-3.0/umem-fix-up-unplugging.patch b/queue-3.0/umem-fix-up-unplugging.patch
new file mode 100644 (file)
index 0000000..cfb02d1
--- /dev/null
@@ -0,0 +1,85 @@
+From 32587371ad3db2f9d335de10dbd8cffd4fff5669 Mon Sep 17 00:00:00 2001
+From: Tao Guo <glorioustao@gmail.com>
+Date: Wed, 13 Jun 2012 21:17:21 +0200
+Subject: umem: fix up unplugging
+
+From: Tao Guo <glorioustao@gmail.com>
+
+commit 32587371ad3db2f9d335de10dbd8cffd4fff5669 upstream.
+
+Fix a regression introduced by 7eaceaccab5f40 ("block: remove per-queue
+plugging").  In that patch, Jens removed the whole mm_unplug_device()
+function, which used to be the trigger to make umem start to work.
+
+We need to implement unplugging to make umem start to work, or I/O will
+never be triggered.
+
+Signed-off-by: Tao Guo <Tao.Guo@emc.com>
+Cc: Neil Brown <neilb@suse.de>
+Cc: Jens Axboe <axboe@kernel.dk>
+Cc: Shaohua Li <shli@kernel.org>
+Cc: <stable@vger.kernel.org>
+Acked-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/block/umem.c |   40 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 40 insertions(+)
+
+--- a/drivers/block/umem.c
++++ b/drivers/block/umem.c
+@@ -513,6 +513,44 @@ static void process_page(unsigned long d
+       }
+ }
++struct mm_plug_cb {
++      struct blk_plug_cb cb;
++      struct cardinfo *card;
++};
++
++static void mm_unplug(struct blk_plug_cb *cb)
++{
++      struct mm_plug_cb *mmcb = container_of(cb, struct mm_plug_cb, cb);
++
++      spin_lock_irq(&mmcb->card->lock);
++      activate(mmcb->card);
++      spin_unlock_irq(&mmcb->card->lock);
++      kfree(mmcb);
++}
++
++static int mm_check_plugged(struct cardinfo *card)
++{
++      struct blk_plug *plug = current->plug;
++      struct mm_plug_cb *mmcb;
++
++      if (!plug)
++              return 0;
++
++      list_for_each_entry(mmcb, &plug->cb_list, cb.list) {
++              if (mmcb->cb.callback == mm_unplug && mmcb->card == card)
++                      return 1;
++      }
++      /* Not currently on the callback list */
++      mmcb = kmalloc(sizeof(*mmcb), GFP_ATOMIC);
++      if (!mmcb)
++              return 0;
++
++      mmcb->card = card;
++      mmcb->cb.callback = mm_unplug;
++      list_add(&mmcb->cb.list, &plug->cb_list);
++      return 1;
++}
++
+ static int mm_make_request(struct request_queue *q, struct bio *bio)
+ {
+       struct cardinfo *card = q->queuedata;
+@@ -523,6 +561,8 @@ static int mm_make_request(struct reques
+       *card->biotail = bio;
+       bio->bi_next = NULL;
+       card->biotail = &bio->bi_next;
++      if (bio->bi_rw & REQ_SYNC || !mm_check_plugged(card))
++              activate(card);
+       spin_unlock_irq(&card->lock);
+       return 0;
diff --git a/queue-3.0/vhost-don-t-forget-to-schedule.patch b/queue-3.0/vhost-don-t-forget-to-schedule.patch
new file mode 100644 (file)
index 0000000..a5b9082
--- /dev/null
@@ -0,0 +1,59 @@
+From d550dda192c1bd039afb774b99485e88b70d7cb8 Mon Sep 17 00:00:00 2001
+From: Nadav Har'El <nyh@math.technion.ac.il>
+Date: Mon, 27 Feb 2012 15:07:29 +0200
+Subject: vhost: don't forget to schedule()
+
+From: Nadav Har'El <nyh@math.technion.ac.il>
+
+commit d550dda192c1bd039afb774b99485e88b70d7cb8 upstream.
+
+This is a tiny, but important, patch to vhost.
+
+Vhost's worker thread only called schedule() when it had no work to do, and
+it wanted to go to sleep. But if there's always work to do, e.g., the guest
+is running a network-intensive program like netperf with small message sizes,
+schedule() was *never* called. This had several negative implications (on
+non-preemptive kernels):
+
+ 1. Passing time was not properly accounted to the "vhost" process (ps and
+    top would wrongly show it using zero CPU time).
+
+ 2. Sometimes error messages about RCU timeouts would be printed, if the
+    core running the vhost thread didn't schedule() for a very long time.
+
+ 3. Worst of all, a vhost thread would "hog" the core. If several vhost
+    threads need to share the same core, typically one would get most of the
+    CPU time (and its associated guest most of the performance), while the
+    others hardly get any work done.
+
+The trivial solution is to add
+
+       if (need_resched())
+               schedule();
+
+After doing every piece of work. This will not do the heavy schedule() all
+the time, just when the timer interrupt decided a reschedule is warranted
+(so need_resched returns true).
+
+Thanks to Abel Gordon for this patch.
+
+Signed-off-by: Nadav Har'El <nyh@il.ibm.com>
+Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
+Cc: Jean Delvare <jdelvare@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/vhost/vhost.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/vhost/vhost.c
++++ b/drivers/vhost/vhost.c
+@@ -217,6 +217,8 @@ static int vhost_worker(void *data)
+               if (work) {
+                       __set_current_state(TASK_RUNNING);
+                       work->fn(work);
++                      if (need_resched())
++                              schedule();
+               } else
+                       schedule();
diff --git a/queue-3.0/x86-cpufeature-rename-x86_feature_dts-to-x86_feature_dtherm.patch b/queue-3.0/x86-cpufeature-rename-x86_feature_dts-to-x86_feature_dtherm.patch
new file mode 100644 (file)
index 0000000..6a72ba5
--- /dev/null
@@ -0,0 +1,65 @@
+From: "H. Peter Anvin" <hpa@linux.intel.com>
+Date: Fri, 22 Jun 2012 10:58:06 -0700
+Subject: x86, cpufeature: Rename X86_FEATURE_DTS to X86_FEATURE_DTHERM
+
+From: "H. Peter Anvin" <hpa@linux.intel.com>
+
+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 <khali@linux-fr.org>
+Link: http://lkml.kernel.org/r/4FE34BCB.5050305@linux.intel.com
+Cc: Jan Beulich <JBeulich@suse.com>
+Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
+[bwh: Backported to 3.2: drop the coretemp device table change]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/include/asm/cpufeature.h |    2 +-
+ arch/x86/kernel/cpu/scattered.c   |    2 +-
+ drivers/hwmon/coretemp.c          |    2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/include/asm/cpufeature.h
++++ b/arch/x86/include/asm/cpufeature.h
+@@ -173,7 +173,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 */
+ /* Virtualization flags: Linux defined, word 8 */
+ #define X86_FEATURE_TPR_SHADOW  (8*32+ 0) /* Intel TPR Shadow */
+--- 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
+@@ -709,7 +709,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) {