All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
	linux-hyperv@vger.kernel.org
Subject: Re: [PATCH] Input: serio - make write method mandatory
Date: Tue, 20 Jul 2021 18:55:42 -0700	[thread overview]
Message-ID: <YPd+nl30LwKWpEZa@Ryzen-9-3900X.localdomain> (raw)
In-Reply-To: <YFgUxG/TljMuVeQ3@google.com>

On Sun, Mar 21, 2021 at 08:53:40PM -0700, Dmitry Torokhov wrote:
> Given that all serio drivers except one implement write() method
> let's make it mandatory to avoid testing for its presence whenever
> we attempt to use it.
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
>  drivers/input/serio/ams_delta_serio.c | 6 ++++++
>  drivers/input/serio/serio.c           | 5 +++++
>  include/linux/serio.h                 | 5 +----
>  3 files changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/input/serio/ams_delta_serio.c b/drivers/input/serio/ams_delta_serio.c
> index 1c0be299f179..a1c314897951 100644
> --- a/drivers/input/serio/ams_delta_serio.c
> +++ b/drivers/input/serio/ams_delta_serio.c
> @@ -89,6 +89,11 @@ static irqreturn_t ams_delta_serio_interrupt(int irq, void *dev_id)
>  	return IRQ_HANDLED;
>  }
>  
> +static int ams_delta_serio_write(struct serio *serio, u8 data)
> +{
> +	return -EINVAL;
> +}
> +
>  static int ams_delta_serio_open(struct serio *serio)
>  {
>  	struct ams_delta_serio *priv = serio->port_data;
> @@ -157,6 +162,7 @@ static int ams_delta_serio_init(struct platform_device *pdev)
>  	priv->serio = serio;
>  
>  	serio->id.type = SERIO_8042;
> +	serio->write = ams_delta_serio_write;
>  	serio->open = ams_delta_serio_open;
>  	serio->close = ams_delta_serio_close;
>  	strlcpy(serio->name, "AMS DELTA keyboard adapter", sizeof(serio->name));
> diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
> index 29f491082926..8d229a11bb6b 100644
> --- a/drivers/input/serio/serio.c
> +++ b/drivers/input/serio/serio.c
> @@ -694,6 +694,11 @@ EXPORT_SYMBOL(serio_reconnect);
>   */
>  void __serio_register_port(struct serio *serio, struct module *owner)
>  {
> +	if (!serio->write) {
> +		pr_err("%s: refusing to register %s without write method\n",
> +		       __func__, serio->name);
> +		return;
> +	}
>  	serio_init_port(serio);
>  	serio_queue_event(serio, owner, SERIO_REGISTER_PORT);
>  }
> diff --git a/include/linux/serio.h b/include/linux/serio.h
> index 6c27d413da92..075f1b8d76fa 100644
> --- a/include/linux/serio.h
> +++ b/include/linux/serio.h
> @@ -121,10 +121,7 @@ void serio_unregister_driver(struct serio_driver *drv);
>  
>  static inline int serio_write(struct serio *serio, unsigned char data)
>  {
> -	if (serio->write)
> -		return serio->write(serio, data);
> -	else
> -		return -1;
> +	return serio->write(serio, data);
>  }
>  
>  static inline void serio_drv_write_wakeup(struct serio *serio)
> -- 
> 2.31.0.rc2.261.g7f71774620-goog
> 
> 
> -- 
> Dmitry

This patch as commit 81c7c0a350bf ("Input: serio - make write method
mandatory") in -next breaks input for my Hyper-V VM, which prevents me
from logging in. I attempted to do something like the following (-1 or
-EINVAL) which should be equivalent but it does not resolve the issue.

Cheers,
Nathan

diff --git a/drivers/input/serio/hyperv-keyboard.c b/drivers/input/serio/hyperv-keyboard.c
index 1a7b72a9016d..d3eee2d4c327 100644
--- a/drivers/input/serio/hyperv-keyboard.c
+++ b/drivers/input/serio/hyperv-keyboard.c
@@ -311,6 +311,11 @@ static void hv_kbd_stop(struct serio *serio)
        spin_unlock_irqrestore(&kbd_dev->lock, flags);
 }

+static int hv_kbd_write(struct serio *serio, u8 data)
+{
+       return -1;
+}
+
 static int hv_kbd_probe(struct hv_device *hv_dev,
                        const struct hv_vmbus_device_id *dev_id)
 {
@@ -341,6 +346,7 @@ static int hv_kbd_probe(struct hv_device *hv_dev,

        hv_serio->start = hv_kbd_start;
        hv_serio->stop = hv_kbd_stop;
+       hv_serio->write = hv_kbd_write;

        error = vmbus_open(hv_dev->channel,
                           KBD_VSC_SEND_RING_BUFFER_SIZE,


  reply	other threads:[~2021-07-21  1:56 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-22  3:53 [PATCH] Input: serio - make write method mandatory Dmitry Torokhov
2021-07-21  1:55 ` Nathan Chancellor [this message]
2021-07-21  3:19   ` Michael Kelley
2021-07-21  4:11     ` 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=YPd+nl30LwKWpEZa@Ryzen-9-3900X.localdomain \
    --to=nathan@kernel.org \
    --cc=decui@microsoft.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=haiyangz@microsoft.com \
    --cc=kys@microsoft.com \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sthemmin@microsoft.com \
    --cc=wei.liu@kernel.org \
    /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 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.