tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   d15be546031cf65a0fc34879beca02fd90fe7ac7
commit: 08d5470308ac3598e7709d08b8979ce6e9de8da2 serial: core: fix sysrq 
overhead regression
date:   4 weeks ago
config: m68k-randconfig-s032-20200723 (attached as .config)
compiler: m68k-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=m68k 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


sparse warnings: (new ones prefixed by >>)

>> drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 
>> 'pmz_receive_chars' - unexpected unlock

vim +/pmz_receive_chars +255 drivers/tty/serial/pmac_zilog.c

7cf82b1b65833f2 drivers/tty/serial/pmac_zilog.c Finn Thain      2011-12-06  214 
 
2e124b4a390ca85 drivers/tty/serial/pmac_zilog.c Jiri Slaby      2013-01-03  215 
 static bool pmz_receive_chars(struct uart_pmac_port *uap)
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  216 
 {
92a19f9cec9a80a drivers/tty/serial/pmac_zilog.c Jiri Slaby      2013-01-03  217 
        struct tty_port *port;
13b4353bb05568c drivers/tty/serial/pmac_zilog.c YueHaibing      2018-09-20  218 
        unsigned char ch, r1, drop, flag;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  219 
        int loops = 0;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  220 
 
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  221 
        /* Sanity check, make sure the old bug is no longer happening */
2e124b4a390ca85 drivers/tty/serial/pmac_zilog.c Jiri Slaby      2013-01-03  222 
        if (uap->port.state == NULL) {
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  223 
                WARN_ON(1);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  224 
                (void)read_zsdata(uap);
2e124b4a390ca85 drivers/tty/serial/pmac_zilog.c Jiri Slaby      2013-01-03  225 
                return false;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  226 
        }
92a19f9cec9a80a drivers/tty/serial/pmac_zilog.c Jiri Slaby      2013-01-03  227 
        port = &uap->port.state->port;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  228 
 
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  229 
        while (1) {
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  230 
                drop = 0;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  231 
 
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  232 
                r1 = read_zsreg(uap, R1);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  233 
                ch = read_zsdata(uap);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  234 
 
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  235 
                if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR)) {
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  236 
                        write_zsreg(uap, R0, ERR_RES);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  237 
                        zssync(uap);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  238 
                }
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  239 
 
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  240 
                ch &= uap->parity_mask;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  241 
                if (ch == 0 && uap->flags & PMACZILOG_FLAG_BREAK) {
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  242 
                        uap->flags &= ~PMACZILOG_FLAG_BREAK;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  243 
                }
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  244 
 
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  245 
 #if defined(CONFIG_MAGIC_SYSRQ) && defined(CONFIG_SERIAL_CORE_CONSOLE)
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  246 
 #ifdef USE_CTRL_O_SYSRQ
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  247 
                /* Handle the SysRq ^O Hack */
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  248 
                if (ch == '\x0f') {
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  249 
                        uap->port.sysrq = jiffies + HZ*5;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  250 
                        goto next_char;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  251 
                }
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  252 
 #endif /* USE_CTRL_O_SYSRQ */
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  253 
                if (uap->port.sysrq) {
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  254 
                        int swallow;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16 @255 
                        spin_unlock(&uap->port.lock);
7d12e780e003f93 drivers/serial/pmac_zilog.c     David Howells   2006-10-05  256 
                        swallow = uart_handle_sysrq_char(&uap->port, ch);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  257 
                        spin_lock(&uap->port.lock);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  258 
                        if (swallow)
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  259 
                                goto next_char;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  260 
                }
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  261 
 #endif /* CONFIG_MAGIC_SYSRQ && CONFIG_SERIAL_CORE_CONSOLE */
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  262 
 
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  263 
                /* A real serial line, record the character and status.  */
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  264 
                if (drop)
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  265 
                        goto next_char;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  266 
 
