<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/Documentation/RCU, branch v3.14.3</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>Documentation/: update 00-INDEX files</title>
<updated>2014-02-11T00:01:40+00:00</updated>
<author>
<name>Henrik Austad</name>
<email>henrik@austad.us</email>
</author>
<published>2014-02-10T22:25:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=3cf8ca1c250d3c3d8bf61f20bd71acd1876bf777'/>
<id>3cf8ca1c250d3c3d8bf61f20bd71acd1876bf777</id>
<content type='text'>
Some of the 00-INDEX files are somewhat outdated and some folders does
not contain 00-INDEX at all.  Only outdated (with the notably exception
of spi) indexes are touched here, the 169 folders without 00-INDEX has
not been touched.

New 00-INDEX
 - spi/* was added in a series of commits dating back to 2006

Added files (missing in (*/)00-INDEX)
 - dmatest.txt was added by commit 851b7e16a07d ("dmatest: run test via
   debugfs")
 - this_cpu_ops.txt was added by commit a1b2a555d637 ("percpu: add
   documentation on this_cpu operations")
 - ww-mutex-design.txt was added by commit 040a0a371005 ("mutex: Add
   support for wound/wait style locks")
 - bcache.txt was added by commit cafe56359144 ("bcache: A block layer
   cache")
 - kernel-per-CPU-kthreads.txt was added by commit 49717cb40410
   ("kthread: Document ways of reducing OS jitter due to per-CPU
   kthreads")
 - phy.txt was added by commit ff764963479a ("drivers: phy: add generic
   PHY framework")
 - block/null_blk was added by commit 12f8f4fc0314 ("null_blk:
   documentation")
 - module-signing.txt was added by commit 3cafea307642 ("Add
   Documentation/module-signing.txt file")
 - assoc_array.txt was added by commit 3cb989501c26 ("Add a generic
   associative array implementation.")
 - arm/IXP4xx was part of the initial repo
 - arm/cluster-pm-race-avoidance.txt was added by commit 7fe31d28e839
   ("ARM: mcpm: introduce helpers for platform coherency exit/setup")
 - arm/firmware.txt was added by commit 7366b92a77fc ("ARM: Add
   interface for registering and calling firmware-specific operations")
 - arm/kernel_mode_neon.txt was added by commit 2afd0a05241d ("ARM:
   7825/1: document the use of NEON in kernel mode")
 - arm/tcm.txt was added by commit bc581770cfdd ("ARM: 5580/2: ARM TCM
   (Tightly-Coupled Memory) support v3")
 - arm/vlocks.txt was added by commit 9762f12d3e05 ("ARM: mcpm: Add
   baremetal voting mutexes")
 - blackfin/gptimers-example.c, Makefile was added by commit
   4b60779d5ea7 ("Blackfin: add an example showing how to use the
   gptimers API")
 - devicetree/usage-model.txt was added by commit 31134efc681a ("dt:
   Linux DT usage model documentation")
 - fb/api.txt was added by commit fb21c2f42879 ("fbdev: Add FOURCC-based
   format configuration API")
 - fb/sm501.txt was added by commit e6a049807105 ("video, sm501: add
   edid and commandline support")
 - fb/udlfb.txt was added by commit 96f8d864afd6 ("fbdev: move udlfb out
   of staging.")
 - filesystems/Makefile was added by commit 1e0051ae48a2
   ("Documentation/fs/: split txt and source files")
 - filesystems/nfs/nfsd-admin-interfaces.txt was added by commit
   8a4c6e19cfed ("nfsd: document kernel interfaces for nfsd
   configuration")
 - ide/warm-plug-howto.txt was added by commit f74c91413ec6 ("ide: add
   warm-plug support for IDE devices (take 2)")
 - laptops/Makefile was added by commit d49129accc21
   ("Documentation/laptop/: split txt and source files")
 - leds/leds-blinkm.txt was added by commit b54cf35a7f65 ("LEDS: add
   BlinkM RGB LED driver, documentation and update MAINTAINERS")
 - leds/ledtrig-oneshot.txt was added by commit 5e417281cde2 ("leds: add
   oneshot trigger")
 - leds/ledtrig-transient.txt was added by commit 44e1e9f8e705 ("leds:
   add new transient trigger for one shot timer activation")
 - m68k/README.buddha was part of the initial repo
 - networking/LICENSE.(qla3xxx|qlcnic|qlge) was added by commits
   40839129f779, c4e84bde1d59, 5a4faa873782
 - networking/Makefile was added by commit 3794f3e812ef ("docsrc: build
   Documentation/ sources")
 - networking/i40evf.txt was added by commit 105bf2fe6b32 ("i40evf: add
   driver to kernel build system")
 - networking/ipsec.txt was added by commit b3c6efbc36e2 ("xfrm: Add
   file to document IPsec corner case")
 - networking/mac80211-auth-assoc-deauth.txt was added by commit
   3cd7920a2be8 ("mac80211: add auth/assoc/deauth flow diagram")
 - networking/netlink_mmap.txt was added by commit 5683264c3981
   ("netlink: add documentation for memory mapped I/O")
 - networking/nf_conntrack-sysctl.txt was added by commit c9f9e0e1597f
   ("netfilter: doc: add nf_conntrack sysctl api documentation") lan)
 - networking/team.txt was added by commit 3d249d4ca7d0 ("net: introduce
   ethernet teaming device")
 - networking/vxlan.txt was added by commit d342894c5d2f ("vxlan:
   virtual extensible lan")
 - power/runtime_pm.txt was added by commit 5e928f77a09a ("PM: Introduce
   core framework for run-time PM of I/O devices (rev.  17)")
 - power/charger-manager.txt was added by commit 3bb3dbbd56ea
   ("power_supply: Add initial Charger-Manager driver")
 - RCU/lockdep-splat.txt was added by commit d7bd2d68aa2e ("rcu:
   Document interpretation of RCU-lockdep splats")
 - s390/kvm.txt was added by 5ecee4b (KVM: s390: API documentation)
 - s390/qeth.txt was added by commit b4d72c08b358 ("qeth: bridgeport
   support - basic control")
 - scheduler/sched-bwc.txt was added by commit 88ebc08ea9f7 ("sched: Add
   documentation for bandwidth control")
 - scsi/advansys.txt was added by commit 4bd6d7f35661 ("[SCSI] advansys:
   Move documentation to Documentation/scsi")
 - scsi/bfa.txt was added by commit 1ec90174bdb4 ("[SCSI] bfa: add
   readme file")
 - scsi/bnx2fc.txt was added by commit 12b8fc10eaf4 ("[SCSI] bnx2fc: Add
   driver documentation")
 - scsi/cxgb3i.txt was added by commit c3673464ebc0 ("[SCSI] cxgb3i: Add
   cxgb3i iSCSI driver.")
 - scsi/hpsa.txt was added by commit 992ebcf14f3c ("[SCSI] hpsa: Add
   hpsa.txt to Documentation/scsi")
 - scsi/link_power_management_policy.txt was added by commit
   ca77329fb713 ("[libata] Link power management infrastructure")
 - scsi/osd.txt was added by commit 78e0c621deca ("[SCSI] osd:
   Documentation for OSD library")
 - scsi/scsi-parameter.txt was created/moved by commit 163475fb111c
   ("Documentation: move SCSI parameters to their own text file")
 - serial/driver was part of the initial repo
 - serial/n_gsm.txt was added by commit 323e84122ec6 ("n_gsm: add a
   documentation")
 - timers/Makefile was added by commit 3794f3e812ef ("docsrc: build
   Documentation/ sources")
 - virt/kvm/s390.txt was added by commit d9101fca3d57 ("KVM: s390:
   diagnose call documentation")
 - vm/split_page_table_lock was added by commit 49076ec2ccaf ("mm:
   dynamically allocate page-&gt;ptl if it cannot be embedded to struct
   page")
 - w1/slaves/w1_ds28e04 was added by commit fbf7f7b4e2ae ("w1: Add
   1-wire slave device driver for DS28E04-100")
 - w1/masters/omap-hdq was added by commit e0a29382c6f5 ("hdq:
   documentation for OMAP HDQ")
 - x86/early-microcode.txt was added by commit 0d91ea86a895 ("x86, doc:
   Documentation for early microcode loading")
 - x86/earlyprintk.txt was added by commit a1aade478862 ("x86/doc:
   mini-howto for using earlyprintk=dbgp")
 - x86/entry_64.txt was added by commit 8b4777a4b50c ("x86-64: Document
   some of entry_64.S")
 - x86/pat.txt was added by commit d27554d874c7 ("x86: PAT
   documentation")

Moved files
 - arm/kernel_user_helpers.txt was moved out of arch/arm/kernel by
   commit 37b8304642c7 ("ARM: kuser: move interface documentation out of
   the source code")
 - efi-stub.txt was moved out of x86/ and down into Documentation/ in
   commit 4172fe2f8a47 ("EFI stub documentation updates")
 - laptops/hpfall.c was moved out of hwmon/ and into laptops/ in commit
   efcfed9bad88 ("Move hp_accel to drivers/platform/x86")
 - commit 5616c23ad9cd ("x86: doc: move x86-generic documentation from
   Doc/x86/i386"):
   * x86/usb-legacy-support.txt
   * x86/boot.txt
   * x86/zero_page.txt
 - power/video_extension.txt was moved to acpi in commit 70e66e4df191
   ("ACPI / video: move video_extension.txt to Documentation/acpi")

Removed files (left in 00-INDEX)
 - memory.txt was removed by commit 00ea8990aadf ("memory.txt: remove
   stray information")
 - gpio.txt was moved to gpio/ in commit fd8e198cfcaa ("Documentation:
   gpiolib: document new interface")
 - networking/DLINK.txt was removed by commit 168e06ae26dd
   ("drivers/net: delete old parallel port de600/de620 drivers")
 - serial/hayes-esp.txt was removed by commit f53a2ade0bb9 ("tty: esp:
   remove broken driver")
 - s390/TAPE was removed by commit 9e280f669308 ("[S390] remove tape
   block docu")
 - vm/locking was removed by commit 57ea8171d2bc ("mm: documentation:
   remove hopelessly out-of-date locking doc")
 - laptops/acer-wmi.txt was remvoed by commit 020036678e81 ("acer-wmi:
   Delete out-of-date documentation")

Typos/misc issues
 - rpc-server-gss.txt was added as knfsd-rpcgss.txt in commit
   030d794bf498 ("SUNRPC: Use gssproxy upcall for server RPCGSS
   authentication.")
 - commit b88cf73d9278 ("net: add missing entries to
   Documentation/networking/00-INDEX")
   * generic-hdlc.txt was added as generic_hdlc.txt
   * spider_net.txt was added as spider-net.txt
 - w1/master/mxc-w1 was added as mxc_w1 by commit a5fd9139f74c ("w1: add
   1-wire master driver for i.MX27 / i.MX31")
 - s390/zfcpdump.txt was added as zfcpdump by commit 6920c12a407e
   ("[S390] Add Documentation/s390/00-INDEX.")

Signed-off-by: Henrik Austad &lt;henrik@austad.us&gt;
Reviewed-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;	[rcu bits]
Acked-by: Rob Landley &lt;rob@landley.net&gt;
Cc: Jiri Kosina &lt;jkosina@suse.cz&gt;
Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: Rob Herring &lt;robh+dt@kernel.org&gt;
Cc: David S. Miller &lt;davem@davemloft.net&gt;
Cc: Mark Brown &lt;broonie@kernel.org&gt;
Cc: "H. Peter Anvin" &lt;hpa@zytor.com&gt;
Cc: Ingo Molnar &lt;mingo@elte.hu&gt;
Cc: Gleb Natapov &lt;gleb@kernel.org&gt;
Cc: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Len Brown &lt;len.brown@intel.com&gt;
Cc: James Bottomley &lt;JBottomley@parallels.com&gt;
Cc: Jean-Christophe Plagniol-Villard &lt;plagnioj@jcrosoft.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Some of the 00-INDEX files are somewhat outdated and some folders does
not contain 00-INDEX at all.  Only outdated (with the notably exception
of spi) indexes are touched here, the 169 folders without 00-INDEX has
not been touched.

New 00-INDEX
 - spi/* was added in a series of commits dating back to 2006

Added files (missing in (*/)00-INDEX)
 - dmatest.txt was added by commit 851b7e16a07d ("dmatest: run test via
   debugfs")
 - this_cpu_ops.txt was added by commit a1b2a555d637 ("percpu: add
   documentation on this_cpu operations")
 - ww-mutex-design.txt was added by commit 040a0a371005 ("mutex: Add
   support for wound/wait style locks")
 - bcache.txt was added by commit cafe56359144 ("bcache: A block layer
   cache")
 - kernel-per-CPU-kthreads.txt was added by commit 49717cb40410
   ("kthread: Document ways of reducing OS jitter due to per-CPU
   kthreads")
 - phy.txt was added by commit ff764963479a ("drivers: phy: add generic
   PHY framework")
 - block/null_blk was added by commit 12f8f4fc0314 ("null_blk:
   documentation")
 - module-signing.txt was added by commit 3cafea307642 ("Add
   Documentation/module-signing.txt file")
 - assoc_array.txt was added by commit 3cb989501c26 ("Add a generic
   associative array implementation.")
 - arm/IXP4xx was part of the initial repo
 - arm/cluster-pm-race-avoidance.txt was added by commit 7fe31d28e839
   ("ARM: mcpm: introduce helpers for platform coherency exit/setup")
 - arm/firmware.txt was added by commit 7366b92a77fc ("ARM: Add
   interface for registering and calling firmware-specific operations")
 - arm/kernel_mode_neon.txt was added by commit 2afd0a05241d ("ARM:
   7825/1: document the use of NEON in kernel mode")
 - arm/tcm.txt was added by commit bc581770cfdd ("ARM: 5580/2: ARM TCM
   (Tightly-Coupled Memory) support v3")
 - arm/vlocks.txt was added by commit 9762f12d3e05 ("ARM: mcpm: Add
   baremetal voting mutexes")
 - blackfin/gptimers-example.c, Makefile was added by commit
   4b60779d5ea7 ("Blackfin: add an example showing how to use the
   gptimers API")
 - devicetree/usage-model.txt was added by commit 31134efc681a ("dt:
   Linux DT usage model documentation")
 - fb/api.txt was added by commit fb21c2f42879 ("fbdev: Add FOURCC-based
   format configuration API")
 - fb/sm501.txt was added by commit e6a049807105 ("video, sm501: add
   edid and commandline support")
 - fb/udlfb.txt was added by commit 96f8d864afd6 ("fbdev: move udlfb out
   of staging.")
 - filesystems/Makefile was added by commit 1e0051ae48a2
   ("Documentation/fs/: split txt and source files")
 - filesystems/nfs/nfsd-admin-interfaces.txt was added by commit
   8a4c6e19cfed ("nfsd: document kernel interfaces for nfsd
   configuration")
 - ide/warm-plug-howto.txt was added by commit f74c91413ec6 ("ide: add
   warm-plug support for IDE devices (take 2)")
 - laptops/Makefile was added by commit d49129accc21
   ("Documentation/laptop/: split txt and source files")
 - leds/leds-blinkm.txt was added by commit b54cf35a7f65 ("LEDS: add
   BlinkM RGB LED driver, documentation and update MAINTAINERS")
 - leds/ledtrig-oneshot.txt was added by commit 5e417281cde2 ("leds: add
   oneshot trigger")
 - leds/ledtrig-transient.txt was added by commit 44e1e9f8e705 ("leds:
   add new transient trigger for one shot timer activation")
 - m68k/README.buddha was part of the initial repo
 - networking/LICENSE.(qla3xxx|qlcnic|qlge) was added by commits
   40839129f779, c4e84bde1d59, 5a4faa873782
 - networking/Makefile was added by commit 3794f3e812ef ("docsrc: build
   Documentation/ sources")
 - networking/i40evf.txt was added by commit 105bf2fe6b32 ("i40evf: add
   driver to kernel build system")
 - networking/ipsec.txt was added by commit b3c6efbc36e2 ("xfrm: Add
   file to document IPsec corner case")
 - networking/mac80211-auth-assoc-deauth.txt was added by commit
   3cd7920a2be8 ("mac80211: add auth/assoc/deauth flow diagram")
 - networking/netlink_mmap.txt was added by commit 5683264c3981
   ("netlink: add documentation for memory mapped I/O")
 - networking/nf_conntrack-sysctl.txt was added by commit c9f9e0e1597f
   ("netfilter: doc: add nf_conntrack sysctl api documentation") lan)
 - networking/team.txt was added by commit 3d249d4ca7d0 ("net: introduce
   ethernet teaming device")
 - networking/vxlan.txt was added by commit d342894c5d2f ("vxlan:
   virtual extensible lan")
 - power/runtime_pm.txt was added by commit 5e928f77a09a ("PM: Introduce
   core framework for run-time PM of I/O devices (rev.  17)")
 - power/charger-manager.txt was added by commit 3bb3dbbd56ea
   ("power_supply: Add initial Charger-Manager driver")
 - RCU/lockdep-splat.txt was added by commit d7bd2d68aa2e ("rcu:
   Document interpretation of RCU-lockdep splats")
 - s390/kvm.txt was added by 5ecee4b (KVM: s390: API documentation)
 - s390/qeth.txt was added by commit b4d72c08b358 ("qeth: bridgeport
   support - basic control")
 - scheduler/sched-bwc.txt was added by commit 88ebc08ea9f7 ("sched: Add
   documentation for bandwidth control")
 - scsi/advansys.txt was added by commit 4bd6d7f35661 ("[SCSI] advansys:
   Move documentation to Documentation/scsi")
 - scsi/bfa.txt was added by commit 1ec90174bdb4 ("[SCSI] bfa: add
   readme file")
 - scsi/bnx2fc.txt was added by commit 12b8fc10eaf4 ("[SCSI] bnx2fc: Add
   driver documentation")
 - scsi/cxgb3i.txt was added by commit c3673464ebc0 ("[SCSI] cxgb3i: Add
   cxgb3i iSCSI driver.")
 - scsi/hpsa.txt was added by commit 992ebcf14f3c ("[SCSI] hpsa: Add
   hpsa.txt to Documentation/scsi")
 - scsi/link_power_management_policy.txt was added by commit
   ca77329fb713 ("[libata] Link power management infrastructure")
 - scsi/osd.txt was added by commit 78e0c621deca ("[SCSI] osd:
   Documentation for OSD library")
 - scsi/scsi-parameter.txt was created/moved by commit 163475fb111c
   ("Documentation: move SCSI parameters to their own text file")
 - serial/driver was part of the initial repo
 - serial/n_gsm.txt was added by commit 323e84122ec6 ("n_gsm: add a
   documentation")
 - timers/Makefile was added by commit 3794f3e812ef ("docsrc: build
   Documentation/ sources")
 - virt/kvm/s390.txt was added by commit d9101fca3d57 ("KVM: s390:
   diagnose call documentation")
 - vm/split_page_table_lock was added by commit 49076ec2ccaf ("mm:
   dynamically allocate page-&gt;ptl if it cannot be embedded to struct
   page")
 - w1/slaves/w1_ds28e04 was added by commit fbf7f7b4e2ae ("w1: Add
   1-wire slave device driver for DS28E04-100")
 - w1/masters/omap-hdq was added by commit e0a29382c6f5 ("hdq:
   documentation for OMAP HDQ")
 - x86/early-microcode.txt was added by commit 0d91ea86a895 ("x86, doc:
   Documentation for early microcode loading")
 - x86/earlyprintk.txt was added by commit a1aade478862 ("x86/doc:
   mini-howto for using earlyprintk=dbgp")
 - x86/entry_64.txt was added by commit 8b4777a4b50c ("x86-64: Document
   some of entry_64.S")
 - x86/pat.txt was added by commit d27554d874c7 ("x86: PAT
   documentation")

Moved files
 - arm/kernel_user_helpers.txt was moved out of arch/arm/kernel by
   commit 37b8304642c7 ("ARM: kuser: move interface documentation out of
   the source code")
 - efi-stub.txt was moved out of x86/ and down into Documentation/ in
   commit 4172fe2f8a47 ("EFI stub documentation updates")
 - laptops/hpfall.c was moved out of hwmon/ and into laptops/ in commit
   efcfed9bad88 ("Move hp_accel to drivers/platform/x86")
 - commit 5616c23ad9cd ("x86: doc: move x86-generic documentation from
   Doc/x86/i386"):
   * x86/usb-legacy-support.txt
   * x86/boot.txt
   * x86/zero_page.txt
 - power/video_extension.txt was moved to acpi in commit 70e66e4df191
   ("ACPI / video: move video_extension.txt to Documentation/acpi")

Removed files (left in 00-INDEX)
 - memory.txt was removed by commit 00ea8990aadf ("memory.txt: remove
   stray information")
 - gpio.txt was moved to gpio/ in commit fd8e198cfcaa ("Documentation:
   gpiolib: document new interface")
 - networking/DLINK.txt was removed by commit 168e06ae26dd
   ("drivers/net: delete old parallel port de600/de620 drivers")
 - serial/hayes-esp.txt was removed by commit f53a2ade0bb9 ("tty: esp:
   remove broken driver")
 - s390/TAPE was removed by commit 9e280f669308 ("[S390] remove tape
   block docu")
 - vm/locking was removed by commit 57ea8171d2bc ("mm: documentation:
   remove hopelessly out-of-date locking doc")
 - laptops/acer-wmi.txt was remvoed by commit 020036678e81 ("acer-wmi:
   Delete out-of-date documentation")

Typos/misc issues
 - rpc-server-gss.txt was added as knfsd-rpcgss.txt in commit
   030d794bf498 ("SUNRPC: Use gssproxy upcall for server RPCGSS
   authentication.")
 - commit b88cf73d9278 ("net: add missing entries to
   Documentation/networking/00-INDEX")
   * generic-hdlc.txt was added as generic_hdlc.txt
   * spider_net.txt was added as spider-net.txt
 - w1/master/mxc-w1 was added as mxc_w1 by commit a5fd9139f74c ("w1: add
   1-wire master driver for i.MX27 / i.MX31")
 - s390/zfcpdump.txt was added as zfcpdump by commit 6920c12a407e
   ("[S390] Add Documentation/s390/00-INDEX.")

Signed-off-by: Henrik Austad &lt;henrik@austad.us&gt;
Reviewed-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;	[rcu bits]
Acked-by: Rob Landley &lt;rob@landley.net&gt;
Cc: Jiri Kosina &lt;jkosina@suse.cz&gt;
Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: Rob Herring &lt;robh+dt@kernel.org&gt;
Cc: David S. Miller &lt;davem@davemloft.net&gt;
Cc: Mark Brown &lt;broonie@kernel.org&gt;
Cc: "H. Peter Anvin" &lt;hpa@zytor.com&gt;
Cc: Ingo Molnar &lt;mingo@elte.hu&gt;
Cc: Gleb Natapov &lt;gleb@kernel.org&gt;
Cc: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Len Brown &lt;len.brown@intel.com&gt;
Cc: James Bottomley &lt;JBottomley@parallels.com&gt;
Cc: Jean-Christophe Plagniol-Villard &lt;plagnioj@jcrosoft.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branches 'doc.2013.12.03a', 'fixes.2013.12.12a', 'rcutorture.2013.12.03a' and 'sparse.2013.12.12a' into HEAD</title>
<updated>2013-12-12T20:35:38+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2013-12-12T20:35:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=0d3c55bc9fd58393bd3bd9974991ec1f815e1326'/>
<id>0d3c55bc9fd58393bd3bd9974991ec1f815e1326</id>
<content type='text'>
doc.2013.12.03a: Topic branch for documentation changes.
fixes.2013.12.12a: Topic branch for miscellaneous fixes.
rcutorture.2013.12.03a: Topic branch for new rcutorture/KVM scripting.
sparse.2013.12.12a: Topic branch for sparse-RCU changes.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
doc.2013.12.03a: Topic branch for documentation changes.
fixes.2013.12.12a: Topic branch for miscellaneous fixes.
rcutorture.2013.12.03a: Topic branch for new rcutorture/KVM scripting.
sparse.2013.12.12a: Topic branch for sparse-RCU changes.
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Break call_rcu() deadlock involving scheduler and perf</title>
<updated>2013-12-03T18:10:18+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2013-10-04T21:33:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=96d3fd0d315a949e30adc80f086031c5cdf070d1'/>
<id>96d3fd0d315a949e30adc80f086031c5cdf070d1</id>
<content type='text'>
Dave Jones got the following lockdep splat:

&gt;  ======================================================
&gt;  [ INFO: possible circular locking dependency detected ]
&gt;  3.12.0-rc3+ #92 Not tainted
&gt;  -------------------------------------------------------
&gt;  trinity-child2/15191 is trying to acquire lock:
&gt;   (&amp;rdp-&gt;nocb_wq){......}, at: [&lt;ffffffff8108ff43&gt;] __wake_up+0x23/0x50
&gt;
&gt; but task is already holding lock:
&gt;   (&amp;ctx-&gt;lock){-.-...}, at: [&lt;ffffffff81154c19&gt;] perf_event_exit_task+0x109/0x230
&gt;
&gt; which lock already depends on the new lock.
&gt;
&gt;
&gt; the existing dependency chain (in reverse order) is:
&gt;
&gt; -&gt; #3 (&amp;ctx-&gt;lock){-.-...}:
&gt;         [&lt;ffffffff810cc243&gt;] lock_acquire+0x93/0x200
&gt;         [&lt;ffffffff81733f90&gt;] _raw_spin_lock+0x40/0x80
&gt;         [&lt;ffffffff811500ff&gt;] __perf_event_task_sched_out+0x2df/0x5e0
&gt;         [&lt;ffffffff81091b83&gt;] perf_event_task_sched_out+0x93/0xa0
&gt;         [&lt;ffffffff81732052&gt;] __schedule+0x1d2/0xa20
&gt;         [&lt;ffffffff81732f30&gt;] preempt_schedule_irq+0x50/0xb0
&gt;         [&lt;ffffffff817352b6&gt;] retint_kernel+0x26/0x30
&gt;         [&lt;ffffffff813eed04&gt;] tty_flip_buffer_push+0x34/0x50
&gt;         [&lt;ffffffff813f0504&gt;] pty_write+0x54/0x60
&gt;         [&lt;ffffffff813e900d&gt;] n_tty_write+0x32d/0x4e0
&gt;         [&lt;ffffffff813e5838&gt;] tty_write+0x158/0x2d0
&gt;         [&lt;ffffffff811c4850&gt;] vfs_write+0xc0/0x1f0
&gt;         [&lt;ffffffff811c52cc&gt;] SyS_write+0x4c/0xa0
&gt;         [&lt;ffffffff8173d4e4&gt;] tracesys+0xdd/0xe2
&gt;
&gt; -&gt; #2 (&amp;rq-&gt;lock){-.-.-.}:
&gt;         [&lt;ffffffff810cc243&gt;] lock_acquire+0x93/0x200
&gt;         [&lt;ffffffff81733f90&gt;] _raw_spin_lock+0x40/0x80
&gt;         [&lt;ffffffff810980b2&gt;] wake_up_new_task+0xc2/0x2e0
&gt;         [&lt;ffffffff81054336&gt;] do_fork+0x126/0x460
&gt;         [&lt;ffffffff81054696&gt;] kernel_thread+0x26/0x30
&gt;         [&lt;ffffffff8171ff93&gt;] rest_init+0x23/0x140
&gt;         [&lt;ffffffff81ee1e4b&gt;] start_kernel+0x3f6/0x403
&gt;         [&lt;ffffffff81ee1571&gt;] x86_64_start_reservations+0x2a/0x2c
&gt;         [&lt;ffffffff81ee1664&gt;] x86_64_start_kernel+0xf1/0xf4
&gt;
&gt; -&gt; #1 (&amp;p-&gt;pi_lock){-.-.-.}:
&gt;         [&lt;ffffffff810cc243&gt;] lock_acquire+0x93/0x200
&gt;         [&lt;ffffffff8173419b&gt;] _raw_spin_lock_irqsave+0x4b/0x90
&gt;         [&lt;ffffffff810979d1&gt;] try_to_wake_up+0x31/0x350
&gt;         [&lt;ffffffff81097d62&gt;] default_wake_function+0x12/0x20
&gt;         [&lt;ffffffff81084af8&gt;] autoremove_wake_function+0x18/0x40
&gt;         [&lt;ffffffff8108ea38&gt;] __wake_up_common+0x58/0x90
&gt;         [&lt;ffffffff8108ff59&gt;] __wake_up+0x39/0x50
&gt;         [&lt;ffffffff8110d4f8&gt;] __call_rcu_nocb_enqueue+0xa8/0xc0
&gt;         [&lt;ffffffff81111450&gt;] __call_rcu+0x140/0x820
&gt;         [&lt;ffffffff81111b8d&gt;] call_rcu+0x1d/0x20
&gt;         [&lt;ffffffff81093697&gt;] cpu_attach_domain+0x287/0x360
&gt;         [&lt;ffffffff81099d7e&gt;] build_sched_domains+0xe5e/0x10a0
&gt;         [&lt;ffffffff81efa7fc&gt;] sched_init_smp+0x3b7/0x47a
&gt;         [&lt;ffffffff81ee1f4e&gt;] kernel_init_freeable+0xf6/0x202
&gt;         [&lt;ffffffff817200be&gt;] kernel_init+0xe/0x190
&gt;         [&lt;ffffffff8173d22c&gt;] ret_from_fork+0x7c/0xb0
&gt;
&gt; -&gt; #0 (&amp;rdp-&gt;nocb_wq){......}:
&gt;         [&lt;ffffffff810cb7ca&gt;] __lock_acquire+0x191a/0x1be0
&gt;         [&lt;ffffffff810cc243&gt;] lock_acquire+0x93/0x200
&gt;         [&lt;ffffffff8173419b&gt;] _raw_spin_lock_irqsave+0x4b/0x90
&gt;         [&lt;ffffffff8108ff43&gt;] __wake_up+0x23/0x50
&gt;         [&lt;ffffffff8110d4f8&gt;] __call_rcu_nocb_enqueue+0xa8/0xc0
&gt;         [&lt;ffffffff81111450&gt;] __call_rcu+0x140/0x820
&gt;         [&lt;ffffffff81111bb0&gt;] kfree_call_rcu+0x20/0x30
&gt;         [&lt;ffffffff81149abf&gt;] put_ctx+0x4f/0x70
&gt;         [&lt;ffffffff81154c3e&gt;] perf_event_exit_task+0x12e/0x230
&gt;         [&lt;ffffffff81056b8d&gt;] do_exit+0x30d/0xcc0
&gt;         [&lt;ffffffff8105893c&gt;] do_group_exit+0x4c/0xc0
&gt;         [&lt;ffffffff810589c4&gt;] SyS_exit_group+0x14/0x20
&gt;         [&lt;ffffffff8173d4e4&gt;] tracesys+0xdd/0xe2
&gt;
&gt; other info that might help us debug this:
&gt;
&gt; Chain exists of:
&gt;   &amp;rdp-&gt;nocb_wq --&gt; &amp;rq-&gt;lock --&gt; &amp;ctx-&gt;lock
&gt;
&gt;   Possible unsafe locking scenario:
&gt;
&gt;         CPU0                    CPU1
&gt;         ----                    ----
&gt;    lock(&amp;ctx-&gt;lock);
&gt;                                 lock(&amp;rq-&gt;lock);
&gt;                                 lock(&amp;ctx-&gt;lock);
&gt;    lock(&amp;rdp-&gt;nocb_wq);
&gt;
&gt;  *** DEADLOCK ***
&gt;
&gt; 1 lock held by trinity-child2/15191:
&gt;  #0:  (&amp;ctx-&gt;lock){-.-...}, at: [&lt;ffffffff81154c19&gt;] perf_event_exit_task+0x109/0x230
&gt;
&gt; stack backtrace:
&gt; CPU: 2 PID: 15191 Comm: trinity-child2 Not tainted 3.12.0-rc3+ #92
&gt;  ffffffff82565b70 ffff880070c2dbf8 ffffffff8172a363 ffffffff824edf40
&gt;  ffff880070c2dc38 ffffffff81726741 ffff880070c2dc90 ffff88022383b1c0
&gt;  ffff88022383aac0 0000000000000000 ffff88022383b188 ffff88022383b1c0
&gt; Call Trace:
&gt;  [&lt;ffffffff8172a363&gt;] dump_stack+0x4e/0x82
&gt;  [&lt;ffffffff81726741&gt;] print_circular_bug+0x200/0x20f
&gt;  [&lt;ffffffff810cb7ca&gt;] __lock_acquire+0x191a/0x1be0
&gt;  [&lt;ffffffff810c6439&gt;] ? get_lock_stats+0x19/0x60
&gt;  [&lt;ffffffff8100b2f4&gt;] ? native_sched_clock+0x24/0x80
&gt;  [&lt;ffffffff810cc243&gt;] lock_acquire+0x93/0x200
&gt;  [&lt;ffffffff8108ff43&gt;] ? __wake_up+0x23/0x50
&gt;  [&lt;ffffffff8173419b&gt;] _raw_spin_lock_irqsave+0x4b/0x90
&gt;  [&lt;ffffffff8108ff43&gt;] ? __wake_up+0x23/0x50
&gt;  [&lt;ffffffff8108ff43&gt;] __wake_up+0x23/0x50
&gt;  [&lt;ffffffff8110d4f8&gt;] __call_rcu_nocb_enqueue+0xa8/0xc0
&gt;  [&lt;ffffffff81111450&gt;] __call_rcu+0x140/0x820
&gt;  [&lt;ffffffff8109bc8f&gt;] ? local_clock+0x3f/0x50
&gt;  [&lt;ffffffff81111bb0&gt;] kfree_call_rcu+0x20/0x30
&gt;  [&lt;ffffffff81149abf&gt;] put_ctx+0x4f/0x70
&gt;  [&lt;ffffffff81154c3e&gt;] perf_event_exit_task+0x12e/0x230
&gt;  [&lt;ffffffff81056b8d&gt;] do_exit+0x30d/0xcc0
&gt;  [&lt;ffffffff810c9af5&gt;] ? trace_hardirqs_on_caller+0x115/0x1e0
&gt;  [&lt;ffffffff810c9bcd&gt;] ? trace_hardirqs_on+0xd/0x10
&gt;  [&lt;ffffffff8105893c&gt;] do_group_exit+0x4c/0xc0
&gt;  [&lt;ffffffff810589c4&gt;] SyS_exit_group+0x14/0x20
&gt;  [&lt;ffffffff8173d4e4&gt;] tracesys+0xdd/0xe2

The underlying problem is that perf is invoking call_rcu() with the
scheduler locks held, but in NOCB mode, call_rcu() will with high
probability invoke the scheduler -- which just might want to use its
locks.  The reason that call_rcu() needs to invoke the scheduler is
to wake up the corresponding rcuo callback-offload kthread, which
does the job of starting up a grace period and invoking the callbacks
afterwards.

One solution (championed on a related problem by Lai Jiangshan) is to
simply defer the wakeup to some point where scheduler locks are no longer
held.  Since we don't want to unnecessarily incur the cost of such
deferral, the task before us is threefold:

1.	Determine when it is likely that a relevant scheduler lock is held.

2.	Defer the wakeup in such cases.

3.	Ensure that all deferred wakeups eventually happen, preferably
	sooner rather than later.

We use irqs_disabled_flags() as a proxy for relevant scheduler locks
being held.  This works because the relevant locks are always acquired
with interrupts disabled.  We may defer more often than needed, but that
is at least safe.

The wakeup deferral is tracked via a new field in the per-CPU and
per-RCU-flavor rcu_data structure, namely -&gt;nocb_defer_wakeup.

This flag is checked by the RCU core processing.  The __rcu_pending()
function now checks this flag, which causes rcu_check_callbacks()
to initiate RCU core processing at each scheduling-clock interrupt
where this flag is set.  Of course this is not sufficient because
scheduling-clock interrupts are often turned off (the things we used to
be able to count on!).  So the flags are also checked on entry to any
state that RCU considers to be idle, which includes both NO_HZ_IDLE idle
state and NO_HZ_FULL user-mode-execution state.

This approach should allow call_rcu() to be invoked regardless of what
locks you might be holding, the key word being "should".

Reported-by: Dave Jones &lt;davej@redhat.com&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Cc: Peter Zijlstra &lt;peterz@infradead.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Dave Jones got the following lockdep splat:

&gt;  ======================================================
&gt;  [ INFO: possible circular locking dependency detected ]
&gt;  3.12.0-rc3+ #92 Not tainted
&gt;  -------------------------------------------------------
&gt;  trinity-child2/15191 is trying to acquire lock:
&gt;   (&amp;rdp-&gt;nocb_wq){......}, at: [&lt;ffffffff8108ff43&gt;] __wake_up+0x23/0x50
&gt;
&gt; but task is already holding lock:
&gt;   (&amp;ctx-&gt;lock){-.-...}, at: [&lt;ffffffff81154c19&gt;] perf_event_exit_task+0x109/0x230
&gt;
&gt; which lock already depends on the new lock.
&gt;
&gt;
&gt; the existing dependency chain (in reverse order) is:
&gt;
&gt; -&gt; #3 (&amp;ctx-&gt;lock){-.-...}:
&gt;         [&lt;ffffffff810cc243&gt;] lock_acquire+0x93/0x200
&gt;         [&lt;ffffffff81733f90&gt;] _raw_spin_lock+0x40/0x80
&gt;         [&lt;ffffffff811500ff&gt;] __perf_event_task_sched_out+0x2df/0x5e0
&gt;         [&lt;ffffffff81091b83&gt;] perf_event_task_sched_out+0x93/0xa0
&gt;         [&lt;ffffffff81732052&gt;] __schedule+0x1d2/0xa20
&gt;         [&lt;ffffffff81732f30&gt;] preempt_schedule_irq+0x50/0xb0
&gt;         [&lt;ffffffff817352b6&gt;] retint_kernel+0x26/0x30
&gt;         [&lt;ffffffff813eed04&gt;] tty_flip_buffer_push+0x34/0x50
&gt;         [&lt;ffffffff813f0504&gt;] pty_write+0x54/0x60
&gt;         [&lt;ffffffff813e900d&gt;] n_tty_write+0x32d/0x4e0
&gt;         [&lt;ffffffff813e5838&gt;] tty_write+0x158/0x2d0
&gt;         [&lt;ffffffff811c4850&gt;] vfs_write+0xc0/0x1f0
&gt;         [&lt;ffffffff811c52cc&gt;] SyS_write+0x4c/0xa0
&gt;         [&lt;ffffffff8173d4e4&gt;] tracesys+0xdd/0xe2
&gt;
&gt; -&gt; #2 (&amp;rq-&gt;lock){-.-.-.}:
&gt;         [&lt;ffffffff810cc243&gt;] lock_acquire+0x93/0x200
&gt;         [&lt;ffffffff81733f90&gt;] _raw_spin_lock+0x40/0x80
&gt;         [&lt;ffffffff810980b2&gt;] wake_up_new_task+0xc2/0x2e0
&gt;         [&lt;ffffffff81054336&gt;] do_fork+0x126/0x460
&gt;         [&lt;ffffffff81054696&gt;] kernel_thread+0x26/0x30
&gt;         [&lt;ffffffff8171ff93&gt;] rest_init+0x23/0x140
&gt;         [&lt;ffffffff81ee1e4b&gt;] start_kernel+0x3f6/0x403
&gt;         [&lt;ffffffff81ee1571&gt;] x86_64_start_reservations+0x2a/0x2c
&gt;         [&lt;ffffffff81ee1664&gt;] x86_64_start_kernel+0xf1/0xf4
&gt;
&gt; -&gt; #1 (&amp;p-&gt;pi_lock){-.-.-.}:
&gt;         [&lt;ffffffff810cc243&gt;] lock_acquire+0x93/0x200
&gt;         [&lt;ffffffff8173419b&gt;] _raw_spin_lock_irqsave+0x4b/0x90
&gt;         [&lt;ffffffff810979d1&gt;] try_to_wake_up+0x31/0x350
&gt;         [&lt;ffffffff81097d62&gt;] default_wake_function+0x12/0x20
&gt;         [&lt;ffffffff81084af8&gt;] autoremove_wake_function+0x18/0x40
&gt;         [&lt;ffffffff8108ea38&gt;] __wake_up_common+0x58/0x90
&gt;         [&lt;ffffffff8108ff59&gt;] __wake_up+0x39/0x50
&gt;         [&lt;ffffffff8110d4f8&gt;] __call_rcu_nocb_enqueue+0xa8/0xc0
&gt;         [&lt;ffffffff81111450&gt;] __call_rcu+0x140/0x820
&gt;         [&lt;ffffffff81111b8d&gt;] call_rcu+0x1d/0x20
&gt;         [&lt;ffffffff81093697&gt;] cpu_attach_domain+0x287/0x360
&gt;         [&lt;ffffffff81099d7e&gt;] build_sched_domains+0xe5e/0x10a0
&gt;         [&lt;ffffffff81efa7fc&gt;] sched_init_smp+0x3b7/0x47a
&gt;         [&lt;ffffffff81ee1f4e&gt;] kernel_init_freeable+0xf6/0x202
&gt;         [&lt;ffffffff817200be&gt;] kernel_init+0xe/0x190
&gt;         [&lt;ffffffff8173d22c&gt;] ret_from_fork+0x7c/0xb0
&gt;
&gt; -&gt; #0 (&amp;rdp-&gt;nocb_wq){......}:
&gt;         [&lt;ffffffff810cb7ca&gt;] __lock_acquire+0x191a/0x1be0
&gt;         [&lt;ffffffff810cc243&gt;] lock_acquire+0x93/0x200
&gt;         [&lt;ffffffff8173419b&gt;] _raw_spin_lock_irqsave+0x4b/0x90
&gt;         [&lt;ffffffff8108ff43&gt;] __wake_up+0x23/0x50
&gt;         [&lt;ffffffff8110d4f8&gt;] __call_rcu_nocb_enqueue+0xa8/0xc0
&gt;         [&lt;ffffffff81111450&gt;] __call_rcu+0x140/0x820
&gt;         [&lt;ffffffff81111bb0&gt;] kfree_call_rcu+0x20/0x30
&gt;         [&lt;ffffffff81149abf&gt;] put_ctx+0x4f/0x70
&gt;         [&lt;ffffffff81154c3e&gt;] perf_event_exit_task+0x12e/0x230
&gt;         [&lt;ffffffff81056b8d&gt;] do_exit+0x30d/0xcc0
&gt;         [&lt;ffffffff8105893c&gt;] do_group_exit+0x4c/0xc0
&gt;         [&lt;ffffffff810589c4&gt;] SyS_exit_group+0x14/0x20
&gt;         [&lt;ffffffff8173d4e4&gt;] tracesys+0xdd/0xe2
&gt;
&gt; other info that might help us debug this:
&gt;
&gt; Chain exists of:
&gt;   &amp;rdp-&gt;nocb_wq --&gt; &amp;rq-&gt;lock --&gt; &amp;ctx-&gt;lock
&gt;
&gt;   Possible unsafe locking scenario:
&gt;
&gt;         CPU0                    CPU1
&gt;         ----                    ----
&gt;    lock(&amp;ctx-&gt;lock);
&gt;                                 lock(&amp;rq-&gt;lock);
&gt;                                 lock(&amp;ctx-&gt;lock);
&gt;    lock(&amp;rdp-&gt;nocb_wq);
&gt;
&gt;  *** DEADLOCK ***
&gt;
&gt; 1 lock held by trinity-child2/15191:
&gt;  #0:  (&amp;ctx-&gt;lock){-.-...}, at: [&lt;ffffffff81154c19&gt;] perf_event_exit_task+0x109/0x230
&gt;
&gt; stack backtrace:
&gt; CPU: 2 PID: 15191 Comm: trinity-child2 Not tainted 3.12.0-rc3+ #92
&gt;  ffffffff82565b70 ffff880070c2dbf8 ffffffff8172a363 ffffffff824edf40
&gt;  ffff880070c2dc38 ffffffff81726741 ffff880070c2dc90 ffff88022383b1c0
&gt;  ffff88022383aac0 0000000000000000 ffff88022383b188 ffff88022383b1c0
&gt; Call Trace:
&gt;  [&lt;ffffffff8172a363&gt;] dump_stack+0x4e/0x82
&gt;  [&lt;ffffffff81726741&gt;] print_circular_bug+0x200/0x20f
&gt;  [&lt;ffffffff810cb7ca&gt;] __lock_acquire+0x191a/0x1be0
&gt;  [&lt;ffffffff810c6439&gt;] ? get_lock_stats+0x19/0x60
&gt;  [&lt;ffffffff8100b2f4&gt;] ? native_sched_clock+0x24/0x80
&gt;  [&lt;ffffffff810cc243&gt;] lock_acquire+0x93/0x200
&gt;  [&lt;ffffffff8108ff43&gt;] ? __wake_up+0x23/0x50
&gt;  [&lt;ffffffff8173419b&gt;] _raw_spin_lock_irqsave+0x4b/0x90
&gt;  [&lt;ffffffff8108ff43&gt;] ? __wake_up+0x23/0x50
&gt;  [&lt;ffffffff8108ff43&gt;] __wake_up+0x23/0x50
&gt;  [&lt;ffffffff8110d4f8&gt;] __call_rcu_nocb_enqueue+0xa8/0xc0
&gt;  [&lt;ffffffff81111450&gt;] __call_rcu+0x140/0x820
&gt;  [&lt;ffffffff8109bc8f&gt;] ? local_clock+0x3f/0x50
&gt;  [&lt;ffffffff81111bb0&gt;] kfree_call_rcu+0x20/0x30
&gt;  [&lt;ffffffff81149abf&gt;] put_ctx+0x4f/0x70
&gt;  [&lt;ffffffff81154c3e&gt;] perf_event_exit_task+0x12e/0x230
&gt;  [&lt;ffffffff81056b8d&gt;] do_exit+0x30d/0xcc0
&gt;  [&lt;ffffffff810c9af5&gt;] ? trace_hardirqs_on_caller+0x115/0x1e0
&gt;  [&lt;ffffffff810c9bcd&gt;] ? trace_hardirqs_on+0xd/0x10
&gt;  [&lt;ffffffff8105893c&gt;] do_group_exit+0x4c/0xc0
&gt;  [&lt;ffffffff810589c4&gt;] SyS_exit_group+0x14/0x20
&gt;  [&lt;ffffffff8173d4e4&gt;] tracesys+0xdd/0xe2

The underlying problem is that perf is invoking call_rcu() with the
scheduler locks held, but in NOCB mode, call_rcu() will with high
probability invoke the scheduler -- which just might want to use its
locks.  The reason that call_rcu() needs to invoke the scheduler is
to wake up the corresponding rcuo callback-offload kthread, which
does the job of starting up a grace period and invoking the callbacks
afterwards.

One solution (championed on a related problem by Lai Jiangshan) is to
simply defer the wakeup to some point where scheduler locks are no longer
held.  Since we don't want to unnecessarily incur the cost of such
deferral, the task before us is threefold:

1.	Determine when it is likely that a relevant scheduler lock is held.

2.	Defer the wakeup in such cases.

3.	Ensure that all deferred wakeups eventually happen, preferably
	sooner rather than later.

We use irqs_disabled_flags() as a proxy for relevant scheduler locks
being held.  This works because the relevant locks are always acquired
with interrupts disabled.  We may defer more often than needed, but that
is at least safe.

The wakeup deferral is tracked via a new field in the per-CPU and
per-RCU-flavor rcu_data structure, namely -&gt;nocb_defer_wakeup.

This flag is checked by the RCU core processing.  The __rcu_pending()
function now checks this flag, which causes rcu_check_callbacks()
to initiate RCU core processing at each scheduling-clock interrupt
where this flag is set.  Of course this is not sufficient because
scheduling-clock interrupts are often turned off (the things we used to
be able to count on!).  So the flags are also checked on entry to any
state that RCU considers to be idle, which includes both NO_HZ_IDLE idle
state and NO_HZ_FULL user-mode-execution state.

This approach should allow call_rcu() to be invoked regardless of what
locks you might be holding, the key word being "should".

Reported-by: Dave Jones &lt;davej@redhat.com&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Cc: Peter Zijlstra &lt;peterz@infradead.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Fix typo in Documentation/RCU/trace.txt</title>
<updated>2013-12-03T18:08:56+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2013-10-09T21:34:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=c9592ecb98d1e6d6ab2b54895314a46abfa69db4'/>
<id>c9592ecb98d1e6d6ab2b54895314a46abfa69db4</id>
<content type='text'>
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Fix occurrence of "the the" in checklist.txt</title>
<updated>2013-09-25T17:07:02+00:00</updated>
<author>
<name>Michael Opdenacker</name>
<email>michael.opdenacker@free-electrons.com</email>
</author>
<published>2013-09-23T19:40:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=4b0d3f0fde41a3c4454adb4d474618c23cfd4131'/>
<id>4b0d3f0fde41a3c4454adb4d474618c23cfd4131</id>
<content type='text'>
Signed-off-by: Michael Opdenacker &lt;michael.opdenacker@free-electrons.com&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
[ paulmck: Add "then" as suggested by Josh Triplett. ]
Reviewed-by: Josh Triplett &lt;josh@joshtriplett.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Michael Opdenacker &lt;michael.opdenacker@free-electrons.com&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
[ paulmck: Add "then" as suggested by Josh Triplett. ]
Reviewed-by: Josh Triplett &lt;josh@joshtriplett.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Update stall-warning documentation</title>
<updated>2013-09-25T13:49:37+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2013-08-19T18:59:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=64d3b7a1d5289486df2d8bce36e23ed5ebc80a3d'/>
<id>64d3b7a1d5289486df2d8bce36e23ed5ebc80a3d</id>
<content type='text'>
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Reviewed-by: Josh Triplett &lt;josh@joshtriplett.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Reviewed-by: Josh Triplett &lt;josh@joshtriplett.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branches 'doc.2013.08.19a', 'fixes.2013.08.20a', 'sysidle.2013.08.31a' and 'torture.2013.08.20a' into HEAD</title>
<updated>2013-08-31T21:44:45+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2013-08-31T21:44:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=25f27ce4a6a4995c8bdd69b4b2180465ed5ad2b8'/>
<id>25f27ce4a6a4995c8bdd69b4b2180465ed5ad2b8</id>
<content type='text'>
doc.2013.08.19a: Documentation updates
fixes.2013.08.20a: Miscellaneous fixes
sysidle.2013.08.31a: Detect system-wide idle state.
torture.2013.08.20a: rcutorture updates.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
doc.2013.08.19a: Documentation updates
fixes.2013.08.20a: Miscellaneous fixes
sysidle.2013.08.31a: Detect system-wide idle state.
torture.2013.08.20a: rcutorture updates.
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Increase rcutorture test coverage</title>
<updated>2013-08-20T18:38:41+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2013-06-12T22:12:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=2ec1f2d98752293f4831ce7d7bdbc3fc36bdd114'/>
<id>2ec1f2d98752293f4831ce7d7bdbc3fc36bdd114</id>
<content type='text'>
Currently, rcutorture has separate torture_types to test synchronous,
asynchronous, and expedited grace-period primitives.  This has
two disadvantages: (1) Three times the number of runs to cover the
combinations and (2) Little testing of concurrent combinations of the
three options.  This commit therefore adds a pair of module parameters
that control normal and expedited state, with the default being both
types, randomly selected, by the fakewriter processes, thus reducing
source-code size and increasing test coverage.  In addtion, the writer
task switches between asynchronous-normal and expedited grace-period
primitives driven by the same pair of module parameters.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Reviewed-by: Josh Triplett &lt;josh@joshtriplett.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Currently, rcutorture has separate torture_types to test synchronous,
asynchronous, and expedited grace-period primitives.  This has
two disadvantages: (1) Three times the number of runs to cover the
combinations and (2) Little testing of concurrent combinations of the
three options.  This commit therefore adds a pair of module parameters
that control normal and expedited state, with the default being both
types, randomly selected, by the fakewriter processes, thus reducing
source-code size and increasing test coverage.  In addtion, the writer
task switches between asynchronous-normal and expedited grace-period
primitives driven by the same pair of module parameters.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Reviewed-by: Josh Triplett &lt;josh@joshtriplett.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Update RTFP documentation</title>
<updated>2013-08-20T04:39:27+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2013-05-01T17:05:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=6ae3771850910018c89b4ce063c52008bf2c8d6a'/>
<id>6ae3771850910018c89b4ce063c52008bf2c8d6a</id>
<content type='text'>
Note that this commit also updates the formatting of serveral of the
bibtex entries to conform to that of my .bib files.  I started
accumulating entries back in the 1980s, back when bibtex insisted
that comma (",") was a separator, not a terminator.  This rule forced
commas to the fronts of lines.  25 years later, bibtex allows commas
to be terminators, but I am too lazy to rework all my .bib files.
Keeping the same format as my .bib files allows my to simply
incorporate my RCU.bib file into Documentation/RCU/RTFP.txt, which
is much easier than my earlier practice of keeping track of what
had changed and adding individual entries.  (I sometimes find relevant
papers that were published some years back, for example.)

In addition, this change adds entries for papers published in the
last year or so.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Reviewed-by: Josh Triplett &lt;josh@joshtriplett.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Note that this commit also updates the formatting of serveral of the
bibtex entries to conform to that of my .bib files.  I started
accumulating entries back in the 1980s, back when bibtex insisted
that comma (",") was a separator, not a terminator.  This rule forced
commas to the fronts of lines.  25 years later, bibtex allows commas
to be terminators, but I am too lazy to rework all my .bib files.
Keeping the same format as my .bib files allows my to simply
incorporate my RCU.bib file into Documentation/RCU/RTFP.txt, which
is much easier than my earlier practice of keeping track of what
had changed and adding individual entries.  (I sometimes find relevant
papers that were published some years back, for example.)

In addition, this change adds entries for papers published in the
last year or so.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Reviewed-by: Josh Triplett &lt;josh@joshtriplett.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Fix rcu_barrier() documentation</title>
<updated>2013-08-19T00:05:32+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2013-04-18T21:25:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d84297c99bd9f63baf92c9f2d36582f879858664'/>
<id>d84297c99bd9f63baf92c9f2d36582f879858664</id>
<content type='text'>
There was a time when rcu_barrier() was guaranteed to wait for at least
a grace period, but that time ended due to energy-efficiency concerns.
So now rcu_barrier() is a no-op if there are no RCU callbacks queued in
the system.  This commit updates the documentation to reflect this change.

Now, rcu_barrier() often does wait for a grace period, so, one could
imagine some modification to rcu_barrier() to more efficiently handle
cases where both rcu_barrier() and a grace period are needed.  But this
must wait until someone shows a real-world need for a change.

Reported-by: Bob Copeland &lt;bob@cozybit.com&gt;
Reported-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Reviewed-by: Josh Triplett &lt;josh@joshtriplett.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There was a time when rcu_barrier() was guaranteed to wait for at least
a grace period, but that time ended due to energy-efficiency concerns.
So now rcu_barrier() is a no-op if there are no RCU callbacks queued in
the system.  This commit updates the documentation to reflect this change.

Now, rcu_barrier() often does wait for a grace period, so, one could
imagine some modification to rcu_barrier() to more efficiently handle
cases where both rcu_barrier() and a grace period are needed.  But this
must wait until someone shows a real-world need for a change.

Reported-by: Bob Copeland &lt;bob@cozybit.com&gt;
Reported-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Reviewed-by: Josh Triplett &lt;josh@joshtriplett.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
