diff mbox

[v5,2/4] kernel hacking: new config NO_AUTO_INLINE to disable compiler auto-inline optimizations

Message ID 1526026187-11782-3-git-send-email-changbin.du@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Du, Changbin May 11, 2018, 8:09 a.m. UTC
From: Changbin Du <changbin.du@intel.com>

This patch add a new kernel hacking option NO_AUTO_INLINE. Selecting
this option will prevent the compiler from optimizing the kernel by
auto-inlining functions not marked with the inline keyword.

With this option, only functions explicitly marked with "inline" will
be inlined. This will allow the function tracer to trace more functions
because it only traces functions that the compiler has not inlined.

Signed-off-by: Changbin Du <changbin.du@intel.com>
Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

---
v2: Some grammar updates from Steven.
---
 Makefile          |  6 ++++++
 lib/Kconfig.debug | 17 +++++++++++++++++
 2 files changed, 23 insertions(+)

Comments

kernel test robot May 17, 2018, 3:49 p.m. UTC | #1
Hi Changbin,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v4.17-rc5 next-20180517]
[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/changbin-du-intel-com/kernel-hacking-GCC-optimization-for-better-debug-experience-Og/20180512-001150
config: arm64-allmodconfig (attached as .config)
compiler: aarch64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=arm64 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   drivers/video/fbdev/i740fb.c: In function 'i740_calc_fifo.isra.0':
>> drivers/video/fbdev/i740fb.c:331:9: warning: 'wm' may be used uninitialized in this function [-Wmaybe-uninitialized]
     return wm;
            ^~
--
   drivers/pci/host/pci-xgene.c: In function 'xgene_pcie_setup_ib_reg':
>> drivers/pci/host/pci-xgene.c:532:2: warning: 'pim_reg' may be used uninitialized in this function [-Wmaybe-uninitialized]
     xgene_pcie_setup_pims(port, pim_reg, pci_addr, ~(size - 1));
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

vim +/wm +331 drivers/video/fbdev/i740fb.c

5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  207  
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  208  static u32 i740_calc_fifo(struct i740fb_par *par, u32 freq, int bpp)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  209  {
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  210  	/*
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  211  	 * Would like to calculate these values automatically, but a generic
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  212  	 * algorithm does not seem possible.  Note: These FIFO water mark
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  213  	 * values were tested on several cards and seem to eliminate the
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  214  	 * all of the snow and vertical banding, but fine adjustments will
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  215  	 * probably be required for other cards.
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  216  	 */
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  217  
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  218  	u32 wm;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  219  
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  220  	switch (bpp) {
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  221  	case 8:
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  222  		if	(freq > 200)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  223  			wm = 0x18120000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  224  		else if (freq > 175)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  225  			wm = 0x16110000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  226  		else if (freq > 135)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  227  			wm = 0x120E0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  228  		else
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  229  			wm = 0x100D0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  230  		break;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  231  	case 15:
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  232  	case 16:
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  233  		if (par->has_sgram) {
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  234  			if	(freq > 140)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  235  				wm = 0x2C1D0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  236  			else if (freq > 120)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  237  				wm = 0x2C180000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  238  			else if (freq > 100)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  239  				wm = 0x24160000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  240  			else if (freq >  90)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  241  				wm = 0x18120000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  242  			else if (freq >  50)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  243  				wm = 0x16110000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  244  			else if (freq >  32)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  245  				wm = 0x13100000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  246  			else
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  247  				wm = 0x120E0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  248  		} else {
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  249  			if	(freq > 160)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  250  				wm = 0x28200000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  251  			else if (freq > 140)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  252  				wm = 0x2A1E0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  253  			else if (freq > 130)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  254  				wm = 0x2B1A0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  255  			else if (freq > 120)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  256  				wm = 0x2C180000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  257  			else if (freq > 100)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  258  				wm = 0x24180000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  259  			else if (freq >  90)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  260  				wm = 0x18120000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  261  			else if (freq >  50)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  262  				wm = 0x16110000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  263  			else if (freq >  32)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  264  				wm = 0x13100000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  265  			else
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  266  				wm = 0x120E0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  267  		}
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  268  		break;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  269  	case 24:
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  270  		if (par->has_sgram) {
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  271  			if	(freq > 130)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  272  				wm = 0x31200000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  273  			else if (freq > 120)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  274  				wm = 0x2E200000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  275  			else if (freq > 100)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  276  				wm = 0x2C1D0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  277  			else if (freq >  80)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  278  				wm = 0x25180000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  279  			else if (freq >  64)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  280  				wm = 0x24160000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  281  			else if (freq >  49)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  282  				wm = 0x18120000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  283  			else if (freq >  32)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  284  				wm = 0x16110000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  285  			else
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  286  				wm = 0x13100000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  287  		} else {
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  288  			if	(freq > 120)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  289  				wm = 0x311F0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  290  			else if (freq > 100)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  291  				wm = 0x2C1D0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  292  			else if (freq >  80)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  293  				wm = 0x25180000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  294  			else if (freq >  64)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  295  				wm = 0x24160000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  296  			else if (freq >  49)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  297  				wm = 0x18120000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  298  			else if (freq >  32)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  299  				wm = 0x16110000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  300  			else
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  301  				wm = 0x13100000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  302  		}
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  303  		break;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  304  	case 32:
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  305  		if (par->has_sgram) {
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  306  			if	(freq >  80)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  307  				wm = 0x2A200000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  308  			else if (freq >  60)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  309  				wm = 0x281A0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  310  			else if (freq >  49)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  311  				wm = 0x25180000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  312  			else if (freq >  32)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  313  				wm = 0x18120000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  314  			else
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  315  				wm = 0x16110000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  316  		} else {
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  317  			if	(freq >  80)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  318  				wm = 0x29200000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  319  			else if (freq >  60)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  320  				wm = 0x281A0000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  321  			else if (freq >  49)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  322  				wm = 0x25180000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  323  			else if (freq >  32)
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  324  				wm = 0x18120000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  325  			else
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  326  				wm = 0x16110000;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  327  		}
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  328  		break;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  329  	}
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  330  
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10 @331  	return wm;
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  332  }
5350c65f drivers/video/i740fb.c Ondrej Zary 2012-02-10  333  

:::::: The code at line 331 was first introduced by commit
:::::: 5350c65f4f15bbc111ffa629130d3f32cdd4ccf6 Resurrect Intel740 driver: i740fb

:::::: TO: Ondrej Zary <linux@rainbow-software.org>
:::::: CC: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
kernel test robot May 17, 2018, 5:58 p.m. UTC | #2
Hi Changbin,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v4.17-rc5 next-20180517]
[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/changbin-du-intel-com/kernel-hacking-GCC-optimization-for-better-debug-experience-Og/20180512-001150
config: sparc64-allyesconfig (attached as .config)
compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=sparc64 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   drivers//staging/comedi/drivers/pcl816.c: In function 'pcl816_ai_setup_chanlist':
>> drivers//staging/comedi/drivers/pcl816.c:171:2: warning: 'last_chan' may be used uninitialized in this function [-Wmaybe-uninitialized]
     pcl816_ai_set_chan_scan(dev, first_chan, last_chan);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
   drivers//staging/comedi/drivers/pcl818.c: In function 'pcl818_ai_setup_chanlist':
>> drivers//staging/comedi/drivers/pcl818.c:366:2: warning: 'last_chan' may be used uninitialized in this function [-Wmaybe-uninitialized]
     pcl818_ai_set_chan_scan(dev, first_chan, last_chan);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
   drivers/net/wireless/ath/ath10k/mac.c: In function 'ath10k_mac_init_rd':
>> drivers/net/wireless/ath/ath10k/mac.c:8172:39: warning: 'rd' may be used uninitialized in this function [-Wmaybe-uninitialized]
     ar->ath_common.regulatory.current_rd = rd;
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
--
   drivers/dma/stm32-mdma.c: In function 'stm32_mdma_setup_xfer':
>> drivers/dma/stm32-mdma.c:767:6: warning: 'ccr' may be used uninitialized in this function [-Wmaybe-uninitialized]
     ccr &= ~STM32_MDMA_CCR_IRQ_MASK;
         ^~
--
   drivers/gpio/gpio-aspeed.c: In function 'enable_debounce':
>> drivers/gpio/gpio-aspeed.c:708:6: warning: 'requested_cycles' may be used uninitialized in this function [-Wmaybe-uninitialized]
      if (requested_cycles == cycles)
         ^
--
   drivers/mmc/host/sdhci-pci-core.c: In function 'intel_dsm_init.isra.3':
>> drivers/mmc/host/sdhci-pci-core.c:527:37: warning: 'val' may be used uninitialized in this function [-Wmaybe-uninitialized]
     intel_host->d3_retune = err ? true : !!val;
                             ~~~~~~~~~~~^~~~~~~

vim +/last_chan +171 drivers//staging/comedi/drivers/pcl816.c

19720c07 H Hartley Sweeten 2014-03-04  151  
19720c07 H Hartley Sweeten 2014-03-04  152  static void pcl816_ai_setup_chanlist(struct comedi_device *dev,
19720c07 H Hartley Sweeten 2014-03-04  153  				     unsigned int *chanlist,
19720c07 H Hartley Sweeten 2014-03-04  154  				     unsigned int seglen)
19720c07 H Hartley Sweeten 2014-03-04  155  {
19720c07 H Hartley Sweeten 2014-03-04  156  	unsigned int first_chan = CR_CHAN(chanlist[0]);
19720c07 H Hartley Sweeten 2014-03-04  157  	unsigned int last_chan;
19720c07 H Hartley Sweeten 2014-03-04  158  	unsigned int range;
19720c07 H Hartley Sweeten 2014-03-04  159  	unsigned int i;
19720c07 H Hartley Sweeten 2014-03-04  160  
19720c07 H Hartley Sweeten 2014-03-04  161  	/* store range list to card */
19720c07 H Hartley Sweeten 2014-03-04  162  	for (i = 0; i < seglen; i++) {
19720c07 H Hartley Sweeten 2014-03-04  163  		last_chan = CR_CHAN(chanlist[i]);
19720c07 H Hartley Sweeten 2014-03-04  164  		range = CR_RANGE(chanlist[i]);
19720c07 H Hartley Sweeten 2014-03-04  165  
19720c07 H Hartley Sweeten 2014-03-04  166  		pcl816_ai_set_chan_range(dev, last_chan, range);
19720c07 H Hartley Sweeten 2014-03-04  167  	}
19720c07 H Hartley Sweeten 2014-03-04  168  
19720c07 H Hartley Sweeten 2014-03-04  169  	udelay(1);
19720c07 H Hartley Sweeten 2014-03-04  170  
19720c07 H Hartley Sweeten 2014-03-04 @171  	pcl816_ai_set_chan_scan(dev, first_chan, last_chan);
19720c07 H Hartley Sweeten 2014-03-04  172  }
19720c07 H Hartley Sweeten 2014-03-04  173  

:::::: The code at line 171 was first introduced by commit
:::::: 19720c07f1f82c21311f3f7ac3e9b993598d6b70 staging: comedi: pcl816: cleanup setup_channel_list()

:::::: TO: H Hartley Sweeten <hsweeten@visionengravers.com>
:::::: CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox

Patch

diff --git a/Makefile b/Makefile
index d0d2652..6720c40 100644
--- a/Makefile
+++ b/Makefile
@@ -775,6 +775,12 @@  KBUILD_CFLAGS 	+= $(call cc-option, -femit-struct-debug-baseonly) \
 		   $(call cc-option,-fno-var-tracking)
 endif
 
+ifdef CONFIG_NO_AUTO_INLINE
+KBUILD_CFLAGS   += $(call cc-option, -fno-inline-functions) \
+		   $(call cc-option, -fno-inline-small-functions) \
+		   $(call cc-option, -fno-inline-functions-called-once)
+endif
+
 ifdef CONFIG_FUNCTION_TRACER
 ifndef CC_FLAGS_FTRACE
 CC_FLAGS_FTRACE := -pg
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index c40c7b7..da52243 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -198,6 +198,23 @@  config GDB_SCRIPTS
 	  instance. See Documentation/dev-tools/gdb-kernel-debugging.rst
 	  for further details.
 
+config NO_AUTO_INLINE
+	bool "Disable compiler auto-inline optimizations"
+	help
+	  This will prevent the compiler from optimizing the kernel by
+	  auto-inlining functions not marked with the inline keyword.
+	  With this option, only functions explicitly marked with
+	  "inline" will be inlined. This will allow the function tracer
+	  to trace more functions because it only traces functions that
+	  the compiler has not inlined.
+
+	  Enabling this function can help debugging a kernel if using
+	  the function tracer. But it can also change how the kernel
+	  works, because inlining functions may change the timing,
+	  which could make it difficult while debugging race conditions.
+
+	  If unsure, select N.
+
 config ENABLE_WARN_DEPRECATED
 	bool "Enable __deprecated logic"
 	default y