From: Peter Seiderer <ps.report@gmx.net>
To: Christian Heusel <christian@heusel.eu>
Cc: "Ned T. Crigler" <crigler@gmail.com>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
regressions@lists.linux.dev, Jeff LaBundy <jeff@labundy.com>,
Benjamin Tissoires <bentiss@kernel.org>
Subject: Re: [REGRESSION] disabling and re-enabling magic sysrq fails after kernel 6.11
Date: Sun, 27 Oct 2024 16:37:44 +0100 [thread overview]
Message-ID: <20241027163744.2d396c61@gmx.net> (raw)
In-Reply-To: <69b6119c-3c3a-406f-9375-3e55fba9b732@heusel.eu>
Hello Ned, Christian, *,
On Sun, 27 Oct 2024 15:06:09 +0100, Christian Heusel <christian@heusel.eu> wrote:
> On 24/10/26 07:15PM, Ned T. Crigler wrote:
> > Hi,
>
> Hey Ned,
>
> > It looks like starting with kernel 6.11, disabling and re-enabling
> > magic
> > sysrq fails with these errors in dmesg:
> >
> > kernel: input: input_handler_check_methods: only one event processing
> > method can be defined (sysrq)
> > kernel: sysrq: Failed to register input handler, error -22
> >
> > after doing:
> >
> > # echo 0 > /proc/sys/kernel/sysrq
> > # echo 438 > /proc/sys/kernel/sysrq
> > # echo 0 > /proc/sys/kernel/sysrq
> > # echo 438 > /proc/sys/kernel/sysrq
> > # echo 0 > /proc/sys/kernel/sysrq
> > # echo 438 > /proc/sys/kernel/sysrq
>
> I have found that this issue is also present in the latest mainline
> release and bisected it to the following commit:
>
> d469647bafd9 ("Input: simplify event handling logic")
>
After the mentioned commit a call sysrq_register_handler() -->
input_register_handler(&sysrq_handler) with sysrq_handler.filter set
will result in sysrq_handler.events set to input_handler_events_filter,
see drivers/input/input.c (line 2607 to 2608):
2596 int input_register_handler(struct input_handler *handler)
2597 {
2598 struct input_dev *dev;
2599 int error;
2600
2601 error = input_handler_check_methods(handler);
2602 if (error)
2603 return error;
2604
2605 INIT_LIST_HEAD(&handler->h_list);
2606
2607 if (handler->filter)
2608 handler->events = input_handler_events_filter;
2609 else if (handler->event)
2610 handler->events = input_handler_events_default;
2611 else if (!handler->events)
2612 handler->events = input_handler_events_null;
So the second call will fail at the check 'input_handler_check_methods(handler)'
which only allows one method to be set, see drivers/input/input.c:
2517 static int input_handler_check_methods(const struct input_handler *handler)
2518 {
2519 int count = 0;
2520
2521 if (handler->filter)
2522 count++;
2523 if (handler->events)
2524 count++;
2525 if (handler->event)
2526 count++;
2527
2528 if (count > 1) {
2529 pr_err("%s: only one event processing method can be defined (%s)\n",
2530 __func__, handler->name);
2531 return -EINVAL;
2532 }
2533
2534 return 0;
2535 }
A quick fix/hack for the sysrq case:
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
@@ -1045,7 +1045,7 @@ static inline void sysrq_register_handler(void)
int error;
sysrq_of_get_keyreset_config();
-
+ sysrq_handler.events = NULL;
error = input_register_handler(&sysrq_handler);
if (error)
pr_err("Failed to register input handler, error %d", error);
lines 1-13/13 (END)
Regards,
Peter
> The additional authors / maintainers have been added to the recipients
> lists.
>
> I hope I didn't overlook any pending fixes.
>
> > --
> > Ned T. Crigler
>
> Cheers,
> Chris
next prev parent reply other threads:[~2024-10-27 15:37 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-27 2:15 [REGRESSION] disabling and re-enabling magic sysrq fails after kernel 6.11 Ned T. Crigler
2024-10-27 14:06 ` Christian Heusel
2024-10-27 15:37 ` Peter Seiderer [this message]
2024-10-27 17:02 ` Ned T. Crigler
2024-10-28 5:30 ` Dmitry Torokhov
2024-10-28 8:38 ` Peter Seiderer
2024-10-29 0:58 ` Ned T. Crigler
2024-11-04 12:06 ` Christian Heusel
2024-11-05 5:43 ` Dmitry Torokhov
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=20241027163744.2d396c61@gmx.net \
--to=ps.report@gmx.net \
--cc=bentiss@kernel.org \
--cc=christian@heusel.eu \
--cc=crigler@gmail.com \
--cc=dmitry.torokhov@gmail.com \
--cc=jeff@labundy.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=regressions@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;
as well as URLs for NNTP newsgroup(s).