kernel-ark/Documentation
Paul E. McKenney 9b2e4f1880 rcu: Track idleness independent of idle tasks
Earlier versions of RCU used the scheduling-clock tick to detect idleness
by checking for the idle task, but handled idleness differently for
CONFIG_NO_HZ=y.  But there are now a number of uses of RCU read-side
critical sections in the idle task, for example, for tracing.  A more
fine-grained detection of idleness is therefore required.

This commit presses the old dyntick-idle code into full-time service,
so that rcu_idle_enter(), previously known as rcu_enter_nohz(), is
always invoked at the beginning of an idle loop iteration.  Similarly,
rcu_idle_exit(), previously known as rcu_exit_nohz(), is always invoked
at the end of an idle-loop iteration.  This allows the idle task to
use RCU everywhere except between consecutive rcu_idle_enter() and
rcu_idle_exit() calls, in turn allowing architecture maintainers to
specify exactly where in the idle loop that RCU may be used.

Because some of the userspace upcall uses can result in what looks
to RCU like half of an interrupt, it is not possible to expect that
the irq_enter() and irq_exit() hooks will give exact counts.  This
patch therefore expands the ->dynticks_nesting counter to 64 bits
and uses two separate bitfields to count process/idle transitions
and interrupt entry/exit transitions.  It is presumed that userspace
upcalls do not happen in the idle loop or from usermode execution
(though usermode might do a system call that results in an upcall).
The counter is hard-reset on each process/idle transition, which
avoids the interrupt entry/exit error from accumulating.  Overflow
is avoided by the 64-bitness of the ->dyntick_nesting counter.

