Loading Documentation/ABI/testing/sysfs-bus-usb +1 −1 Original line number Original line Diff line number Diff line Loading @@ -160,7 +160,7 @@ Description: match the driver to the device. For example: match the driver to the device. For example: # echo "046d c315" > /sys/bus/usb/drivers/foo/remove_id # echo "046d c315" > /sys/bus/usb/drivers/foo/remove_id What: /sys/bus/usb/device/.../avoid_reset What: /sys/bus/usb/device/.../avoid_reset_quirk Date: December 2009 Date: December 2009 Contact: Oliver Neukum <oliver@neukum.org> Contact: Oliver Neukum <oliver@neukum.org> Description: Description: Loading Documentation/PCI/PCI-DMA-mapping.txt→Documentation/DMA-API-HOWTO.txt +0 −0 File moved. View file Documentation/DocBook/tracepoint.tmpl +13 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,15 @@ </address> </address> </affiliation> </affiliation> </author> </author> <author> <firstname>William</firstname> <surname>Cohen</surname> <affiliation> <address> <email>wcohen@redhat.com</email> </address> </affiliation> </author> </authorgroup> </authorgroup> <legalnotice> <legalnotice> Loading Loading @@ -91,4 +100,8 @@ !Iinclude/trace/events/signal.h !Iinclude/trace/events/signal.h </chapter> </chapter> <chapter id="block"> <title>Block IO</title> !Iinclude/trace/events/block.h </chapter> </book> </book> Documentation/RCU/NMI-RCU.txt +22 −17 Original line number Original line Diff line number Diff line Loading @@ -34,7 +34,7 @@ NMI handler. cpu = smp_processor_id(); cpu = smp_processor_id(); ++nmi_count(cpu); ++nmi_count(cpu); if (!rcu_dereference(nmi_callback)(regs, cpu)) if (!rcu_dereference_sched(nmi_callback)(regs, cpu)) default_do_nmi(regs); default_do_nmi(regs); nmi_exit(); nmi_exit(); Loading @@ -47,12 +47,13 @@ function pointer. If this handler returns zero, do_nmi() invokes the default_do_nmi() function to handle a machine-specific NMI. Finally, default_do_nmi() function to handle a machine-specific NMI. Finally, preemption is restored. preemption is restored. Strictly speaking, rcu_dereference() is not needed, since this code runs In theory, rcu_dereference_sched() is not needed, since this code runs only on i386, which does not need rcu_dereference() anyway. However, only on i386, which in theory does not need rcu_dereference_sched() it is a good documentation aid, particularly for anyone attempting to anyway. However, in practice it is a good documentation aid, particularly do something similar on Alpha. for anyone attempting to do something similar on Alpha or on systems with aggressive optimizing compilers. Quick Quiz: Why might the rcu_dereference() be necessary on Alpha, Quick Quiz: Why might the rcu_dereference_sched() be necessary on Alpha, given that the code referenced by the pointer is read-only? given that the code referenced by the pointer is read-only? Loading Loading @@ -99,17 +100,21 @@ invoke irq_enter() and irq_exit() on NMI entry and exit, respectively. Answer to Quick Quiz Answer to Quick Quiz Why might the rcu_dereference() be necessary on Alpha, given Why might the rcu_dereference_sched() be necessary on Alpha, given that the code referenced by the pointer is read-only? that the code referenced by the pointer is read-only? Answer: The caller to set_nmi_callback() might well have Answer: The caller to set_nmi_callback() might well have initialized some data that is to be used by the initialized some data that is to be used by the new NMI new NMI handler. In this case, the rcu_dereference() handler. In this case, the rcu_dereference_sched() would would be needed, because otherwise a CPU that received be needed, because otherwise a CPU that received an NMI an NMI just after the new handler was set might see just after the new handler was set might see the pointer the pointer to the new NMI handler, but the old to the new NMI handler, but the old pre-initialized pre-initialized version of the handler's data. version of the handler's data. More important, the rcu_dereference() makes it clear This same sad story can happen on other CPUs when using to someone reading the code that the pointer is being a compiler with aggressive pointer-value speculation protected by RCU. optimizations. More important, the rcu_dereference_sched() makes it clear to someone reading the code that the pointer is being protected by RCU-sched. Documentation/RCU/checklist.txt +4 −3 Original line number Original line Diff line number Diff line Loading @@ -260,7 +260,8 @@ over a rather long period of time, but improvements are always welcome! The reason that it is permissible to use RCU list-traversal The reason that it is permissible to use RCU list-traversal primitives when the update-side lock is held is that doing so primitives when the update-side lock is held is that doing so can be quite helpful in reducing code bloat when common code is can be quite helpful in reducing code bloat when common code is shared between readers and updaters. shared between readers and updaters. Additional primitives are provided for this case, as discussed in lockdep.txt. 10. Conversely, if you are in an RCU read-side critical section, 10. Conversely, if you are in an RCU read-side critical section, and you don't hold the appropriate update-side lock, you -must- and you don't hold the appropriate update-side lock, you -must- Loading Loading @@ -344,8 +345,8 @@ over a rather long period of time, but improvements are always welcome! requiring SRCU's read-side deadlock immunity or low read-side requiring SRCU's read-side deadlock immunity or low read-side realtime latency. realtime latency. Note that, rcu_assign_pointer() and rcu_dereference() relate to Note that, rcu_assign_pointer() relates to SRCU just as they do SRCU just as they do to other forms of RCU. to other forms of RCU. 15. The whole point of call_rcu(), synchronize_rcu(), and friends 15. The whole point of call_rcu(), synchronize_rcu(), and friends is to wait until all pre-existing readers have finished before is to wait until all pre-existing readers have finished before Loading Loading
Documentation/ABI/testing/sysfs-bus-usb +1 −1 Original line number Original line Diff line number Diff line Loading @@ -160,7 +160,7 @@ Description: match the driver to the device. For example: match the driver to the device. For example: # echo "046d c315" > /sys/bus/usb/drivers/foo/remove_id # echo "046d c315" > /sys/bus/usb/drivers/foo/remove_id What: /sys/bus/usb/device/.../avoid_reset What: /sys/bus/usb/device/.../avoid_reset_quirk Date: December 2009 Date: December 2009 Contact: Oliver Neukum <oliver@neukum.org> Contact: Oliver Neukum <oliver@neukum.org> Description: Description: Loading
Documentation/DocBook/tracepoint.tmpl +13 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,15 @@ </address> </address> </affiliation> </affiliation> </author> </author> <author> <firstname>William</firstname> <surname>Cohen</surname> <affiliation> <address> <email>wcohen@redhat.com</email> </address> </affiliation> </author> </authorgroup> </authorgroup> <legalnotice> <legalnotice> Loading Loading @@ -91,4 +100,8 @@ !Iinclude/trace/events/signal.h !Iinclude/trace/events/signal.h </chapter> </chapter> <chapter id="block"> <title>Block IO</title> !Iinclude/trace/events/block.h </chapter> </book> </book>
Documentation/RCU/NMI-RCU.txt +22 −17 Original line number Original line Diff line number Diff line Loading @@ -34,7 +34,7 @@ NMI handler. cpu = smp_processor_id(); cpu = smp_processor_id(); ++nmi_count(cpu); ++nmi_count(cpu); if (!rcu_dereference(nmi_callback)(regs, cpu)) if (!rcu_dereference_sched(nmi_callback)(regs, cpu)) default_do_nmi(regs); default_do_nmi(regs); nmi_exit(); nmi_exit(); Loading @@ -47,12 +47,13 @@ function pointer. If this handler returns zero, do_nmi() invokes the default_do_nmi() function to handle a machine-specific NMI. Finally, default_do_nmi() function to handle a machine-specific NMI. Finally, preemption is restored. preemption is restored. Strictly speaking, rcu_dereference() is not needed, since this code runs In theory, rcu_dereference_sched() is not needed, since this code runs only on i386, which does not need rcu_dereference() anyway. However, only on i386, which in theory does not need rcu_dereference_sched() it is a good documentation aid, particularly for anyone attempting to anyway. However, in practice it is a good documentation aid, particularly do something similar on Alpha. for anyone attempting to do something similar on Alpha or on systems with aggressive optimizing compilers. Quick Quiz: Why might the rcu_dereference() be necessary on Alpha, Quick Quiz: Why might the rcu_dereference_sched() be necessary on Alpha, given that the code referenced by the pointer is read-only? given that the code referenced by the pointer is read-only? Loading Loading @@ -99,17 +100,21 @@ invoke irq_enter() and irq_exit() on NMI entry and exit, respectively. Answer to Quick Quiz Answer to Quick Quiz Why might the rcu_dereference() be necessary on Alpha, given Why might the rcu_dereference_sched() be necessary on Alpha, given that the code referenced by the pointer is read-only? that the code referenced by the pointer is read-only? Answer: The caller to set_nmi_callback() might well have Answer: The caller to set_nmi_callback() might well have initialized some data that is to be used by the initialized some data that is to be used by the new NMI new NMI handler. In this case, the rcu_dereference() handler. In this case, the rcu_dereference_sched() would would be needed, because otherwise a CPU that received be needed, because otherwise a CPU that received an NMI an NMI just after the new handler was set might see just after the new handler was set might see the pointer the pointer to the new NMI handler, but the old to the new NMI handler, but the old pre-initialized pre-initialized version of the handler's data. version of the handler's data. More important, the rcu_dereference() makes it clear This same sad story can happen on other CPUs when using to someone reading the code that the pointer is being a compiler with aggressive pointer-value speculation protected by RCU. optimizations. More important, the rcu_dereference_sched() makes it clear to someone reading the code that the pointer is being protected by RCU-sched.
Documentation/RCU/checklist.txt +4 −3 Original line number Original line Diff line number Diff line Loading @@ -260,7 +260,8 @@ over a rather long period of time, but improvements are always welcome! The reason that it is permissible to use RCU list-traversal The reason that it is permissible to use RCU list-traversal primitives when the update-side lock is held is that doing so primitives when the update-side lock is held is that doing so can be quite helpful in reducing code bloat when common code is can be quite helpful in reducing code bloat when common code is shared between readers and updaters. shared between readers and updaters. Additional primitives are provided for this case, as discussed in lockdep.txt. 10. Conversely, if you are in an RCU read-side critical section, 10. Conversely, if you are in an RCU read-side critical section, and you don't hold the appropriate update-side lock, you -must- and you don't hold the appropriate update-side lock, you -must- Loading Loading @@ -344,8 +345,8 @@ over a rather long period of time, but improvements are always welcome! requiring SRCU's read-side deadlock immunity or low read-side requiring SRCU's read-side deadlock immunity or low read-side realtime latency. realtime latency. Note that, rcu_assign_pointer() and rcu_dereference() relate to Note that, rcu_assign_pointer() relates to SRCU just as they do SRCU just as they do to other forms of RCU. to other forms of RCU. 15. The whole point of call_rcu(), synchronize_rcu(), and friends 15. The whole point of call_rcu(), synchronize_rcu(), and friends is to wait until all pre-existing readers have finished before is to wait until all pre-existing readers have finished before Loading