diff mbox

[Xen-devel] pvgrub: ignore NUL

Message ID alpine.DEB.2.02.1411061034440.22875@kaball.uk.xensource.com
State New
Headers show

Commit Message

Stefano Stabellini Nov. 6, 2014, 10:41 a.m. UTC
When using pvgrub in graphical mode with vnc, the grub timeout doesn't
work: the countdown doesn't even start. With a serial terminal the
problem doesn't occur and the countdown works as expected.

It turns out that the problem is that when using a graphical terminal,
checkkey () returns 0 instead of -1 when there is no activity on the
mouse or keyboard. As a consequence grub thinks that the user typed
something and interrupts the count down.

To fix the issue simply ignore keystrokes returning 0, that is the NUL
character anyway. Add a patch to grub.patches to do that.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Tested-by: Steven Haigh <netwiz@crc.id.au>

Comments

Samuel Thibault Nov. 6, 2014, 11:39 a.m. UTC | #1
Stefano Stabellini, le Thu 06 Nov 2014 10:41:28 +0000, a écrit :
> When using pvgrub in graphical mode with vnc, the grub timeout doesn't
> work: the countdown doesn't even start. With a serial terminal the
> problem doesn't occur and the countdown works as expected.
> 
> It turns out that the problem is that when using a graphical terminal,
> checkkey () returns 0 instead of -1 when there is no activity on the
> mouse or keyboard. As a consequence grub thinks that the user typed
> something and interrupts the count down.
> 
> To fix the issue simply ignore keystrokes returning 0, that is the NUL
> character anyway. Add a patch to grub.patches to do that.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Tested-by: Steven Haigh <netwiz@crc.id.au>

Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

> 
> diff --git a/stubdom/grub.patches/11graphics-keyboard.diff b/stubdom/grub.patches/11graphics-keyboard.diff
> new file mode 100644
> index 0000000..fe17b20
> --- /dev/null
> +++ b/stubdom/grub.patches/11graphics-keyboard.diff
> @@ -0,0 +1,13 @@
> +diff --git a/stage2/stage2.c b/stage2/stage2.c
> +index 9d9fcc3..8353a3b 100644
> +--- a/stage2/stage2.c
> ++++ b/stage2/stage2.c
> +@@ -395,7 +395,7 @@ restart:
> + 	 pressed.  
> + 	 This avoids polling (relevant in the grub-shell and later on
> + 	 in grub if interrupt driven I/O is done).  */
> +-      if (checkkey () >= 0 || grub_timeout < 0)
> ++      if (checkkey () > 0 || grub_timeout < 0)
> + 	{
> + 	  /* Key was pressed, show which entry is selected before GETKEY,
> + 	     since we're comming in here also on GRUB_TIMEOUT == -1 and
>
Stefano Stabellini Nov. 6, 2014, 3:43 p.m. UTC | #2
On Thu, 6 Nov 2014, Samuel Thibault wrote:
> Stefano Stabellini, le Thu 06 Nov 2014 10:41:28 +0000, a écrit :
> > When using pvgrub in graphical mode with vnc, the grub timeout doesn't
> > work: the countdown doesn't even start. With a serial terminal the
> > problem doesn't occur and the countdown works as expected.
> > 
> > It turns out that the problem is that when using a graphical terminal,
> > checkkey () returns 0 instead of -1 when there is no activity on the
> > mouse or keyboard. As a consequence grub thinks that the user typed
> > something and interrupts the count down.
> > 
> > To fix the issue simply ignore keystrokes returning 0, that is the NUL
> > character anyway. Add a patch to grub.patches to do that.
> > 
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > Tested-by: Steven Haigh <netwiz@crc.id.au>
> 
> Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

This being a bug fix, I guess it doesn't actually need a release
exception to go in?


> > diff --git a/stubdom/grub.patches/11graphics-keyboard.diff b/stubdom/grub.patches/11graphics-keyboard.diff
> > new file mode 100644
> > index 0000000..fe17b20
> > --- /dev/null
> > +++ b/stubdom/grub.patches/11graphics-keyboard.diff
> > @@ -0,0 +1,13 @@
> > +diff --git a/stage2/stage2.c b/stage2/stage2.c
> > +index 9d9fcc3..8353a3b 100644
> > +--- a/stage2/stage2.c
> > ++++ b/stage2/stage2.c
> > +@@ -395,7 +395,7 @@ restart:
> > + 	 pressed.  
> > + 	 This avoids polling (relevant in the grub-shell and later on
> > + 	 in grub if interrupt driven I/O is done).  */
> > +-      if (checkkey () >= 0 || grub_timeout < 0)
> > ++      if (checkkey () > 0 || grub_timeout < 0)
> > + 	{
> > + 	  /* Key was pressed, show which entry is selected before GETKEY,
> > + 	     since we're comming in here also on GRUB_TIMEOUT == -1 and
> > 
> 
> -- 
> Samuel
> "And the next time you consider complaining that running Lucid Emacs
> 19.05 via NFS from a remote Linux machine in Paraguay doesn't seem to
> get the background colors right, you'll know who to thank."
> (By Matt Welsh)
>
Konrad Rzeszutek Wilk Nov. 6, 2014, 7:36 p.m. UTC | #3
On Thu, Nov 06, 2014 at 03:43:42PM +0000, Stefano Stabellini wrote:
> On Thu, 6 Nov 2014, Samuel Thibault wrote:
> > Stefano Stabellini, le Thu 06 Nov 2014 10:41:28 +0000, a écrit :
> > > When using pvgrub in graphical mode with vnc, the grub timeout doesn't
> > > work: the countdown doesn't even start. With a serial terminal the
> > > problem doesn't occur and the countdown works as expected.
> > > 
> > > It turns out that the problem is that when using a graphical terminal,
> > > checkkey () returns 0 instead of -1 when there is no activity on the
> > > mouse or keyboard. As a consequence grub thinks that the user typed
> > > something and interrupts the count down.
> > > 
> > > To fix the issue simply ignore keystrokes returning 0, that is the NUL
> > > character anyway. Add a patch to grub.patches to do that.
> > > 
> > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > > Tested-by: Steven Haigh <netwiz@crc.id.au>
> > 
> > Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
> 
> This being a bug fix, I guess it doesn't actually need a release
> exception to go in?

It should - but it depends on the on how risk averse the maintainer
of the particular subsystem is.

Regardless I believe this should go in. But more importantly - can
this also go upstream?
> 
> 
> > > diff --git a/stubdom/grub.patches/11graphics-keyboard.diff b/stubdom/grub.patches/11graphics-keyboard.diff
> > > new file mode 100644
> > > index 0000000..fe17b20
> > > --- /dev/null
> > > +++ b/stubdom/grub.patches/11graphics-keyboard.diff
> > > @@ -0,0 +1,13 @@
> > > +diff --git a/stage2/stage2.c b/stage2/stage2.c
> > > +index 9d9fcc3..8353a3b 100644
> > > +--- a/stage2/stage2.c
> > > ++++ b/stage2/stage2.c
> > > +@@ -395,7 +395,7 @@ restart:
> > > + 	 pressed.  
> > > + 	 This avoids polling (relevant in the grub-shell and later on
> > > + 	 in grub if interrupt driven I/O is done).  */
> > > +-      if (checkkey () >= 0 || grub_timeout < 0)
> > > ++      if (checkkey () > 0 || grub_timeout < 0)
> > > + 	{
> > > + 	  /* Key was pressed, show which entry is selected before GETKEY,
> > > + 	     since we're comming in here also on GRUB_TIMEOUT == -1 and
> > > 
> > 
> > -- 
> > Samuel
> > "And the next time you consider complaining that running Lucid Emacs
> > 19.05 via NFS from a remote Linux machine in Paraguay doesn't seem to
> > get the background colors right, you'll know who to thank."
> > (By Matt Welsh)
> >
Samuel Thibault Nov. 6, 2014, 11:13 p.m. UTC | #4
Konrad Rzeszutek Wilk, le Thu 06 Nov 2014 14:36:11 -0500, a écrit :
> Regardless I believe this should go in. But more importantly - can
> this also go upstream?

There is no upstream for grub1 any more.

Samuel
Ian Campbell Nov. 10, 2014, 12:20 p.m. UTC | #5
On Thu, 2014-11-06 at 12:39 +0100, Samuel Thibault wrote:
> Stefano Stabellini, le Thu 06 Nov 2014 10:41:28 +0000, a écrit :
> > When using pvgrub in graphical mode with vnc, the grub timeout doesn't
> > work: the countdown doesn't even start. With a serial terminal the
> > problem doesn't occur and the countdown works as expected.
> > 
> > It turns out that the problem is that when using a graphical terminal,
> > checkkey () returns 0 instead of -1 when there is no activity on the
> > mouse or keyboard. As a consequence grub thinks that the user typed
> > something and interrupts the count down.
> > 
> > To fix the issue simply ignore keystrokes returning 0, that is the NUL
> > character anyway. Add a patch to grub.patches to do that.
> > 
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > Tested-by: Steven Haigh <netwiz@crc.id.au>
> 
> Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

I think the conclusion of the subthread was a release ack so applied,
thanks.
Ian Campbell Nov. 10, 2014, 12:21 p.m. UTC | #6
On Thu, 2014-11-06 at 12:39 +0100, Samuel Thibault wrote:
> Stefano Stabellini, le Thu 06 Nov 2014 10:41:28 +0000, a écrit :
> > When using pvgrub in graphical mode with vnc, the grub timeout doesn't
> > work: the countdown doesn't even start. With a serial terminal the
> > problem doesn't occur and the countdown works as expected.
> > 
> > It turns out that the problem is that when using a graphical terminal,
> > checkkey () returns 0 instead of -1 when there is no activity on the
> > mouse or keyboard. As a consequence grub thinks that the user typed
> > something and interrupts the count down.
> > 
> > To fix the issue simply ignore keystrokes returning 0, that is the NUL
> > character anyway. Add a patch to grub.patches to do that.
> > 
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > Tested-by: Steven Haigh <netwiz@crc.id.au>
> 
> Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

I think the conclusion of the subthread was a release ack so applied,
thanks.
diff mbox

Patch

diff --git a/stubdom/grub.patches/11graphics-keyboard.diff b/stubdom/grub.patches/11graphics-keyboard.diff
new file mode 100644
index 0000000..fe17b20
--- /dev/null
+++ b/stubdom/grub.patches/11graphics-keyboard.diff
@@ -0,0 +1,13 @@ 
+diff --git a/stage2/stage2.c b/stage2/stage2.c
+index 9d9fcc3..8353a3b 100644
+--- a/stage2/stage2.c
++++ b/stage2/stage2.c
+@@ -395,7 +395,7 @@ restart:
+ 	 pressed.  
+ 	 This avoids polling (relevant in the grub-shell and later on
+ 	 in grub if interrupt driven I/O is done).  */
+-      if (checkkey () >= 0 || grub_timeout < 0)
++      if (checkkey () > 0 || grub_timeout < 0)
+ 	{
+ 	  /* Key was pressed, show which entry is selected before GETKEY,
+ 	     since we're comming in here also on GRUB_TIMEOUT == -1 and