stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Tejun Heo <tj@kernel.org>,
	Jamie Liu <jamieliu@google.com>
Subject: [ 15/36] workqueue: cond_resched() after processing each work item
Date: Thu,  5 Sep 2013 13:27:44 -0700	[thread overview]
Message-ID: <20130905202704.079407825@linuxfoundation.org> (raw)
In-Reply-To: <20130905202702.289738686@linuxfoundation.org>

3.10-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Tejun Heo <tj@kernel.org>

commit b22ce2785d97423846206cceec4efee0c4afd980 upstream.

If !PREEMPT, a kworker running work items back to back can hog CPU.
This becomes dangerous when a self-requeueing work item which is
waiting for something to happen races against stop_machine.  Such
self-requeueing work item would requeue itself indefinitely hogging
the kworker and CPU it's running on while stop_machine would wait for
that CPU to enter stop_machine while preventing anything else from
happening on all other CPUs.  The two would deadlock.

Jamie Liu reports that this deadlock scenario exists around
scsi_requeue_run_queue() and libata port multiplier support, where one
port may exclude command processing from other ports.  With the right
timing, scsi_requeue_run_queue() can end up requeueing itself trying
to execute an IO which is asked to be retried while another device has
an exclusive access, which in turn can't make forward progress due to
stop_machine.

Fix it by invoking cond_resched() after executing each work item.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Jamie Liu <jamieliu@google.com>
References: http://thread.gmane.org/gmane.linux.kernel/1552567
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/workqueue.c |    9 +++++++++
 1 file changed, 9 insertions(+)

--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -2188,6 +2188,15 @@ __acquires(&pool->lock)
 		dump_stack();
 	}
 
