Messages in this thread | | | Date | Fri, 24 Jul 2020 09:56:20 +0800 | From | kernel test robot <> | Subject | drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock |
| |
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 <lkp@intel.com>
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 <torvalds@ppc970.osdl.org> :::::: CC: Linus Torvalds <torvalds@ppc970.osdl.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] | |