diff mbox

[v2,2/2] xen,input: repair xen-kbdfront resolution setting via xenstore

Message ID 20170411085028.6750-3-jgross@suse.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jürgen Groß April 11, 2017, 8:50 a.m. UTC
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.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
---
 drivers/input/misc/xen-kbdfront.c | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

Comments

Oleksandr Andrushchenko April 11, 2017, 9 a.m. UTC | #1
Hi, Juergen,

could you please make one more patch in the series:

the code that you fix in this patch is ok, but most

of the functionality of the xenkbd_set_connected

is still useless: feature-abs-pointer/request-abs-pointer

negotiation has only meaning at probe time, when we are

configuring input device:

     if (abs) {
         __set_bit(EV_ABS, ptr->evbit);
         input_set_abs_params(ptr, ABS_X, 0, XENFB_WIDTH, 0, 0);
         input_set_abs_params(ptr, ABS_Y, 0, XENFB_HEIGHT, 0, 0);
     } else {
         input_set_capability(ptr, EV_REL, REL_X);
         input_set_capability(ptr, EV_REL, REL_Y);
     }
Once the input device is configured and registered (probe done)

we do not touch/re-configure that input device anymore,

regardless of the setting negotiation at xenkbd_set_connected

time. Thus, this code is not needed and can be cleaned out.

What your patch actually fixes is the fact that

"xenbus_switch_state(dev, XenbusStateConnected);" was not called,

so this is the only line needed.

Thank you,

Oleksandr


On 04/11/2017 11:50 AM, 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.
>
> Signed-off-by: Juergen Gross <jgross@suse.com>
> Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> ---
>   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 90e7981a7768..fc28f59dfa93 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,

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jürgen Groß April 11, 2017, 9:14 a.m. UTC | #2
On 11/04/17 11:00, Oleksandr Andrushchenko wrote:
> Hi, Juergen,
> 
> could you please make one more patch in the series:
> 
> the code that you fix in this patch is ok, but most
> 
> of the functionality of the xenkbd_set_connected
> 
> is still useless: feature-abs-pointer/request-abs-pointer
> 
> negotiation has only meaning at probe time, when we are
> 
> configuring input device:
> 
>     if (abs) {
>         __set_bit(EV_ABS, ptr->evbit);
>         input_set_abs_params(ptr, ABS_X, 0, XENFB_WIDTH, 0, 0);
>         input_set_abs_params(ptr, ABS_Y, 0, XENFB_HEIGHT, 0, 0);
>     } else {
>         input_set_capability(ptr, EV_REL, REL_X);
>         input_set_capability(ptr, EV_REL, REL_Y);
>     }
> Once the input device is configured and registered (probe done)
> 
> we do not touch/re-configure that input device anymore,
> 
> regardless of the setting negotiation at xenkbd_set_connected
> 
> time. Thus, this code is not needed and can be cleaned out.
> 
> What your patch actually fixes is the fact that
> 
> "xenbus_switch_state(dev, XenbusStateConnected);" was not called,
> 
> so this is the only line needed.

This makes sense.

I'll modify patch2 according to your suggestion instead of adding
another patch removing most of the stuff added by patch 2.


Juergen
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
index 90e7981a7768..fc28f59dfa93 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,