lkml.org 
[lkml]   [2020]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subjectdrivers/tty/serial/msm_serial.c:748:25: sparse: sparse: context imbalance in 'msm_handle_rx_dm' - unexpected unlock
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
[unhandled content-type:application/gzip]
\
 
 \ /
  Last update: 2020-07-24 09:49    [W:0.034 / U:1.044 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site