From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753720AbdDJOUl (ORCPT ); Mon, 10 Apr 2017 10:20:41 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:36520 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753633AbdDJOUj (ORCPT ); Mon, 10 Apr 2017 10:20:39 -0400 Subject: Re: [Xen-devel] [PATCH 2/2] xen, input: repair xen-kbdfront resolution setting via xenstore To: Juergen Gross , linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, linux-input@vger.kernel.org References: <20170321171905.31584-1-jgross@suse.com> <20170321171905.31584-3-jgross@suse.com> Cc: dmitry.torokhov@gmail.com, stable@vger.kernel.org From: Oleksandr Andrushchenko Message-ID: <7ccb928b-a88e-1495-b92d-94642d6a5501@gmail.com> Date: Mon, 10 Apr 2017 17:20:36 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170321171905.31584-3-jgross@suse.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/21/2017 07:19 PM, Juergen Gross wrote: > Setting the pointing device resolution via Xenstore isn't working > reliably: in case XenbusStateInitWait has been missed the resolution > settings won't be read. Correct this. > > Cc: stable@vger.kernel.org > Signed-off-by: Juergen Gross > --- > drivers/input/misc/xen-kbdfront.c | 32 ++++++++++++++++++++------------ > 1 file changed, 20 insertions(+), 12 deletions(-) > > diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c > index 2df5678..7585fa4 100644 > --- a/drivers/input/misc/xen-kbdfront.c > +++ b/drivers/input/misc/xen-kbdfront.c > @@ -312,11 +312,27 @@ static void xenkbd_disconnect_backend(struct xenkbd_info *info) > info->gref = -1; > } > > +static void xenkbd_set_connected(struct xenbus_device *dev) > +{ > + struct xenkbd_info *info = dev_get_drvdata(&dev->dev); > + int ret; > + > + if (xenbus_read_unsigned(info->xbdev->otherend, > + "feature-abs-pointer", 0)) { > + ret = xenbus_write(XBT_NIL, info->xbdev->nodename, > + "request-abs-pointer", "1"); > + if (ret) > + pr_warn("xenkbd: can't request abs-pointer"); > + } > + > + xenbus_switch_state(dev, XenbusStateConnected); > +} > + > static void xenkbd_backend_changed(struct xenbus_device *dev, > enum xenbus_state backend_state) > { > struct xenkbd_info *info = dev_get_drvdata(&dev->dev); > - int ret, val; > + int val; > > switch (backend_state) { > case XenbusStateInitialising: > @@ -327,16 +343,7 @@ static void xenkbd_backend_changed(struct xenbus_device *dev, > break; > > case XenbusStateInitWait: > -InitWait: > - if (xenbus_read_unsigned(info->xbdev->otherend, > - "feature-abs-pointer", 0)) { > - ret = xenbus_write(XBT_NIL, info->xbdev->nodename, > - "request-abs-pointer", "1"); > - if (ret) > - pr_warning("xenkbd: can't request abs-pointer"); > - } > - > - xenbus_switch_state(dev, XenbusStateConnected); > + xenkbd_set_connected(dev); > break; > > case XenbusStateConnected: > @@ -346,7 +353,8 @@ static void xenkbd_backend_changed(struct xenbus_device *dev, > * get Connected twice here. > */ > if (dev->state != XenbusStateConnected) > - goto InitWait; /* no InitWait seen yet, fudge it */ > + /* No InitWait seen yet, fudge it. */ > + xenkbd_set_connected(dev); > > /* Set input abs params to match backend screen res */ > if (xenbus_scanf(XBT_NIL, info->xbdev->otherend, Reviewed-by: Oleksandr Andrushchenko