From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: kbuild test robot <lkp@intel.com>
Cc: Byungchul Park <byungchul.park@lge.com>,
kbuild-all@01.org, jiangshanlai@gmail.com, josh@joshtriplett.org,
rostedt@goodmis.org, mathieu.desnoyers@efficios.com,
linux-kernel@vger.kernel.org, kernel-team@lge.com,
joel@joelfernandes.org
Subject: Re: [PATCH] rcu: Refactor rcu_{nmi,irq}_{enter,exit}()
Date: Fri, 22 Jun 2018 06:39:03 -0700 [thread overview]
Message-ID: <20180622133903.GP3593@linux.vnet.ibm.com> (raw)
In-Reply-To: <201806221642.HoutHCRt%fengguang.wu@intel.com>
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 <paulmck@linux.vnet.ibm.com>
> :::::: CC: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation
prev parent reply other threads:[~2018-06-22 13:37 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-22 6:12 [PATCH] rcu: Refactor rcu_{nmi,irq}_{enter,exit}() Byungchul Park
2018-06-22 6:23 ` Byungchul Park
2018-06-23 17:49 ` Paul E. McKenney
2018-06-25 8:21 ` Byungchul Park
2018-06-25 14:07 ` Steven Rostedt
2018-06-25 14:48 ` Paul E. McKenney
2018-06-25 15:02 ` Steven Rostedt
2018-06-25 15:43 ` Paul E. McKenney
2018-06-22 8:34 ` kbuild test robot
2018-06-22 13:39 ` Paul E. McKenney [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180622133903.GP3593@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=byungchul.park@lge.com \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=kbuild-all@01.org \
--cc=kernel-team@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lkp@intel.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.