mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Johan Hovold <johan@kernel.org>
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Dmitry Safonov <0x7f454c46@gmail.com>
Subject: drivers/tty/serial/msm_serial.c:748:25: sparse: sparse: context imbalance in 'msm_handle_rx_dm' - unexpected unlock
Date: Fri, 24 Jul 2020 15:47:37 +0800	[thread overview]
Message-ID: <202007241523.l29BNdUY%lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 15711 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   f37e99aca03f63aa3f2bd13ceaf769455d12c4b0
commit: 08d5470308ac3598e7709d08b8979ce6e9de8da2 serial: core: fix sysrq overhead regression
date:   4 weeks ago
config: arm64-randconfig-s031-20200723 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.2-93-g4c6cbe55-dirty
        git checkout 08d5470308ac3598e7709d08b8979ce6e9de8da2
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arm64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)

>> drivers/tty/serial/msm_serial.c:748:25: sparse: sparse: context imbalance in 'msm_handle_rx_dm' - unexpected unlock
>> drivers/tty/serial/msm_serial.c:814:28: sparse: sparse: context imbalance in 'msm_handle_rx' - unexpected unlock

vim +/msm_handle_rx_dm +748 drivers/tty/serial/msm_serial.c

04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  697  
558abdb05fe0c7f drivers/tty/serial/msm_serial.c Ivan T. Ivanov      2015-09-30  698  static void msm_handle_rx_dm(struct uart_port *port, unsigned int misr)
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  699  {
92a19f9cec9a80a drivers/tty/serial/msm_serial.c Jiri Slaby          2013-01-03  700  	struct tty_port *tport = &port->state->port;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  701  	unsigned int sr;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  702  	int count = 0;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  703  	struct msm_port *msm_port = UART_TO_MSM(port);
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  704  
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  705  	if ((msm_read(port, UART_SR) & UART_SR_OVERRUN)) {
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  706  		port->icount.overrun++;
92a19f9cec9a80a drivers/tty/serial/msm_serial.c Jiri Slaby          2013-01-03  707  		tty_insert_flip_char(tport, 0, TTY_OVERRUN);
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  708  		msm_write(port, UART_CR_CMD_RESET_ERR, UART_CR);
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  709  	}
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  710  
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  711  	if (misr & UART_IMR_RXSTALE) {
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  712  		count = msm_read(port, UARTDM_RX_TOTAL_SNAP) -
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  713  			msm_port->old_snap_state;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  714  		msm_port->old_snap_state = 0;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  715  	} else {
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  716  		count = 4 * (msm_read(port, UART_RFWR));
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  717  		msm_port->old_snap_state += count;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  718  	}
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  719  
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  720  	/* TODO: Precise error reporting */
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  721  
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  722  	port->icount.rx += count;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  723  
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  724  	while (count > 0) {
68252424a7c757c drivers/tty/serial/msm_serial.c Stephen Boyd        2014-06-30  725  		unsigned char buf[4];
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  726  		int sysrq, r_count, i;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  727  
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  728  		sr = msm_read(port, UART_SR);
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  729  		if ((sr & UART_SR_RX_READY) == 0) {
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  730  			msm_port->old_snap_state -= count;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  731  			break;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  732  		}
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  733  
68252424a7c757c drivers/tty/serial/msm_serial.c Stephen Boyd        2014-06-30  734  		ioread32_rep(port->membase + UARTDM_RF, buf, 1);
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  735  		r_count = min_t(int, count, sizeof(buf));
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  736  
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  737  		for (i = 0; i < r_count; i++) {
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  738  			char flag = TTY_NORMAL;
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  739  
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  740  			if (msm_port->break_detected && buf[i] == 0) {
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  741  				port->icount.brk++;
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  742  				flag = TTY_BREAK;
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  743  				msm_port->break_detected = false;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  744  				if (uart_handle_break(port))
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  745  					continue;
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  746  			}
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  747  
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29 @748  			if (!(port->read_status_mask & UART_SR_RX_BREAK))
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  749  				flag = TTY_NORMAL;
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  750  
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  751  			spin_unlock(&port->lock);
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  752  			sysrq = uart_handle_sysrq_char(port, buf[i]);
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  753  			spin_lock(&port->lock);
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  754  			if (!sysrq)
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  755  				tty_insert_flip_char(tport, buf[i], flag);
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  756  		}
0896d4d4fb16229 drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  757  		count -= r_count;
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  758  	}
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  759  
f77232dab25b8d8 drivers/tty/serial/msm_serial.c Viresh Kumar        2013-08-19  760  	spin_unlock(&port->lock);
2e124b4a390ca85 drivers/tty/serial/msm_serial.c Jiri Slaby          2013-01-03  761  	tty_flip_buffer_push(tport);
f77232dab25b8d8 drivers/tty/serial/msm_serial.c Viresh Kumar        2013-08-19  762  	spin_lock(&port->lock);
f77232dab25b8d8 drivers/tty/serial/msm_serial.c Viresh Kumar        2013-08-19  763  
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  764  	if (misr & (UART_IMR_RXSTALE))
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  765  		msm_write(port, UART_CR_CMD_RESET_STALE_INT, UART_CR);
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  766  	msm_write(port, 0xFFFFFF, UARTDM_DMRX);
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  767  	msm_write(port, UART_CR_CMD_STALE_EVENT_ENABLE, UART_CR);
99693945013a517 drivers/tty/serial/msm_serial.c Ivan T. Ivanov      2015-09-30  768  
99693945013a517 drivers/tty/serial/msm_serial.c Ivan T. Ivanov      2015-09-30  769  	/* Try to use DMA */
99693945013a517 drivers/tty/serial/msm_serial.c Ivan T. Ivanov      2015-09-30  770  	msm_start_rx_dma(msm_port);
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  771  }
ec8f29e70edceb9 drivers/serial/msm_serial.c     Stepan Moskovchenko 2010-12-21  772  
558abdb05fe0c7f drivers/tty/serial/msm_serial.c Ivan T. Ivanov      2015-09-30  773  static void msm_handle_rx(struct uart_port *port)
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  774  {
92a19f9cec9a80a drivers/tty/serial/msm_serial.c Jiri Slaby          2013-01-03  775  	struct tty_port *tport = &port->state->port;
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  776  	unsigned int sr;
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  777  
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  778  	/*
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  779  	 * Handle overrun. My understanding of the hardware is that overrun
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  780  	 * is not tied to the RX buffer, so we handle the case out of band.
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  781  	 */
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  782  	if ((msm_read(port, UART_SR) & UART_SR_OVERRUN)) {
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  783  		port->icount.overrun++;
92a19f9cec9a80a drivers/tty/serial/msm_serial.c Jiri Slaby          2013-01-03  784  		tty_insert_flip_char(tport, 0, TTY_OVERRUN);
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  785  		msm_write(port, UART_CR_CMD_RESET_ERR, UART_CR);
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  786  	}
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  787  
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  788  	/* and now the main RX loop */
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  789  	while ((sr = msm_read(port, UART_SR)) & UART_SR_RX_READY) {
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  790  		unsigned int c;
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  791  		char flag = TTY_NORMAL;
660beb0e94ad81c drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  792  		int sysrq;
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  793  
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  794  		c = msm_read(port, UART_RF);
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  795  
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  796  		if (sr & UART_SR_RX_BREAK) {
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  797  			port->icount.brk++;
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  798  			if (uart_handle_break(port))
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  799  				continue;
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  800  		} else if (sr & UART_SR_PAR_FRAME_ERR) {
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  801  			port->icount.frame++;
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  802  		} else {
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  803  			port->icount.rx++;
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  804  		}
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  805  
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  806  		/* Mask conditions we're ignorning. */
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  807  		sr &= port->read_status_mask;
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  808  
ddea392e614736a drivers/tty/serial/msm_serial.c Kiran Padwal        2014-08-05  809  		if (sr & UART_SR_RX_BREAK)
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  810  			flag = TTY_BREAK;
ddea392e614736a drivers/tty/serial/msm_serial.c Kiran Padwal        2014-08-05  811  		else if (sr & UART_SR_PAR_FRAME_ERR)
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  812  			flag = TTY_FRAME;
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  813  
660beb0e94ad81c drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29 @814  		spin_unlock(&port->lock);
660beb0e94ad81c drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  815  		sysrq = uart_handle_sysrq_char(port, c);
660beb0e94ad81c drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  816  		spin_lock(&port->lock);
660beb0e94ad81c drivers/tty/serial/msm_serial.c Stephen Boyd        2014-10-29  817  		if (!sysrq)
92a19f9cec9a80a drivers/tty/serial/msm_serial.c Jiri Slaby          2013-01-03  818  			tty_insert_flip_char(tport, c, flag);
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  819  	}
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  820  
f77232dab25b8d8 drivers/tty/serial/msm_serial.c Viresh Kumar        2013-08-19  821  	spin_unlock(&port->lock);
2e124b4a390ca85 drivers/tty/serial/msm_serial.c Jiri Slaby          2013-01-03  822  	tty_flip_buffer_push(tport);
f77232dab25b8d8 drivers/tty/serial/msm_serial.c Viresh Kumar        2013-08-19  823  	spin_lock(&port->lock);
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  824  }
04896a77a97b87e drivers/serial/msm_serial.c     Robert Love         2009-06-22  825  

:::::: The code at line 748 was first introduced by commit
:::::: 0896d4d4fb162297d7199410bae386a96a2e473b tty: serial: msm: Support sysrq on uartDM devices

:::::: TO: Stephen Boyd <sboyd@codeaurora.org>
:::::: CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 36599 bytes --]

                 reply	other threads:[~2020-07-24  7:48 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=202007241523.l29BNdUY%lkp@intel.com \
    --to=lkp@intel.com \
    --cc=0x7f454c46@gmail.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=johan@kernel.org \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome