]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Input: gscps2 - advance receive buffer write index
authorXu Rao <raoxu@uniontech.com>
Wed, 24 Jun 2026 09:47:39 +0000 (17:47 +0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sat, 27 Jun 2026 05:42:56 +0000 (22:42 -0700)
Commit 44f920069911 ("Input: gscps2 - use guard notation when
acquiring spinlock") moved the receive loop into gscps2_read_data()
and gscps2_report_data().

While moving the code, it preserved the writes to
buffer[ps2port->append], but omitted the following producer index
update from the original loop:

ps2port->append = (ps2port->append + 1) & BUFFER_SIZE;

As a result, append never advances. Since gscps2_report_data() only
reports bytes while act != append, the receive buffer always appears
empty and no keyboard or mouse data reaches the serio core.

Restore the omitted index update.

Fixes: 44f920069911 ("Input: gscps2 - use guard notation when acquiring spinlock")
Cc: stable@vger.kernel.org # 6.13+
Signed-off-by: Xu Rao <raoxu@uniontech.com>
Link: https://patch.msgid.link/460B5655BA580C60+20260624094739.850306-1-raoxu@uniontech.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/serio/gscps2.c

index 22b2f57fd91f5a00fdce646169e3000deca467f1..bf9b993f5733084171320275309e221fa6c8e87a 100644 (file)
@@ -219,6 +219,7 @@ static void gscps2_read_data(struct gscps2port *ps2port)
                ps2port->buffer[ps2port->append].str = status;
                ps2port->buffer[ps2port->append].data =
                                gscps2_readb_input(ps2port->addr);
+               ps2port->append = (ps2port->append + 1) & BUFFER_SIZE;
        } while (true);
 }