+	/*
+	 * The following prevents a kworker from hogging CPU on !PREEMPT
+	 * kernels, where a requeueing work item waiting for something to
+	 * happen could deadlock with stop_machine as such work item could
+	 * indefinitely requeue itself while all other CPUs are trapped in
+	 * stop_machine.
+	 */
+	cond_resched();
+
 	spin_lock_irq(&pool->lock);
 
 	/* clear cpu intensive status */



  parent reply	other threads:[~2013-09-05 20:27 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-05 20:27 [ 00/36] 3.10.11-stable review Greg Kroah-Hartman
2013-09-05 20:27 ` [ 01/36] drm/nouveau/mc: fix race condition between constructor and request_irq() Greg Kroah-Hartman
2013-09-05 20:27 ` [ 02/36] jfs: fix readdir cookie incompatibility with NFSv4 Greg Kroah-Hartman
2013-09-05 20:27 ` [ 03/36] ALSA: hda - Fix NULL dereference with CONFIG_SND_DYNAMIC_MINORS=n Greg Kroah-Hartman
2013-09-05 20:27 ` [ 04/36] ALSA: hda - Add inverted digital mic fixup for Acer Aspire One Greg Kroah-Hartman
2013-09-05 20:27 ` [ 05/36] ALSA: opti9xx: Fix conflicting driver object name Greg Kroah-Hartman
2013-09-05 20:27 ` [ 06/36] powerpc: Work around gcc miscompilation of __pa() on 64-bit Greg Kroah-Hartman
2013-09-05 20:27 ` [ 07/36] powerpc: Dont Oops when accessing /proc/powerpc/lparcfg without hypervisor Greg Kroah-Hartman
2013-09-05 20:27 ` [ 08/36] powerpc/hvsi: Increase handshake timeout from 200ms to 400ms Greg Kroah-Hartman
2013-09-05 20:27 ` [ 09/36] SCSI: pm80xx: fix Adaptec 71605H hang Greg Kroah-Hartman
2013-09-05 20:27 ` [ 10/36] regmap: Add another missing header for !CONFIG_REGMAP stubs Greg Kroah-Hartman
2013-09-05 20:27 ` [ 11/36] timer_list: correct the iterator for timer_list Greg Kroah-Hartman
2013-09-05 20:27 ` [ 12/36] IPC: bugfix for msgrcv with msgtyp < 0 Greg Kroah-Hartman
2013-09-05 20:27 ` [ 13/36] drivers/base/memory.c: fix show_mem_removable() to handle missing sections Greg Kroah-Hartman
2013-09-05 20:27 ` [ 14/36] memcg: check that kmem_cache has memcg_params before accessing it Greg Kroah-Hartman
2013-09-05 20:27 ` Greg Kroah-Hartman [this message]
2013-09-05 20:27 ` [ 16/36] drm/vmwgfx: Split GMR2_REMAP commands if they are to large Greg Kroah-Hartman
2013-09-05 20:27 ` [ 17/36] drm/i915: ivb: fix edp voltage swing reg val Greg Kroah-Hartman
2013-09-05 20:27 ` [ 18/36] SUNRPC: Fix memory corruption issue on 32-bit highmem systems Greg Kroah-Hartman
2013-09-05 20:27 ` [ 19/36] x86/mm: Fix boot crash with DEBUG_PAGE_ALLOC=y and more than 512G RAM Greg Kroah-Hartman
2013-09-05 20:27 ` [ 20/36] ath9k_htc: Restore skb headroom when returning skb to mac80211 Greg Kroah-Hartman
2013-09-05 20:27 ` [ 21/36] ath9k: Enable PLL fix only for AR9340/AR9330 Greg Kroah-Hartman
2013-09-05 20:27 ` [ 22/36] mac80211: add missing channel context release Greg Kroah-Hartman
2013-09-05 20:27 ` [ 23/36] mac80211: add a flag to indicate CCK support for HT clients Greg Kroah-Hartman
2013-09-05 20:27 ` [ 24/36] iwl4965: fix rfkill set state regression Greg Kroah-Hartman
2013-09-05 20:27 ` [ 25/36] target: Fix trailing ASCII space usage in INQUIRY vendor+model Greg Kroah-Hartman
2013-09-05 20:27 ` [ 26/36] iscsi-target: Fix ImmediateData=Yes failure regression in >= v3.10 Greg Kroah-Hartman
2013-09-05 20:27 ` [ 27/36] iscsi-target: Fix iscsit_transport reference leak during NP thread reset Greg Kroah-Hartman
2013-09-05 20:27 ` [ 28/36] iscsi-target: Fix potential NULL pointer in solicited NOPOUT reject Greg Kroah-Hartman
2013-09-05 20:27 ` [ 29/36] mei: me: fix hardware reset flow Greg Kroah-Hartman
2013-09-05 20:27 ` [ 30/36] usb: acm gadget: Null termintate strings table Greg Kroah-Hartman
2013-09-05 20:28 ` [ 31/36] hwmon: (k10temp) Add support for Fam16h (Kabini) Greg Kroah-Hartman
2013-09-05 20:28 ` [ 32/36] ACPI / EC: Add ASUSTEK L4R to quirk list in order to validate ECDT Greg Kroah-Hartman
2013-09-05 20:28 ` [ 33/36] drivers/misc/hpilo: Correct panic when an AUX iLO is detected Greg Kroah-Hartman
2013-09-05 20:28 ` [ 34/36] xen/arm: missing put_cpu in xen_percpu_init Greg Kroah-Hartman
2013-09-05 20:28 ` [ 35/36] imx-drm: imx-drm-core: Export imx_drm_encoder_get_mux_id Greg Kroah-Hartman
2013-09-05 20:28 ` [ 36/36] regmap: rbtree: Fix overlapping rbnodes Greg Kroah-Hartman
2013-09-05 22:59 ` [ 00/36] 3.10.11-stable review Guenter Roeck
2013-09-06 16:40   ` Greg Kroah-Hartman
2013-09-06 17:36 ` Shuah Khan
2013-09-06 18:45   ` Greg Kroah-Hartman
2013-09-06 18:48     ` Shuah Khan
2013-09-06 22:08 ` Olof Johansson
2013-09-06 22:20   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130905202704.079407825@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=jamieliu@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).