Messages in this thread | | | Date | Mon, 6 Mar 2023 12:07:38 +0300 | From | Dan Carpenter <> | Subject | Re: [PATCH printk v1 06/18] printk: nobkl: Add acquire/release logic |
| |
Hi John,
url: https://github.com/intel-lab-lkp/linux/commits/John-Ogness/kdb-do-not-assume-write-callback-available/20230303-040039 base: 10d639febe5629687dac17c4a7500a96537ce11a patch link: https://lore.kernel.org/r/20230302195618.156940-7-john.ogness%40linutronix.de patch subject: [PATCH printk v1 06/18] printk: nobkl: Add acquire/release logic config: i386-randconfig-m021 (https://download.01.org/0day-ci/archive/20230305/202303051319.m55kZE3v-lkp@intel.com/config) compiler: gcc-11 (Debian 11.3.0-8) 11.3.0
If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Reported-by: Dan Carpenter <error27@gmail.com> | Link: https://lore.kernel.org/r/202303051319.m55kZE3v-lkp@intel.com/
smatch warnings: kernel/printk/printk_nobkl.c:391 cons_try_acquire_spin() warn: signedness bug returning '(-16)'
vim +391 kernel/printk/printk_nobkl.c
d444c8549ebdf3 Thomas Gleixner 2023-03-02 284 /** d444c8549ebdf3 Thomas Gleixner 2023-03-02 285 * cons_try_acquire_spin - Complete the spinwait attempt d444c8549ebdf3 Thomas Gleixner 2023-03-02 286 * @ctxt: Pointer to an acquire context that contains d444c8549ebdf3 Thomas Gleixner 2023-03-02 287 * all information about the acquire mode d444c8549ebdf3 Thomas Gleixner 2023-03-02 288 * d444c8549ebdf3 Thomas Gleixner 2023-03-02 289 * @ctxt->hov_state contains the handover state that was set in d444c8549ebdf3 Thomas Gleixner 2023-03-02 290 * state[REQ] d444c8549ebdf3 Thomas Gleixner 2023-03-02 291 * @ctxt->req_state contains the request state that was set in d444c8549ebdf3 Thomas Gleixner 2023-03-02 292 * state[CUR] d444c8549ebdf3 Thomas Gleixner 2023-03-02 293 * d444c8549ebdf3 Thomas Gleixner 2023-03-02 294 * Returns: 0 if successfully locked. -EBUSY on timeout. -EAGAIN on d444c8549ebdf3 Thomas Gleixner 2023-03-02 295 * unexpected state values.
Out of date comments.
d444c8549ebdf3 Thomas Gleixner 2023-03-02 296 * d444c8549ebdf3 Thomas Gleixner 2023-03-02 297 * On success @ctxt->state contains the new state that was set in d444c8549ebdf3 Thomas Gleixner 2023-03-02 298 * state[CUR] d444c8549ebdf3 Thomas Gleixner 2023-03-02 299 * d444c8549ebdf3 Thomas Gleixner 2023-03-02 300 * On -EBUSY failure this context timed out. This context should either d444c8549ebdf3 Thomas Gleixner 2023-03-02 301 * give up or attempt a hostile takeover. d444c8549ebdf3 Thomas Gleixner 2023-03-02 302 * d444c8549ebdf3 Thomas Gleixner 2023-03-02 303 * On -EAGAIN failure this context encountered unexpected state values. d444c8549ebdf3 Thomas Gleixner 2023-03-02 304 * This context should retry the full handover request setup process (the d444c8549ebdf3 Thomas Gleixner 2023-03-02 305 * handover request setup by cons_setup_handover() is now invalidated and d444c8549ebdf3 Thomas Gleixner 2023-03-02 306 * must be performed again).
Out of date.
d444c8549ebdf3 Thomas Gleixner 2023-03-02 307 */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 308 static bool cons_try_acquire_spin(struct cons_context *ctxt) ^^^^ After reviewing the code, it looks the intention was the bool should be changed to int.
d444c8549ebdf3 Thomas Gleixner 2023-03-02 309 { d444c8549ebdf3 Thomas Gleixner 2023-03-02 310 struct console *con = ctxt->console; d444c8549ebdf3 Thomas Gleixner 2023-03-02 311 struct cons_state cur; d444c8549ebdf3 Thomas Gleixner 2023-03-02 312 struct cons_state new; d444c8549ebdf3 Thomas Gleixner 2023-03-02 313 int err = -EAGAIN; d444c8549ebdf3 Thomas Gleixner 2023-03-02 314 int timeout; d444c8549ebdf3 Thomas Gleixner 2023-03-02 315 d444c8549ebdf3 Thomas Gleixner 2023-03-02 316 /* Now wait for the other side to hand over */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 317 for (timeout = ctxt->spinwait_max_us; timeout >= 0; timeout--) { d444c8549ebdf3 Thomas Gleixner 2023-03-02 318 /* Timeout immediately if a remote panic is detected. */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 319 if (cons_check_panic()) d444c8549ebdf3 Thomas Gleixner 2023-03-02 320 break; d444c8549ebdf3 Thomas Gleixner 2023-03-02 321 d444c8549ebdf3 Thomas Gleixner 2023-03-02 322 cons_state_read(con, CON_STATE_CUR, &cur); d444c8549ebdf3 Thomas Gleixner 2023-03-02 323 d444c8549ebdf3 Thomas Gleixner 2023-03-02 324 /* d444c8549ebdf3 Thomas Gleixner 2023-03-02 325 * If the real state of the console matches the handover state d444c8549ebdf3 Thomas Gleixner 2023-03-02 326 * that this context setup, then the handover was a success d444c8549ebdf3 Thomas Gleixner 2023-03-02 327 * and this context is now the owner. d444c8549ebdf3 Thomas Gleixner 2023-03-02 328 * d444c8549ebdf3 Thomas Gleixner 2023-03-02 329 * Note that this might have raced with a new higher priority d444c8549ebdf3 Thomas Gleixner 2023-03-02 330 * requester coming in after the lock was handed over. d444c8549ebdf3 Thomas Gleixner 2023-03-02 331 * However, that requester will see that the owner changes and d444c8549ebdf3 Thomas Gleixner 2023-03-02 332 * setup a new request for the current owner (this context). d444c8549ebdf3 Thomas Gleixner 2023-03-02 333 */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 334 if (cons_state_bits_match(cur, ctxt->hov_state)) d444c8549ebdf3 Thomas Gleixner 2023-03-02 335 goto success; d444c8549ebdf3 Thomas Gleixner 2023-03-02 336 d444c8549ebdf3 Thomas Gleixner 2023-03-02 337 /* d444c8549ebdf3 Thomas Gleixner 2023-03-02 338 * If state changed since the request was made, give up as d444c8549ebdf3 Thomas Gleixner 2023-03-02 339 * it is no longer consistent. This must include d444c8549ebdf3 Thomas Gleixner 2023-03-02 340 * state::req_prio since there could be a higher priority d444c8549ebdf3 Thomas Gleixner 2023-03-02 341 * request available. d444c8549ebdf3 Thomas Gleixner 2023-03-02 342 */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 343 if (cur.bits != ctxt->req_state.bits) d444c8549ebdf3 Thomas Gleixner 2023-03-02 344 goto cleanup; d444c8549ebdf3 Thomas Gleixner 2023-03-02 345 d444c8549ebdf3 Thomas Gleixner 2023-03-02 346 /* d444c8549ebdf3 Thomas Gleixner 2023-03-02 347 * Finally check whether the handover state is still d444c8549ebdf3 Thomas Gleixner 2023-03-02 348 * the same. d444c8549ebdf3 Thomas Gleixner 2023-03-02 349 */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 350 cons_state_read(con, CON_STATE_REQ, &cur); d444c8549ebdf3 Thomas Gleixner 2023-03-02 351 if (cur.atom != ctxt->hov_state.atom) d444c8549ebdf3 Thomas Gleixner 2023-03-02 352 goto cleanup; d444c8549ebdf3 Thomas Gleixner 2023-03-02 353 d444c8549ebdf3 Thomas Gleixner 2023-03-02 354 /* Account time */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 355 if (timeout > 0) d444c8549ebdf3 Thomas Gleixner 2023-03-02 356 udelay(1); d444c8549ebdf3 Thomas Gleixner 2023-03-02 357 } d444c8549ebdf3 Thomas Gleixner 2023-03-02 358 d444c8549ebdf3 Thomas Gleixner 2023-03-02 359 /* d444c8549ebdf3 Thomas Gleixner 2023-03-02 360 * Timeout. Cleanup the handover state and carefully try to reset d444c8549ebdf3 Thomas Gleixner 2023-03-02 361 * req_prio in the real state. The reset is important to ensure d444c8549ebdf3 Thomas Gleixner 2023-03-02 362 * that the owner does not hand over the lock after this context d444c8549ebdf3 Thomas Gleixner 2023-03-02 363 * has given up waiting. d444c8549ebdf3 Thomas Gleixner 2023-03-02 364 */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 365 cons_cleanup_handover(ctxt); d444c8549ebdf3 Thomas Gleixner 2023-03-02 366 d444c8549ebdf3 Thomas Gleixner 2023-03-02 367 cons_state_read(con, CON_STATE_CUR, &cur); d444c8549ebdf3 Thomas Gleixner 2023-03-02 368 do { d444c8549ebdf3 Thomas Gleixner 2023-03-02 369 /* d444c8549ebdf3 Thomas Gleixner 2023-03-02 370 * The timeout might have raced with the owner coming late d444c8549ebdf3 Thomas Gleixner 2023-03-02 371 * and handing it over gracefully. d444c8549ebdf3 Thomas Gleixner 2023-03-02 372 */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 373 if (cons_state_bits_match(cur, ctxt->hov_state)) d444c8549ebdf3 Thomas Gleixner 2023-03-02 374 goto success; d444c8549ebdf3 Thomas Gleixner 2023-03-02 375 d444c8549ebdf3 Thomas Gleixner 2023-03-02 376 /* d444c8549ebdf3 Thomas Gleixner 2023-03-02 377 * Validate that the state matches with the state at request d444c8549ebdf3 Thomas Gleixner 2023-03-02 378 * time. If this check fails, there is already a higher d444c8549ebdf3 Thomas Gleixner 2023-03-02 379 * priority context waiting or the owner has changed (either d444c8549ebdf3 Thomas Gleixner 2023-03-02 380 * by higher priority or by hostile takeover). In all fail d444c8549ebdf3 Thomas Gleixner 2023-03-02 381 * cases this context is no longer in line for a handover to d444c8549ebdf3 Thomas Gleixner 2023-03-02 382 * take place, so no reset is necessary. d444c8549ebdf3 Thomas Gleixner 2023-03-02 383 */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 384 if (cur.bits != ctxt->req_state.bits) d444c8549ebdf3 Thomas Gleixner 2023-03-02 385 goto cleanup; d444c8549ebdf3 Thomas Gleixner 2023-03-02 386 d444c8549ebdf3 Thomas Gleixner 2023-03-02 387 copy_full_state(new, cur); d444c8549ebdf3 Thomas Gleixner 2023-03-02 388 new.req_prio = 0; d444c8549ebdf3 Thomas Gleixner 2023-03-02 389 } while (!cons_state_try_cmpxchg(con, CON_STATE_CUR, &cur, &new)); d444c8549ebdf3 Thomas Gleixner 2023-03-02 390 /* Reset worked. Report timeout. */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 @391 return -EBUSY; d444c8549ebdf3 Thomas Gleixner 2023-03-02 392 d444c8549ebdf3 Thomas Gleixner 2023-03-02 393 success: d444c8549ebdf3 Thomas Gleixner 2023-03-02 394 /* Store the real state */ d444c8549ebdf3 Thomas Gleixner 2023-03-02 395 copy_full_state(ctxt->state, cur); d444c8549ebdf3 Thomas Gleixner 2023-03-02 396 ctxt->hostile = false; d444c8549ebdf3 Thomas Gleixner 2023-03-02 397 err = 0; d444c8549ebdf3 Thomas Gleixner 2023-03-02 398 d444c8549ebdf3 Thomas Gleixner 2023-03-02 399 cleanup: d444c8549ebdf3 Thomas Gleixner 2023-03-02 400 cons_cleanup_handover(ctxt); d444c8549ebdf3 Thomas Gleixner 2023-03-02 401 return err; d444c8549ebdf3 Thomas Gleixner 2023-03-02 402 }
-- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests
| |