33f0f88f1c51ae5 drivers/serial/pmac_zilog.c     Alan Cox        2006-01-09  267 
                flag = TTY_NORMAL;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  268 
                uap->port.icount.rx++;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  269 
 
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  270 
                if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR | BRK_ABRT)) {
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  271 
                        if (r1 & BRK_ABRT) {
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  272 
                                pmz_debug("pmz: got break !\n");
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  273 
                                r1 &= ~(PAR_ERR | CRC_ERR);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  274 
                                uap->port.icount.brk++;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  275 
                                if (uart_handle_break(&uap->port))
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  276 
                                        goto next_char;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  277 
                        }
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  278 
                        else if (r1 & PAR_ERR)
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  279 
                                uap->port.icount.parity++;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  280 
                        else if (r1 & CRC_ERR)
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  281 
                                uap->port.icount.frame++;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  282 
                        if (r1 & Rx_OVR)
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  283 
                                uap->port.icount.overrun++;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  284 
                        r1 &= uap->port.read_status_mask;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  285 
                        if (r1 & BRK_ABRT)
33f0f88f1c51ae5 drivers/serial/pmac_zilog.c     Alan Cox        2006-01-09  286 
                                flag = TTY_BREAK;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  287 
                        else if (r1 & PAR_ERR)
33f0f88f1c51ae5 drivers/serial/pmac_zilog.c     Alan Cox        2006-01-09  288 
                                flag = TTY_PARITY;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  289 
                        else if (r1 & CRC_ERR)
33f0f88f1c51ae5 drivers/serial/pmac_zilog.c     Alan Cox        2006-01-09  290 
                                flag = TTY_FRAME;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  291 
                }
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  292 
 
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  293 
                if (uap->port.ignore_status_mask == 0xff ||
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  294 
                    (r1 & uap->port.ignore_status_mask) == 0) {
92a19f9cec9a80a drivers/tty/serial/pmac_zilog.c Jiri Slaby      2013-01-03  295 
                        tty_insert_flip_char(port, ch, flag);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  296 
                }
33f0f88f1c51ae5 drivers/serial/pmac_zilog.c     Alan Cox        2006-01-09  297 
                if (r1 & Rx_OVR)
92a19f9cec9a80a drivers/tty/serial/pmac_zilog.c Jiri Slaby      2013-01-03  298 
                        tty_insert_flip_char(port, 0, TTY_OVERRUN);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  299 
        next_char:
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  300 
                /* We can get stuck in an infinite loop getting char 0 when the
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  301 
                 * line is in a wrong HW state, we break that here.
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  302 
                 * When that happens, I disable the receive side of the driver.
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  303 
                 * Note that what I've been experiencing is a real irq loop 
where
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  304 
                 * I'm getting flooded regardless of the actual port speed.
25985edcedea639 drivers/tty/serial/pmac_zilog.c Lucas De Marchi 2011-03-30  305 
                 * Something strange is going on with the HW
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  306 
                 */
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  307 
                if ((++loops) > 1000)
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  308 
                        goto flood;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  309 
                ch = read_zsreg(uap, R0);
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  310 
                if (!(ch & Rx_CH_AV))
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  311 
                        break;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  312 
        }
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  313 
 
2e124b4a390ca85 drivers/tty/serial/pmac_zilog.c Jiri Slaby      2013-01-03  314 
        return true;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  315 
  flood:
7cf82b1b65833f2 drivers/tty/serial/pmac_zilog.c Finn Thain      2011-12-06  316 
        pmz_interrupt_control(uap, 0);
ec9cbe09899e36b drivers/serial/pmac_zilog.c     Finn Thain      2009-11-17  317 
        pmz_error("pmz: rx irq flood !\n");
2e124b4a390ca85 drivers/tty/serial/pmac_zilog.c Jiri Slaby      2013-01-03  318 
        return true;
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  319 
 }
^1da177e4c3f415 drivers/serial/pmac_zilog.c     Linus Torvalds  2005-04-16  320 
 

:::::: The code at line 255 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds <[email protected]>
:::::: CC: Linus Torvalds <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

Reply via email to