* drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock
@ 2020-07-23 9:29 ` kernel test robot
0 siblings, 0 replies; 10+ messages in thread
From: kernel test robot @ 2020-07-23 9:29 UTC (permalink / raw)
To: Johan Hovold
Cc: kbuild-all, linux-kernel, Greg Kroah-Hartman, Andy Shevchenko,
Dmitry Safonov
[-- Attachment #1: Type: text/plain, Size: 12731 bytes --]
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
7cf82b1b65833f drivers/tty/serial/pmac_zilog.c Finn Thain 2011-12-06 214
2e124b4a390ca8 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 215 static bool pmz_receive_chars(struct uart_pmac_port *uap)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 216 {
92a19f9cec9a80 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 217 struct tty_port *port;
13b4353bb05568 drivers/tty/serial/pmac_zilog.c YueHaibing 2018-09-20 218 unsigned char ch, r1, drop, flag;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 219 int loops = 0;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 220
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 221 /* Sanity check, make sure the old bug is no longer happening */
2e124b4a390ca8 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 222 if (uap->port.state == NULL) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 223 WARN_ON(1);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 224 (void)read_zsdata(uap);
2e124b4a390ca8 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 225 return false;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 226 }
92a19f9cec9a80 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 227 port = &uap->port.state->port;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 228
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 229 while (1) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 230 drop = 0;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 231
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 232 r1 = read_zsreg(uap, R1);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 233 ch = read_zsdata(uap);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 234
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 235 if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR)) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 236 write_zsreg(uap, R0, ERR_RES);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 237 zssync(uap);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 238 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 239
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 240 ch &= uap->parity_mask;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 241 if (ch == 0 && uap->flags & PMACZILOG_FLAG_BREAK) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 242 uap->flags &= ~PMACZILOG_FLAG_BREAK;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 243 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 244
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 245 #if defined(CONFIG_MAGIC_SYSRQ) && defined(CONFIG_SERIAL_CORE_CONSOLE)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 246 #ifdef USE_CTRL_O_SYSRQ
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 247 /* Handle the SysRq ^O Hack */
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 248 if (ch == '\x0f') {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 249 uap->port.sysrq = jiffies + HZ*5;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 250 goto next_char;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 251 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 252 #endif /* USE_CTRL_O_SYSRQ */
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 253 if (uap->port.sysrq) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 254 int swallow;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 @255 spin_unlock(&uap->port.lock);
7d12e780e003f9 drivers/serial/pmac_zilog.c David Howells 2006-10-05 256 swallow = uart_handle_sysrq_char(&uap->port, ch);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 257 spin_lock(&uap->port.lock);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 258 if (swallow)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 259 goto next_char;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 260 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 261 #endif /* CONFIG_MAGIC_SYSRQ && CONFIG_SERIAL_CORE_CONSOLE */
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 262
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 263 /* A real serial line, record the character and status. */
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 264 if (drop)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 265 goto next_char;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 266
33f0f88f1c51ae drivers/serial/pmac_zilog.c Alan Cox 2006-01-09 267 flag = TTY_NORMAL;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 268 uap->port.icount.rx++;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 269
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 270 if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR | BRK_ABRT)) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 271 if (r1 & BRK_ABRT) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 272 pmz_debug("pmz: got break !\n");
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 273 r1 &= ~(PAR_ERR | CRC_ERR);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 274 uap->port.icount.brk++;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 275 if (uart_handle_break(&uap->port))
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 276 goto next_char;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 277 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 278 else if (r1 & PAR_ERR)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 279 uap->port.icount.parity++;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 280 else if (r1 & CRC_ERR)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 281 uap->port.icount.frame++;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 282 if (r1 & Rx_OVR)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 283 uap->port.icount.overrun++;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 284 r1 &= uap->port.read_status_mask;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 285 if (r1 & BRK_ABRT)
33f0f88f1c51ae drivers/serial/pmac_zilog.c Alan Cox 2006-01-09 286 flag = TTY_BREAK;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 287 else if (r1 & PAR_ERR)
33f0f88f1c51ae drivers/serial/pmac_zilog.c Alan Cox 2006-01-09 288 flag = TTY_PARITY;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 289 else if (r1 & CRC_ERR)
33f0f88f1c51ae drivers/serial/pmac_zilog.c Alan Cox 2006-01-09 290 flag = TTY_FRAME;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 291 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 292
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 293 if (uap->port.ignore_status_mask == 0xff ||
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 294 (r1 & uap->port.ignore_status_mask) == 0) {
92a19f9cec9a80 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 295 tty_insert_flip_char(port, ch, flag);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 296 }
33f0f88f1c51ae drivers/serial/pmac_zilog.c Alan Cox 2006-01-09 297 if (r1 & Rx_OVR)
92a19f9cec9a80 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 298 tty_insert_flip_char(port, 0, TTY_OVERRUN);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 299 next_char:
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 300 /* We can get stuck in an infinite loop getting char 0 when the
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 301 * line is in a wrong HW state, we break that here.
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 302 * When that happens, I disable the receive side of the driver.
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 303 * Note that what I've been experiencing is a real irq loop where
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 304 * I'm getting flooded regardless of the actual port speed.
25985edcedea63 drivers/tty/serial/pmac_zilog.c Lucas De Marchi 2011-03-30 305 * Something strange is going on with the HW
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 306 */
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 307 if ((++loops) > 1000)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 308 goto flood;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 309 ch = read_zsreg(uap, R0);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 310 if (!(ch & Rx_CH_AV))
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 311 break;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 312 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 313
2e124b4a390ca8 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 314 return true;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 315 flood:
7cf82b1b65833f drivers/tty/serial/pmac_zilog.c Finn Thain 2011-12-06 316 pmz_interrupt_control(uap, 0);
ec9cbe09899e36 drivers/serial/pmac_zilog.c Finn Thain 2009-11-17 317 pmz_error("pmz: rx irq flood !\n");
2e124b4a390ca8 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 318 return true;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 319 }
^1da177e4c3f41 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
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 21908 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock
@ 2020-07-23 9:29 ` kernel test robot
0 siblings, 0 replies; 10+ messages in thread
From: kernel test robot @ 2020-07-23 9:29 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 12875 bytes --]
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
7cf82b1b65833f drivers/tty/serial/pmac_zilog.c Finn Thain 2011-12-06 214
2e124b4a390ca8 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 215 static bool pmz_receive_chars(struct uart_pmac_port *uap)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 216 {
92a19f9cec9a80 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 217 struct tty_port *port;
13b4353bb05568 drivers/tty/serial/pmac_zilog.c YueHaibing 2018-09-20 218 unsigned char ch, r1, drop, flag;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 219 int loops = 0;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 220
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 221 /* Sanity check, make sure the old bug is no longer happening */
2e124b4a390ca8 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 222 if (uap->port.state == NULL) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 223 WARN_ON(1);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 224 (void)read_zsdata(uap);
2e124b4a390ca8 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 225 return false;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 226 }
92a19f9cec9a80 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 227 port = &uap->port.state->port;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 228
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 229 while (1) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 230 drop = 0;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 231
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 232 r1 = read_zsreg(uap, R1);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 233 ch = read_zsdata(uap);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 234
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 235 if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR)) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 236 write_zsreg(uap, R0, ERR_RES);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 237 zssync(uap);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 238 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 239
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 240 ch &= uap->parity_mask;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 241 if (ch == 0 && uap->flags & PMACZILOG_FLAG_BREAK) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 242 uap->flags &= ~PMACZILOG_FLAG_BREAK;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 243 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 244
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 245 #if defined(CONFIG_MAGIC_SYSRQ) && defined(CONFIG_SERIAL_CORE_CONSOLE)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 246 #ifdef USE_CTRL_O_SYSRQ
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 247 /* Handle the SysRq ^O Hack */
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 248 if (ch == '\x0f') {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 249 uap->port.sysrq = jiffies + HZ*5;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 250 goto next_char;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 251 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 252 #endif /* USE_CTRL_O_SYSRQ */
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 253 if (uap->port.sysrq) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 254 int swallow;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 @255 spin_unlock(&uap->port.lock);
7d12e780e003f9 drivers/serial/pmac_zilog.c David Howells 2006-10-05 256 swallow = uart_handle_sysrq_char(&uap->port, ch);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 257 spin_lock(&uap->port.lock);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 258 if (swallow)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 259 goto next_char;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 260 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 261 #endif /* CONFIG_MAGIC_SYSRQ && CONFIG_SERIAL_CORE_CONSOLE */
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 262
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 263 /* A real serial line, record the character and status. */
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 264 if (drop)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 265 goto next_char;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 266
33f0f88f1c51ae drivers/serial/pmac_zilog.c Alan Cox 2006-01-09 267 flag = TTY_NORMAL;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 268 uap->port.icount.rx++;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 269
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 270 if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR | BRK_ABRT)) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 271 if (r1 & BRK_ABRT) {
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 272 pmz_debug("pmz: got break !\n");
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 273 r1 &= ~(PAR_ERR | CRC_ERR);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 274 uap->port.icount.brk++;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 275 if (uart_handle_break(&uap->port))
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 276 goto next_char;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 277 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 278 else if (r1 & PAR_ERR)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 279 uap->port.icount.parity++;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 280 else if (r1 & CRC_ERR)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 281 uap->port.icount.frame++;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 282 if (r1 & Rx_OVR)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 283 uap->port.icount.overrun++;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 284 r1 &= uap->port.read_status_mask;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 285 if (r1 & BRK_ABRT)
33f0f88f1c51ae drivers/serial/pmac_zilog.c Alan Cox 2006-01-09 286 flag = TTY_BREAK;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 287 else if (r1 & PAR_ERR)
33f0f88f1c51ae drivers/serial/pmac_zilog.c Alan Cox 2006-01-09 288 flag = TTY_PARITY;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 289 else if (r1 & CRC_ERR)
33f0f88f1c51ae drivers/serial/pmac_zilog.c Alan Cox 2006-01-09 290 flag = TTY_FRAME;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 291 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 292
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 293 if (uap->port.ignore_status_mask == 0xff ||
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 294 (r1 & uap->port.ignore_status_mask) == 0) {
92a19f9cec9a80 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 295 tty_insert_flip_char(port, ch, flag);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 296 }
33f0f88f1c51ae drivers/serial/pmac_zilog.c Alan Cox 2006-01-09 297 if (r1 & Rx_OVR)
92a19f9cec9a80 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 298 tty_insert_flip_char(port, 0, TTY_OVERRUN);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 299 next_char:
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 300 /* We can get stuck in an infinite loop getting char 0 when the
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 301 * line is in a wrong HW state, we break that here.
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 302 * When that happens, I disable the receive side of the driver.
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 303 * Note that what I've been experiencing is a real irq loop where
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 304 * I'm getting flooded regardless of the actual port speed.
25985edcedea63 drivers/tty/serial/pmac_zilog.c Lucas De Marchi 2011-03-30 305 * Something strange is going on with the HW
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 306 */
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 307 if ((++loops) > 1000)
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 308 goto flood;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 309 ch = read_zsreg(uap, R0);
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 310 if (!(ch & Rx_CH_AV))
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 311 break;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 312 }
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 313
2e124b4a390ca8 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 314 return true;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 315 flood:
7cf82b1b65833f drivers/tty/serial/pmac_zilog.c Finn Thain 2011-12-06 316 pmz_interrupt_control(uap, 0);
ec9cbe09899e36 drivers/serial/pmac_zilog.c Finn Thain 2009-11-17 317 pmz_error("pmz: rx irq flood !\n");
2e124b4a390ca8 drivers/tty/serial/pmac_zilog.c Jiri Slaby 2013-01-03 318 return true;
^1da177e4c3f41 drivers/serial/pmac_zilog.c Linus Torvalds 2005-04-16 319 }
^1da177e4c3f41 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(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 21908 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock
2020-07-23 9:29 ` kernel test robot
@ 2020-07-23 12:16 ` Johan Hovold
-1 siblings, 0 replies; 10+ messages in thread
From: Johan Hovold @ 2020-07-23 12:16 UTC (permalink / raw)
To: kernel test robot
Cc: Johan Hovold, kbuild-all, linux-kernel, Greg Kroah-Hartman,
Andy Shevchenko, Dmitry Safonov
On Thu, Jul 23, 2020 at 05:29:14PM +0800, kernel test robot wrote:
> 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
This warning is far from new, but let's add the missing annotation
nonetheless:
https://lore.kernel.org/r/20200723121423.24217-1-johan@kernel.org
Johan
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock
@ 2020-07-23 12:16 ` Johan Hovold
0 siblings, 0 replies; 10+ messages in thread
From: Johan Hovold @ 2020-07-23 12:16 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 1398 bytes --]
On Thu, Jul 23, 2020 at 05:29:14PM +0800, kernel test robot wrote:
> 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
This warning is far from new, but let's add the missing annotation
nonetheless:
https://lore.kernel.org/r/20200723121423.24217-1-johan(a)kernel.org
Johan
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock
2020-07-23 12:16 ` Johan Hovold
@ 2020-07-23 12:26 ` Andy Shevchenko
-1 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2020-07-23 12:26 UTC (permalink / raw)
To: Johan Hovold
Cc: kernel test robot, kbuild-all, Linux Kernel Mailing List,
Greg Kroah-Hartman, Andy Shevchenko, Dmitry Safonov
On Thu, Jul 23, 2020 at 3:19 PM Johan Hovold <johan@kernel.org> wrote:
>
> On Thu, Jul 23, 2020 at 05:29:14PM +0800, kernel test robot wrote:
> > 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
>
> This warning is far from new,
I suspect it's a new sparse and kbuildbot that decided to unveil old sins.
> but let's add the missing annotation
> nonetheless:
>
> https://lore.kernel.org/r/20200723121423.24217-1-johan@kernel.org
Feel free to add Reviewed-by: Andy Shevchenko
<andy.shevchenko@gmail.com> to them.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock
@ 2020-07-23 12:26 ` Andy Shevchenko
0 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2020-07-23 12:26 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 1734 bytes --]
On Thu, Jul 23, 2020 at 3:19 PM Johan Hovold <johan@kernel.org> wrote:
>
> On Thu, Jul 23, 2020 at 05:29:14PM +0800, kernel test robot wrote:
> > 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
>
> This warning is far from new,
I suspect it's a new sparse and kbuildbot that decided to unveil old sins.
> but let's add the missing annotation
> nonetheless:
>
> https://lore.kernel.org/r/20200723121423.24217-1-johan(a)kernel.org
Feel free to add Reviewed-by: Andy Shevchenko
<andy.shevchenko@gmail.com> to them.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock
2020-07-23 12:26 ` Andy Shevchenko
@ 2020-07-23 12:37 ` Johan Hovold
-1 siblings, 0 replies; 10+ messages in thread
From: Johan Hovold @ 2020-07-23 12:37 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Johan Hovold, kernel test robot, kbuild-all,
Linux Kernel Mailing List, Greg Kroah-Hartman, Andy Shevchenko,
Dmitry Safonov
On Thu, Jul 23, 2020 at 03:26:54PM +0300, Andy Shevchenko wrote:
> On Thu, Jul 23, 2020 at 3:19 PM Johan Hovold <johan@kernel.org> wrote:
> >
> > On Thu, Jul 23, 2020 at 05:29:14PM +0800, kernel test robot wrote:
> > > 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
> >
> > This warning is far from new,
>
> I suspect it's a new sparse and kbuildbot that decided to unveil old sins.
Possibly.
> > but let's add the missing annotation
> > nonetheless:
> >
> > https://lore.kernel.org/r/20200723121423.24217-1-johan@kernel.org
>
> Feel free to add Reviewed-by: Andy Shevchenko
> <andy.shevchenko@gmail.com> to them.
Thanks, and sorry I missed this before sending a v2 with the missing
ampersands added. It's better if you reply to the cover letter so Greg's
tooling will pick it up:
https://lore.kernel.org/r/20200723123327.5843-1-johan@kernel.org
Johan
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock
@ 2020-07-23 12:37 ` Johan Hovold
0 siblings, 0 replies; 10+ messages in thread
From: Johan Hovold @ 2020-07-23 12:37 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 2093 bytes --]
On Thu, Jul 23, 2020 at 03:26:54PM +0300, Andy Shevchenko wrote:
> On Thu, Jul 23, 2020 at 3:19 PM Johan Hovold <johan@kernel.org> wrote:
> >
> > On Thu, Jul 23, 2020 at 05:29:14PM +0800, kernel test robot wrote:
> > > 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
> >
> > This warning is far from new,
>
> I suspect it's a new sparse and kbuildbot that decided to unveil old sins.
Possibly.
> > but let's add the missing annotation
> > nonetheless:
> >
> > https://lore.kernel.org/r/20200723121423.24217-1-johan(a)kernel.org
>
> Feel free to add Reviewed-by: Andy Shevchenko
> <andy.shevchenko@gmail.com> to them.
Thanks, and sorry I missed this before sending a v2 with the missing
ampersands added. It's better if you reply to the cover letter so Greg's
tooling will pick it up:
https://lore.kernel.org/r/20200723123327.5843-1-johan(a)kernel.org
Johan
^ permalink raw reply [flat|nested] 10+ messages in thread
* drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock
@ 2020-07-24 1:56 ` kernel test robot
0 siblings, 0 replies; 10+ messages in thread
From: kernel test robot @ 2020-07-24 1:56 UTC (permalink / raw)
To: Johan Hovold
Cc: kbuild-all, linux-kernel, Greg Kroah-Hartman, Andy Shevchenko,
Dmitry Safonov
[-- Attachment #1: Type: text/plain, Size: 12838 bytes --]
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
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 21908 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock
@ 2020-07-24 1:56 ` kernel test robot
0 siblings, 0 replies; 10+ messages in thread
From: kernel test robot @ 2020-07-24 1:56 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 12982 bytes --]
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(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 21908 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2020-07-24 1:56 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-23 9:29 drivers/tty/serial/pmac_zilog.c:255:36: sparse: sparse: context imbalance in 'pmz_receive_chars' - unexpected unlock kernel test robot
2020-07-23 9:29 ` kernel test robot
2020-07-23 12:16 ` Johan Hovold
2020-07-23 12:16 ` Johan Hovold
2020-07-23 12:26 ` Andy Shevchenko
2020-07-23 12:26 ` Andy Shevchenko
2020-07-23 12:37 ` Johan Hovold
2020-07-23 12:37 ` Johan Hovold
2020-07-24 1:56 kernel test robot
2020-07-24 1:56 ` kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.