On Fri, Jun 22, 2018 at 04:34:48PM +0800, kbuild test robot wrote: > Hi Byungchul, > > Thank you for the patch! Perhaps something to improve: > > [auto build test WARNING on rcu/rcu/next] > [also build test WARNING on v4.18-rc1 next-20180622] > [if your patch is applied to the wrong git tree, please drop us a note to > help improve the system] > > url: > https://github.com/0day-ci/linux/commits/Byungchul-Park/rcu-Refactor-rcu_-nmi-irq-_-enter-exit/20180622-141334 > base: https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git > rcu/next > reproduce: make htmldocs > > All warnings (new ones prefixed by >>): > > WARNING: convert(1) not found, for SVG to PDF conversion install > ImageMagick (https://www.imagemagick.org) > >> kernel/rcu/tree.c:778: warning: Function parameter or member 'irq' not > >> described in 'rcu_nmi_exit_common' > >> kernel/rcu/tree.c:938: warning: Function parameter or member 'irq' not > >> described in 'rcu_nmi_enter_common'
It is complaining about the docbook function-header comment. It wants the "irq" parameter described, something like this: * @irq: Is this call from rcu_irq_enter? And similar for rcu_nmi_exit_common(). Thanx, Paul > include/net/cfg80211.h:4216: warning: Function parameter or member > 'wext.ibss' not described in 'wireless_dev' > include/net/cfg80211.h:4216: warning: Function parameter or member > 'wext.connect' not described in 'wireless_dev' > include/net/cfg80211.h:4216: warning: Function parameter or member > 'wext.keys' not described in 'wireless_dev' > include/net/cfg80211.h:4216: warning: Function parameter or member > 'wext.ie' not described in 'wireless_dev' > include/net/cfg80211.h:4216: warning: Function parameter or member > 'wext.ie_len' not described in 'wireless_dev' > include/net/cfg80211.h:4216: warning: Function parameter or member > 'wext.bssid' not described in 'wireless_dev' > include/net/cfg80211.h:4216: warning: Function parameter or member > 'wext.ssid' not described in 'wireless_dev' > include/net/cfg80211.h:4216: warning: Function parameter or member > 'wext.default_key' not described in 'wireless_dev' > include/net/cfg80211.h:4216: warning: Function parameter or member > 'wext.default_mgmt_key' not described in 'wireless_dev' > include/net/cfg80211.h:4216: warning: Function parameter or member > 'wext.prev_bssid_valid' not described in 'wireless_dev' > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2282: warning: Function parameter or member > 'radiotap_timestamp.units_pos' not described in 'ieee80211_hw' > include/net/mac80211.h:2282: warning: Function parameter or member > 'radiotap_timestamp.accuracy' not described in 'ieee80211_hw' > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:955: warning: Function parameter or member > 'control.rates' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'control.rts_cts_rate_idx' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'control.use_rts' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'control.use_cts_prot' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'control.short_preamble' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'control.skip_table' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'control.jiffies' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'control.vif' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'control.hw_key' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'control.flags' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'control.enqueue_time' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member 'ack' > not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'ack.cookie' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'status.rates' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'status.ack_signal' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'status.ampdu_ack_len' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'status.ampdu_len' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'status.antenna' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'status.tx_time' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'status.is_valid_ack_signal' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'status.status_driver_data' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'driver_rates' not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member 'pad' > not described in 'ieee80211_tx_info' > include/net/mac80211.h:955: warning: Function parameter or member > 'rate_driver_data' not described in 'ieee80211_tx_info' > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > include/net/mac80211.h:2083: warning: bad line: > > > vim +778 kernel/rcu/tree.c > > 19dd1591f kernel/rcutree.c Frederic Weisbecker 2012-06-04 765 > 19dd1591f kernel/rcutree.c Frederic Weisbecker 2012-06-04 766 /** > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 767 * > rcu_nmi_exit_common - inform RCU of exit from NMI context > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 768 * > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 769 * If we are > returning from the outermost NMI handler that interrupted an > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 770 * RCU-idle > period, update rdtp->dynticks and rdtp->dynticks_nmi_nesting > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 771 * to let > the RCU grace-period handling know that the CPU is back to > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 772 * being > RCU-idle. > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 773 * > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 774 * If you > add or remove a call to rcu_nmi_exit_common(), be sure to test > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 775 * with > CONFIG_RCU_EQS_DEBUG=y. > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 776 */ > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 777 static > __always_inline void rcu_nmi_exit_common(bool irq) > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 @778 { > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 779 struct > rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks); > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 780 > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 781 /* > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 782 * > Check for ->dynticks_nmi_nesting underflow and bad ->dynticks. > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 783 * (We > are exiting an NMI handler, so RCU better be paying attention > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 784 * to > us!) > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 785 */ > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 786 > WARN_ON_ONCE(rdtp->dynticks_nmi_nesting <= 0); > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 787 > WARN_ON_ONCE(rcu_dynticks_curr_cpu_in_eqs()); > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 788 > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 789 /* > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 790 * If > the nesting level is not 1, the CPU wasn't RCU-idle, so > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 791 * > leave it in non-RCU-idle state. > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 792 */ > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 793 if > (rdtp->dynticks_nmi_nesting != 1) { > dec98900e kernel/rcu/tree.c Paul E. McKenney 2017-10-04 794 > trace_rcu_dyntick(TPS("--="), rdtp->dynticks_nmi_nesting, > rdtp->dynticks_nmi_nesting - 2, rdtp->dynticks); > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 795 > WRITE_ONCE(rdtp->dynticks_nmi_nesting, /* No store tearing. */ > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 796 > rdtp->dynticks_nmi_nesting - 2); > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 797 > return; > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 798 } > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 799 > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 800 /* This > NMI interrupted an RCU-idle CPU, restore RCU-idleness. */ > dec98900e kernel/rcu/tree.c Paul E. McKenney 2017-10-04 801 > trace_rcu_dyntick(TPS("Startirq"), rdtp->dynticks_nmi_nesting, 0, > rdtp->dynticks); > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 802 > WRITE_ONCE(rdtp->dynticks_nmi_nesting, 0); /* Avoid store tearing. */ > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 803 > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 804 if (irq) > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 805 > rcu_prepare_for_idle(); > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 806 > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 807 > rcu_dynticks_eqs_enter(); > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 808 > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 809 if (irq) > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 810 > rcu_dynticks_task_enter(); > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 811 } > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 812 > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 813 /** > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 814 * > rcu_nmi_exit - inform RCU of exit from NMI context > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 815 */ > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 816 void > rcu_nmi_exit(void) > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 817 { > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 818 > rcu_nmi_exit_common(false); > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 819 } > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 820 > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 821 /** > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 822 * > rcu_irq_exit - inform RCU that current CPU is exiting irq towards idle > 64db4cfff kernel/rcutree.c Paul E. McKenney 2008-12-18 823 * > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 824 * Exit from > an interrupt handler, which might possibly result in entering > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 825 * idle > mode, in other words, leaving the mode in which read-side critical > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 826 * sections > can occur. The caller must have disabled interrupts. > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 827 * > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 828 * This code > assumes that the idle loop never does anything that might > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 829 * result in > unbalanced calls to irq_enter() and irq_exit(). If your > 58721f5da kernel/rcu/tree.c Paul E. McKenney 2017-10-03 830 * > architecture's idle loop violates this assumption, RCU will give you what > 58721f5da kernel/rcu/tree.c Paul E. McKenney 2017-10-03 831 * you > deserve, good and hard. But very infrequently and irreproducibly. > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 832 * > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 833 * Use > things like work queues to work around this limitation. > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 834 * > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 835 * You have > been warned. > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 836 * > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 837 * If you > add or remove a call to rcu_irq_exit(), be sure to test with > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 838 * > CONFIG_RCU_EQS_DEBUG=y. > 64db4cfff kernel/rcutree.c Paul E. McKenney 2008-12-18 839 */ > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 840 void > rcu_irq_exit(void) > 64db4cfff kernel/rcutree.c Paul E. McKenney 2008-12-18 841 { > b04db8e19 kernel/rcu/tree.c Frederic Weisbecker 2017-11-06 842 > lockdep_assert_irqs_disabled(); > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 843 > rcu_nmi_exit_common(true); > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 844 } > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 845 > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 846 /* > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 847 * Wrapper > for rcu_irq_exit() where interrupts are enabled. > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 848 * > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 849 * If you > add or remove a call to rcu_irq_exit_irqson(), be sure to test > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 850 * with > CONFIG_RCU_EQS_DEBUG=y. > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 851 */ > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 852 void > rcu_irq_exit_irqson(void) > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 853 { > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 854 > unsigned long flags; > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 855 > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 856 > local_irq_save(flags); > 7c9906ca5 kernel/rcu/tree.c Paul E. McKenney 2015-10-31 857 > rcu_irq_exit(); > 23b5c8fa0 kernel/rcutree.c Paul E. McKenney 2010-09-07 858 > local_irq_restore(flags); > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 859 } > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 860 > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 861 /* > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 862 * Exit an > RCU extended quiescent state, which can be either the > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 863 * idle loop > or adaptive-tickless usermode execution. > 51a1fd30f kernel/rcu/tree.c Paul E. McKenney 2017-10-03 864 * > 51a1fd30f kernel/rcu/tree.c Paul E. McKenney 2017-10-03 865 * We > crowbar the ->dynticks_nmi_nesting field to DYNTICK_IRQ_NONIDLE to > 51a1fd30f kernel/rcu/tree.c Paul E. McKenney 2017-10-03 866 * allow for > the possibility of usermode upcalls messing up our count of > 51a1fd30f kernel/rcu/tree.c Paul E. McKenney 2017-10-03 867 * interrupt > nesting level during the busy period that is just now starting. > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 868 */ > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 869 static void > rcu_eqs_exit(bool user) > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 870 { > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 871 struct > rcu_dynticks *rdtp; > 84585aa8b kernel/rcu/tree.c Paul E. McKenney 2017-10-04 872 long > oldval; > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 873 > b04db8e19 kernel/rcu/tree.c Frederic Weisbecker 2017-11-06 874 > lockdep_assert_irqs_disabled(); > c9d4b0af9 kernel/rcutree.c Christoph Lameter 2013-08-31 875 rdtp = > this_cpu_ptr(&rcu_dynticks); > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 876 oldval > = rdtp->dynticks_nesting; > 1ce46ee59 kernel/rcu/tree.c Paul E. McKenney 2015-05-05 877 > WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) && oldval < 0); > 51a1fd30f kernel/rcu/tree.c Paul E. McKenney 2017-10-03 878 if > (oldval) { > 51a1fd30f kernel/rcu/tree.c Paul E. McKenney 2017-10-03 879 > rdtp->dynticks_nesting++; > 9dd238e28 kernel/rcu/tree.c Paul E. McKenney 2017-10-05 880 > return; > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 881 } > 9dd238e28 kernel/rcu/tree.c Paul E. McKenney 2017-10-05 882 > rcu_dynticks_task_exit(); > 9dd238e28 kernel/rcu/tree.c Paul E. McKenney 2017-10-05 883 > rcu_dynticks_eqs_exit(); > 9dd238e28 kernel/rcu/tree.c Paul E. McKenney 2017-10-05 884 > rcu_cleanup_after_idle(); > 9dd238e28 kernel/rcu/tree.c Paul E. McKenney 2017-10-05 885 > trace_rcu_dyntick(TPS("End"), rdtp->dynticks_nesting, 1, rdtp->dynticks); > e68bbb266 kernel/rcu/tree.c Paul E. McKenney 2017-10-05 886 > WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) && !user && > !is_idle_task(current)); > 2342172fd kernel/rcu/tree.c Paul E. McKenney 2017-10-05 887 > WRITE_ONCE(rdtp->dynticks_nesting, 1); > 6136d6e48 kernel/rcu/tree.c Paul E. McKenney 2017-10-03 888 > WRITE_ONCE(rdtp->dynticks_nmi_nesting, DYNTICK_IRQ_NONIDLE); > 3a5924052 kernel/rcu/tree.c Paul E. McKenney 2013-10-04 889 } > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 890 > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 891 /** > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 892 * > rcu_idle_exit - inform RCU that current CPU is leaving idle > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 893 * > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 894 * Exit idle > mode, in other words, -enter- the mode in which RCU > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 895 * read-side > critical sections can occur. > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 896 * > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 897 * If you > add or remove a call to rcu_idle_exit(), be sure to test with > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 898 * > CONFIG_RCU_EQS_DEBUG=y. > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 899 */ > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 900 void > rcu_idle_exit(void) > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 901 { > c5d900bf6 kernel/rcutree.c Frederic Weisbecker 2012-07-11 902 > unsigned long flags; > c5d900bf6 kernel/rcutree.c Frederic Weisbecker 2012-07-11 903 > c5d900bf6 kernel/rcutree.c Frederic Weisbecker 2012-07-11 904 > local_irq_save(flags); > cb349ca95 kernel/rcutree.c Paul E. McKenney 2012-09-04 905 > rcu_eqs_exit(false); > c5d900bf6 kernel/rcutree.c Frederic Weisbecker 2012-07-11 906 > local_irq_restore(flags); > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 907 } > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 908 > d1ec4c34c kernel/rcu/tree.c Paul E. McKenney 2015-05-13 909 #ifdef > CONFIG_NO_HZ_FULL > 9b2e4f188 kernel/rcutree.c Paul E. McKenney 2011-09-30 910 /** > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 911 * > rcu_user_exit - inform RCU that we are exiting userspace. > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 912 * > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 913 * Exit RCU > idle mode while entering the kernel because it can > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 914 * run a RCU > read side critical section anytime. > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 915 * > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 916 * If you > add or remove a call to rcu_user_exit(), be sure to test with > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 917 * > CONFIG_RCU_EQS_DEBUG=y. > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 918 */ > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 919 void > rcu_user_exit(void) > adf5091e6 kernel/rcutree.c Frederic Weisbecker 2012-06-28 920 { > 91d1aa43d kernel/rcutree.c Frederic Weisbecker 2012-11-27 921 > rcu_eqs_exit(1); > c5d900bf6 kernel/rcutree.c Frederic Weisbecker 2012-07-11 922 } > d1ec4c34c kernel/rcu/tree.c Paul E. McKenney 2015-05-13 923 #endif /* > CONFIG_NO_HZ_FULL */ > 19dd1591f kernel/rcutree.c Frederic Weisbecker 2012-06-04 924 > 19dd1591f kernel/rcutree.c Frederic Weisbecker 2012-06-04 925 /** > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 926 * > rcu_nmi_enter_common - inform RCU of entry to NMI context > 64db4cfff kernel/rcutree.c Paul E. McKenney 2008-12-18 927 * > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 928 * If the > CPU was idle from RCU's viewpoint, update rdtp->dynticks and > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 929 * > rdtp->dynticks_nmi_nesting to let the RCU grace-period handling know > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 930 * that the > CPU is active. This implementation permits nested NMIs, as > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 931 * long as > the nesting level does not overflow an int. (You will probably > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 932 * run out > of stack space first.) > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 933 * > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 934 * If you > add or remove a call to rcu_nmi_enter_common(), be sure to test > c0da313e0 kernel/rcu/tree.c Paul E. McKenney 2017-09-22 935 * with > CONFIG_RCU_EQS_DEBUG=y. > 64db4cfff kernel/rcutree.c Paul E. McKenney 2008-12-18 936 */ > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 937 static > __always_inline void rcu_nmi_enter_common(bool irq) > 64db4cfff kernel/rcutree.c Paul E. McKenney 2008-12-18 @938 { > c9d4b0af9 kernel/rcutree.c Christoph Lameter 2013-08-31 939 struct > rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks); > 84585aa8b kernel/rcu/tree.c Paul E. McKenney 2017-10-04 940 long > incby = 2; > 64db4cfff kernel/rcutree.c Paul E. McKenney 2008-12-18 941 > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 942 /* > Complain about underflow. */ > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 943 > WARN_ON_ONCE(rdtp->dynticks_nmi_nesting < 0); > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 944 > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 945 /* > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 946 * If > idle from RCU viewpoint, atomically increment ->dynticks > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 947 * to > mark non-idle and increment ->dynticks_nmi_nesting by one. > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 948 * > Otherwise, increment ->dynticks_nmi_nesting by two. This means > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 949 * if > ->dynticks_nmi_nesting is equal to one, we are guaranteed > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 950 * to > be in the outermost NMI handler that interrupted an RCU-idle > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 951 * > period (observation due to Andy Lutomirski). > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 952 */ > 02a5c550b kernel/rcu/tree.c Paul E. McKenney 2016-11-02 953 if > (rcu_dynticks_curr_cpu_in_eqs()) { > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 954 > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 955 > if (irq) > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 956 > rcu_dynticks_task_exit(); > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 957 > 2625d469b kernel/rcu/tree.c Paul E. McKenney 2016-11-02 958 > rcu_dynticks_eqs_exit(); > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 959 > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 960 > if (irq) > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 961 > rcu_cleanup_after_idle(); > 1e8a49734 kernel/rcu/tree.c Byungchul Park 2018-06-22 962 > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 963 > incby = 1; > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 964 } > bd2b879a1 kernel/rcu/tree.c Paul E. McKenney 2017-10-04 965 > trace_rcu_dyntick(incby == 1 ? TPS("Endirq") : TPS("++="), > bd2b879a1 kernel/rcu/tree.c Paul E. McKenney 2017-10-04 966 > rdtp->dynticks_nmi_nesting, > dec98900e kernel/rcu/tree.c Paul E. McKenney 2017-10-04 967 > rdtp->dynticks_nmi_nesting + incby, rdtp->dynticks); > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 968 > WRITE_ONCE(rdtp->dynticks_nmi_nesting, /* Prevent store tearing. */ > fd581a91a kernel/rcu/tree.c Paul E. McKenney 2017-10-02 969 > rdtp->dynticks_nmi_nesting + incby); > 734d16801 kernel/rcu/tree.c Paul E. McKenney 2014-11-21 970 > barrier(); > 64db4cfff kernel/rcutree.c Paul E. McKenney 2008-12-18 971 } > 64db4cfff kernel/rcutree.c Paul E. McKenney 2008-12-18 972 > > :::::: The code at line 778 was first introduced by commit > :::::: fd581a91ac16187625ec509414d08d37827472c4 rcu: Move > rcu_nmi_{enter,exit}() to prepare for consolidation > > :::::: TO: Paul E. McKenney <paul...@linux.vnet.ibm.com> > :::::: CC: Paul E. McKenney <paul...@linux.vnet.ibm.com> > > --- > 0-DAY kernel test infrastructure Open Source Technology Center > https://lists.01.org/pipermail/kbuild-all Intel Corporation