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 <l...@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 <sb...@codeaurora.org> :::::: CC: Greg Kroah-Hartman <gre...@linuxfoundation.org> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
.config.gz
Description: application/gzip