This commit also adds warnings if a non-idle task asks RCU to enter
idle state (and these checks will need some adjustment before applying
Frederic's OS-jitter patches (http://lkml.org/lkml/2011/10/7/246).
In addition, validation of ->dynticks and ->dynticks_nesting is added.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
2011-12-11 10:31:24 -08:00
..
ABI block: Revert "[SCSI] genhd: add a new attribute "alias" in gendisk" 2011-11-10 09:03:55 +01:00
accounting Documentation: update cgroupfs mount point 2011-06-15 21:52:50 -07:00
acpi ACPI, APEI, EINJ Param support is disabled by default 2011-08-03 11:15:59 -04:00
aoe
arm Merge branch 'next/deletion' of git+ssh://master.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc 2011-07-25 12:43:28 -07:00
auxdisplay
blackfin doc: fix broken references 2011-09-27 18:08:04 +02:00
block Documentation: drop as block elevator reference in switching-sched.txt 2011-11-04 12:01:48 -07:00
blockdev cciss: auto engage SCSI mid layer at driver load time 2011-11-16 09:21:49 +01:00
cdrom doc: fix broken references 2011-09-27 18:08:04 +02:00
cgroups Documentation: Fix typo in freezer-subsystem.txt 2011-11-07 23:02:25 +01:00
connector
console
cpu-freq Fix documentation and comment typo 'no_hz' 2011-08-08 18:55:59 +02:00
cpuidle
cris
crypto
development-process doc: fix broken references 2011-09-27 18:08:04 +02:00
device-mapper dm log userspace: fix comment hyphens 2011-10-31 20:21:22 +00:00
devicetree of: Add Silicon Image vendor prefix 2011-11-29 08:24:20 -06:00
DocBook Merge branch 'driver-core-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core 2011-11-21 20:36:26 -08:00
driver-model docs/driver-model: Update device class docs 2011-08-24 16:01:24 -07:00
dvb [media] update az6027 firmware URL 2011-10-14 10:29:45 -03:00
early-userspace
fault-injection fault-injection: update documentation with the mmc module param 2011-10-26 16:32:13 -04:00
fb udlfb: Enable fbcon access to framebuffer by default 2011-08-24 10:12:38 +00:00
filesystems Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs 2011-12-01 08:28:53 -08:00
firmware_class
frv doc: fix broken references 2011-09-27 18:08:04 +02:00
hid HID: Move hiddev.txt to the new Documentation/hid directory 2011-03-22 11:43:51 +01:00
hwmon hwmon: (w83627ehf) Add support for the W83627UHG 2011-11-04 12:00:48 +01:00
i2c i2c: Fix device name for 10-bit slave address 2011-11-23 11:33:07 +01:00
i2o doc: i2o: fix typo 'Settting' 2011-06-07 16:06:01 +02:00
ia64 Fix common misspellings 2011-03-31 11:26:23 -03:00
ide
infiniband
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2011-10-27 08:44:20 +02:00
ioctl ioctl: register LTTng ioctl 2011-09-12 11:50:56 -07:00
isdn doc: fix wrong arch/i386 references 2011-06-13 13:43:05 +02:00
ja_JP Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2011-07-25 23:06:24 -07:00
kbuild doc: fix wrong arch/i386 references 2011-06-13 13:43:05 +02:00
kdump
ko_KR
laptops Documentation: thinkpad-acpi grammo fixes 2011-11-04 12:01:47 -07:00
leds Documentation: fix leds-class.txt duplicated word 2011-11-04 12:01:48 -07:00
m68k Documentation: add pointer to name_to_dev_t for root= values 2011-08-03 14:25:21 -10:00
make
mips Fix common misspellings 2011-03-31 11:26:23 -03:00
misc-devices Fix common misspellings 2011-03-31 11:26:23 -03:00
mmc mmc: documentation of mmc non-blocking request usage and design. 2011-07-21 10:34:52 -04:00
mn10300
mtd
namespaces
netlabel
networking ipv4:correct description for tcp_max_syn_backlog 2011-12-06 13:02:28 -05:00
nfc
parisc
PCI doc: fix broken references 2011-09-27 18:08:04 +02:00
pcmcia
power PM / Sleep: Update documentation related to system wakeup 2011-11-28 22:14:45 +01:00
powerpc Fix common misspellings 2011-03-31 11:26:23 -03:00
pps
prctl
pti Kernel documentation for the PTI feature. 2011-05-13 16:31:00 -07:00
ptp ptp: Added a brand new class driver for ptp clocks. 2011-05-23 13:01:00 -07:00
rapidio RapidIO: documentation update 2011-11-02 16:07:02 -07:00
RCU rcu: Track idleness independent of idle tasks 2011-12-11 10:31:24 -08:00
s390 [S390] remove tape block docu 2011-07-24 10:48:22 +02:00
scheduler sched: Add documentation for bandwidth control 2011-08-14 12:03:58 +02:00
scsi Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2011-10-28 16:44:18 -07:00
security doc: fix broken references 2011-09-27 18:08:04 +02:00
serial RS485: fix inconsistencies in the meaning of some variables 2011-11-15 12:13:44 -08:00
sh
sound Merge branch 'fix/asoc' into for-linus 2011-12-06 13:22:28 +01:00
sparc
spi doc: fix broken references 2011-09-27 18:08:04 +02:00
sysctl kernel/sysctl.c: add cap_last_cap to /proc/sys/kernel 2011-10-31 17:30:53 -07:00
target [SCSI] tcm_mod_builder.py: Fix generated *_drop_nodeacl() handler 2011-03-23 11:36:45 -05:00
telephony Fix common misspellings 2011-03-31 11:26:23 -03:00
thermal
timers doc: fix broken references 2011-09-27 18:08:04 +02:00
trace mm: change isolate mode from #define to bitwise type 2011-10-31 17:30:44 -07:00
usb USB: linux-cdc-acm.inf: add support for the acm_ms gadget 2011-11-29 09:59:29 +09:00
vDSO Document the vDSO and add a reference parser 2011-07-14 17:57:09 -07:00
video4linux [media] gspca - zc3xx: New webcam 03f0:1b07 HP Premium Starter Cam 2011-09-23 23:31:12 -03:00
virtual Merge branch 'for-linus' of git://github.com/richardweinberger/linux 2011-11-02 09:45:39 -07:00
vm Merge branches 'slab/next' and 'slub/partial' into slab/for-linus 2011-10-26 18:09:12 +03:00
w1 Fix common misspellings 2011-03-31 11:26:23 -03:00
watchdog Documentation: watchdog: add guide how to convert drivers to new framework 2011-11-05 21:25:16 +01:00
wimax
x86 x86-64, doc: Remove int 0xcc from entry_64.S documentation 2011-08-16 08:04:08 -07:00
zh_CN remove the messy code file Documentation/zh_CN/SubmitChecklist 2011-09-26 16:18:41 -07:00
.gitignore
00-INDEX Documentation: add Ramoops usage description 2011-08-13 18:34:03 -07:00
applying-patches.txt
atomic_ops.txt Documentation/atomic_ops.txt: avoid volatile in sample code 2011-05-26 17:12:34 -07:00
bad_memory.txt
basic_profiling.txt
binfmt_misc.txt
braille-console.txt
bt8xxgpio.txt
btmrvl.txt
BUG-HUNTING
bus-virt-phys-mapping.txt doc: fix broken references 2011-09-27 18:08:04 +02:00
cachetlb.txt mm: convert mm->cpu_vm_cpumask into cpumask_var_t 2011-05-25 08:39:21 -07:00
Changes Documentation/Changes: remove some really obsolete text 2011-07-11 16:48:38 -07:00
circular-buffers.txt
coccinelle.txt
CodingStyle Documentation: update CodingStyle use of braces 2011-11-04 12:01:47 -07:00
cpu-hotplug.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
cpu-load.txt
cputopology.txt
dcdbas.txt
debugging-modules.txt
debugging-via-ohci1394.txt
dell_rbu.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
devices.txt
DMA-API-HOWTO.txt Documentation/DMA-API-HOWTO.txt: fix misleading example 2011-07-26 16:49:45 -07:00
DMA-API.txt include/linux/dma-mapping.h: add dma_zalloc_coherent() 2011-11-02 16:07:02 -07:00
DMA-attributes.txt
DMA-ISA-LPC.txt
dmaengine.txt Improve slave/cyclic DMA engine documentation 2011-07-27 20:33:48 +05:30
dontdiff Documentation: update dontdiff file 2011-05-23 15:14:11 -07:00
dynamic-debug-howto.txt Merge branch 'docs-next' of git://git.lwn.net/linux-2.6 2011-03-27 19:46:59 -07:00
edac.txt Merge branch 'for-linus2' of git://git.profusion.mobi/users/lucas/linux-2.6 2011-04-07 11:14:49 -07:00
eisa.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
email-clients.txt Documentation: email-clients: Add better Thunderbird information 2011-08-13 18:34:03 -07:00
feature-removal-schedule.txt sysctl: make CONFIG_SYSCTL_SYSCALL default to n 2011-11-02 16:07:02 -07:00
flexible-arrays.txt flex_array: flex_array_prealloc takes a number of elements, not an end 2011-04-28 16:12:47 -04:00
futex-requeue-pi.txt
gcov.txt
gpio.txt
highuid.txt
HOWTO Documentation: update LXR web link 2011-05-23 15:14:11 -07:00
hw_random.txt
hwspinlock.txt hwspinlock/core: register a bank of hwspinlocks in a single API call 2011-09-21 19:45:34 +03:00
init.txt
initrd.txt
intel_txt.txt
Intel-IOMMU.txt
io_ordering.txt
io-mapping.txt
iostats.txt Documentation/iostats.txt: bit-size reference etc. 2011-03-23 20:44:18 +01:00
IPMI.txt
IRQ-affinity.txt bitmap, irq: add smp_affinity_list interface to /proc/irq 2011-05-25 08:39:45 -07:00
IRQ.txt
irqflags-tracing.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
isapnp.txt
java.txt
kernel-doc-nano-HOWTO.txt
kernel-docs.txt doc: fix broken references 2011-09-27 18:08:04 +02:00
kernel-parameters.txt Merge branch 'iommu/fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu 2011-12-09 08:08:14 -08:00
kmemcheck.txt
kmemleak.txt Documentation: update kmemleak supported archs 2011-06-15 21:52:50 -07:00
kobject.txt
kprobes.txt
kref.txt kref: Fix typo in kref documentation 2011-03-07 13:20:05 -08:00
ldm.txt
local_ops.txt
lockdep-design.txt lockdep: Update documentation for lock-class leak detection 2011-12-11 10:31:23 -08:00
lockstat.txt Documentation: Add statistics about nested locks 2011-05-28 17:03:29 +02:00
logo.gif
logo.txt
magic-number.txt doc: fix wrong arch/i386 references 2011-06-13 13:43:05 +02:00
Makefile
ManagementStyle
mca.txt doc: fix wrong arch/i386 references 2011-06-13 13:43:05 +02:00
md.txt md: update documentation for md/rdev/state sysfs interface 2011-07-28 11:31:48 +10:00
media-framework.txt doc: fix broken references 2011-09-27 18:08:04 +02:00
memory-barriers.txt doc: fix broken references 2011-09-27 18:08:04 +02:00
memory-hotplug.txt
memory.txt
mono.txt
mutex-design.txt
nmi_watchdog.txt
nommu-mmap.txt
numastat.txt
oops-tracing.txt module,bug: Add TAINT_OOT_MODULE flag for modules not built in-tree 2011-11-07 07:54:42 +10:30
padata.txt
parport-lowlevel.txt
parport.txt
pi-futex.txt
pinctrl.txt drivers: create a pin control subsystem 2011-10-13 12:49:17 +02:00
pnp.txt
preempt-locking.txt
printk-formats.txt Documentation: update printk-formats.txt 2011-06-15 21:52:50 -07:00
prio_tree.txt
ramoops.txt Documentation: add Ramoops usage description 2011-08-13 18:34:03 -07:00
rbtree.txt Documentation: Update augmented rbtree documentation 2011-07-24 10:03:05 -07:00
rfkill.txt doc: fix broken references 2011-09-27 18:08:04 +02:00
robust-futex-ABI.txt
robust-futexes.txt
rt-mutex-design.txt
rt-mutex.txt
rtc.txt RTC: Fix up rtc.txt documentation to reflect changes to generic rtc layer 2011-03-09 11:25:10 -08:00
SAK.txt
SecurityBugs Fix common misspellings 2011-03-31 11:26:23 -03:00
serial-console.txt
sgi-ioc4.txt
sgi-visws.txt
SM501.txt
sparse.txt
spinlocks.txt Documentation/spinlocks.txt: Remove reference to sti()/cli() 2011-07-11 12:45:04 -07:00
stable_api_nonsense.txt doc: stable_api_nonsense.txt: fix paragraph to make more sense. 2011-03-30 12:02:05 +02:00
stable_kernel_rules.txt Update email address for stable patch submission 2011-10-18 13:58:59 -07:00
SubmitChecklist Documentation/SubmitChecklist: add RCU debug config options 2011-07-25 20:57:17 -07:00
SubmittingDrivers Documentation: SubmittingDrivers: fix Linus's git tree URL 2011-08-13 18:34:03 -07:00
SubmittingPatches Documentation: fix spelling error in SubmittingPatches 2011-08-13 18:34:02 -07:00
svga.txt
sysfs-rules.txt
sysrq.txt
unaligned-memory-access.txt
unicode.txt
unshare.txt
VGA-softcursor.txt
vgaarbiter.txt Documentation: fix vgaarbiter.txt typos etc. 2011-05-23 15:14:11 -07:00
video-output.txt
volatile-considered-harmful.txt
workqueue.txt workqueue: Document debugging tricks 2011-03-31 13:40:42 +02:00
xz.txt
zorro.txt