Staging
v0.8.1
https://github.com/torvalds/linux
Revision 98d8256739f2c6c636fa2da359f5949c739ae839 authored by Thomas Gleixner on 23 May 2007, 20:58:18 UTC, committed by Linus Torvalds on 24 May 2007, 03:14:15 UTC
The NOHZ patch contains a check for softirqs pending when a CPU goes idle.
The BUG is unrelated to NOHZ, it just was made visible by the NOHZ patch.
The BUG showed up mainly on P4 / hyperthreading enabled machines which lead
the investigations into the wrong direction in the first place.  The real
cause is in cond_resched_softirq():

cond_resched_softirq() is enabling softirqs without invoking the softirq
daemon when softirqs are pending.  This leads to the warning message in the
NOHZ idle code:

t1 runs softirq disabled code on CPU#0
interrupt happens, softirq is raised, but deferred (softirqs disabled)
t1 calls cond_resched_softirq()
	enables softirqs via _local_bh_enable()
	calls schedule()
t2 runs
t1 is migrated to CPU#1
t2 is done and invokes idle()
NOHZ detects the pending softirq

Fix: change _local_bh_enable() to local_bh_enable() so the softirq
daemon is invoked.

Thanks to Anant Nitya for debugging this with great patience !

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 40acc09
Raw File
Tip revision: 98d8256739f2c6c636fa2da359f5949c739ae839 authored by Thomas Gleixner on 23 May 2007, 20:58:18 UTC
Prevent going idle with softirq pending
Tip revision: 98d8256
Kconfig
#
# Configuration for initramfs
#

config INITRAMFS_SOURCE
	string "Initramfs source file(s)"
	default ""
	help
	  This can be either a single cpio archive with a .cpio suffix or a
	  space-separated list of directories and files for building the
	  initramfs image.  A cpio archive should contain a filesystem archive
	  to be used as an initramfs image.  Directories should contain a
	  filesystem layout to be included in the initramfs image.  Files
	  should contain entries according to the format described by the
	  "usr/gen_init_cpio" program in the kernel tree.

	  When multiple directories and files are specified then the
	  initramfs image will be the aggregate of all of them.

	  See <file:Documentation/early-userspace/README> for more details.

	  If you are not sure, leave it blank.

config INITRAMFS_ROOT_UID
	int "User ID to map to 0 (user root)"
	depends on INITRAMFS_SOURCE!=""
	default "0"
	help
	  This setting is only meaningful if the INITRAMFS_SOURCE is
	  contains a directory.  Setting this user ID (UID) to something
	  other than "0" will cause all files owned by that UID to be
	  owned by user root in the initial ramdisk image.

	  If you are not sure, leave it set to "0".

config INITRAMFS_ROOT_GID
	int "Group ID to map to 0 (group root)"
	depends on INITRAMFS_SOURCE!=""
	default "0"
	help
	  This setting is only meaningful if the INITRAMFS_SOURCE is
	  contains a directory.  Setting this group ID (GID) to something
	  other than "0" will cause all files owned by that GID to be
	  owned by group root in the initial ramdisk image.

	  If you are not sure, leave it set to "0".
back to top