From: sashiko-bot@kernel.org
To: "Jaidev Shastri" <jaidevshastri@vt.edu>
Cc: linux-serial@vger.kernel.org
Subject: Re: [PATCH 2/3] vt: order console_blanked between blanking and unblanking
Date: Tue, 22 Sep 2026 01:38:56 +0000 [thread overview]
Message-ID: <20260922013856.E3AB01F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260921-mb-vt-v1-2-71b7990c26c1@vt.edu>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] vt: redundant barriers for console_blanked under console_lock
- [Medium] vt: smp_store_release placed before protected state updates
--
commit e185177321eb3b6f0a4a6c836f482dfda649b14a
Author: Jaidev Shastri <jaidevshastri@vt.edu>
vt: order console_blanked between blanking and unblanking
This commit adds smp_store_release() and smp_load_acquire() around
console_blanked in do_blank_screen() and do_unblank_screen() to order its
updates against blank_state and the console state.
> diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
> index 3abbd6cf9bd69..7264021672baa 100644
> --- a/drivers/tty/vt/vt.c
> +++ b/drivers/tty/vt/vt.c
> @@ -4683,7 +4683,8 @@ void do_blank_screen(int entering_gfx)
> hide_cursor(vc);
> save_screen(vc);
> vc->vc_sw->con_blank(vc, VESA_VSYNC_SUSPEND, 1);
> - console_blanked = fg_console + 1;
> + /* Pairs with the smp_load_acquire() in do_unblank_screen(). */
> + smp_store_release(&console_blanked, fg_console + 1);
[Severity: Medium]
Are these barriers necessary for synchronization between do_blank_screen() and
do_unblank_screen()?
Looking at do_blank_screen(), it expects the console lock to be held:
might_sleep();
WARN_CONSOLE_UNLOCKED();
do_unblank_screen() also expects the console lock to be held:
WARN_CONSOLE_UNLOCKED();
Since both functions are fully serialized by the console lock, wouldn't these
barriers be redundant for synchronizing between them?
Additionally, the commit message states that do_blank_screen() stores the value
after blank_state and the console state have been updated. However, the release
store is placed before blank_state and set_origin(vc) are updated here:
smp_store_release(&console_blanked, fg_console + 1);
blank_state = blank_off;
set_origin(vc);
Does this fail to provide the memory ordering guaranteed by the commit message
for concurrent lockless readers?
> blank_state = blank_off;
> set_origin(vc);
> return;
[ ... ]
> @@ -4705,7 +4707,8 @@ void do_blank_screen(int entering_gfx)
> /* In case we need to reset origin, blanking hook returns 1 */
> i = vc->vc_sw->con_blank(vc, vesa_off_interval ? VESA_VSYNC_SUSPEND :
> (vesa_blank_mode + 1), 0);
> - console_blanked = fg_console + 1;
> + /* Pairs with the smp_load_acquire() in do_unblank_screen(). */
> + smp_store_release(&console_blanked, fg_console + 1);
[Severity: Medium]
Similar to the previous case, the release store is placed before the potential
call to set_origin(vc), leaving the console state update unordered:
smp_store_release(&console_blanked, fg_console + 1);
if (i)
set_origin(vc);
Could a concurrent reader acquire console_blanked but still read stale values
for the console origin?
> if (i)
> set_origin(vc);
>
[ ... ]
> @@ -4737,7 +4740,8 @@ void do_unblank_screen(int leaving_gfx)
> WARN_CONSOLE_UNLOCKED();
>
> ignore_poke = 0;
> - if (!console_blanked)
> + /* Pairs with the smp_store_release() in do_blank_screen(). */
> + if (!smp_load_acquire(&console_blanked))
[Severity: Medium]
If the intention was to protect true lockless readers such as tioclinux():
case TIOCL_BLANKEDSCREEN:
return console_blanked;
is the protection incomplete? console_blanked is still updated with a plain
store later in do_unblank_screen():
console_blanked = 0;
Would this plain store remain exposed to those lockless readers and leave the
data race intact?
> return;
> if (!vc_cons_allocated(fg_console)) {
> /* impossible */
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260921-mb-vt-v1-0-71b7990c26c1@vt.edu?part=2
next prev parent reply other threads:[~2026-09-22 1:38 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 1:27 [PATCH 0/3] vt: make the console_lock ordering explicit for three variables Jaidev Shastri via B4 Relay
2026-09-22 1:27 ` [PATCH 1/3] vt: order the fg_console switch against vt_console_print() Jaidev Shastri via B4 Relay
2026-09-22 1:45 ` sashiko-bot
2026-09-23 12:50 ` Greg Kroah-Hartman
2026-09-22 1:27 ` [PATCH 2/3] vt: order console_blanked between blanking and unblanking Jaidev Shastri via B4 Relay
2026-09-22 1:38 ` sashiko-bot [this message]
2026-09-22 1:27 ` [PATCH 3/3] vt: order the vc_cons[] clear against console_callback() Jaidev Shastri via B4 Relay
2026-09-22 1:38 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260922013856.E3AB01F000FF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=jaidevshastri@vt.edu \
--cc=linux-serial@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox