[U-Boot] [PATCH v5 1/1] NET: Improve TFTP booting performance when CONFIG_USB_KEYBOARD

Jim Lin jilin at nvidia.com
Wed Jul 10 05:48:43 CEST 2013


On Tue, 2013-07-09 at 06:17 +0800, Joe Hershberger wrote:
> Hi Jim and Stephen,
> 
> On Wed, Jul 3, 2013 at 11:01 PM, Jim Lin <jilin at nvidia.com> wrote:
> > TFTP booting is slow when a USB keyboard is installed and
> > CONFIG_USB_KEYBOARD is defined.
> > This fix is to change Ctrl-C polling to every second when NET transfer
> > is running.
> >
> > Signed-off-by: Jim Lin <jilin at nvidia.com>
> > ---
> > Changes in v2:
> >  1. Change configuration name from CONFIG_CTRLC_POLL_MS to CONFIG_CTRLC_POLL_S.
> >  2. New code will be executed only when CONFIG_CTRLC_POLL_S is defined in
> >     configuration header file.
> >  3. Add description in README.console.
> > Changes in v3:
> >  1. Move changes to common/usb_kbd.c and doc/README.usb
> >  2. Rename config setting to CONFIG_USBKB_TESTC_PERIOD.
> >  3. Remove slow response on USB-keyboard input when TFTP boot is not running.
> > Changes in v4:
> >  1. Remove changes in doc/README.usb, common/usb_kbd.c and
> >     CONFIG_USBKB_TESTC_PERIOD
> >  2. Modify net/net.c
> > Changes in v5:
> >  1. Change variable name to ctrlc_t_start.
> >  2. Use two calls of get_timer(0) to get time gap.
> >
> >  net/net.c |   22 ++++++++++++++++++++++
> >  1 files changed, 22 insertions(+), 0 deletions(-)
> >
> > diff --git a/net/net.c b/net/net.c
> > index df94789..ec88b02 100644
> > --- a/net/net.c
> > +++ b/net/net.c
> > @@ -322,6 +322,11 @@ int NetLoop(enum proto_t protocol)
> >  {
> >         bd_t *bd = gd->bd;
> >         int ret = -1;
> > +#ifdef CONFIG_USB_KEYBOARD
> > +       unsigned long ctrlc_t_start;
> > +       unsigned long ctrlc_t;
> > +       int ctrlc_result;
> > +#endif
> >
> >         NetRestarted = 0;
> >         NetDevExists = 0;
> > @@ -472,7 +477,24 @@ restart:
> >                 /*
> >                  *      Abort if ctrl-c was pressed.
> >                  */
> > +#ifdef CONFIG_USB_KEYBOARD
> 
> It seems this is the result of the USB Keyboard behavior.  Why is it a
> good idea to litter the TFTP code with this unrelated code?  It seems

So far this is the best place to resolve this issue.

> the very same check could be down inside of ctrlc() somewhere that is
> at least console I/O related.  Besides, having it in a common place
> will allow any operation that accesses the keyboard to benefit from
> not hanging up on slow USB stuff.
> 
> It also seems that it should depend on what the actual source of the
> stdin is, not just if you compiled in CONFIG_USB_KEYBOARD support.

This issue only goes with USB keyboard installed and CONFIG_USB_KEYBOARD
defined. Therefore compiled in CONFIG_USB_KEYBOARD support.
Non-usb-keyboard doesn't have such issue.

> Again, something that belongs in the console source.
> 
> > +               /*
> > +                * Reduce ctrl-c checking to 1 second once
> > +                * to improve TFTP boot performance.
> > +                */
> > +               if (ctrlc_t_start > get_timer(0))
> > +                       ctrlc_t_start = get_timer(0);
> > +               ctrlc_t = get_timer(0) - ctrlc_t_start;
> 
> Why is it preferable to do the subtraction yourself instead of letting
> get_timer() do it?  I.e. what compelled did you change this from v4?

As Wolfgang Denk said in another mail, 
"An exception is "arch/arm/cpu/sa1100/timer.c" which does not respect
the "base" argument at all, i. e. which is broken.
".

So this v5 patch uses get_timer(0), like other code did in this file.

> 
> > +               if (ctrlc_t > CONFIG_SYS_HZ) {
> 
> Why is hard-coding it to 1 second a good idea?
>  Is that really how unresponsive it has to be to not
>  significantly impact TFTP boot time?

Do you want me to add a CONFIG setting to have this time adjustable?
I was thinking "1 second" checking on Ctrl-C should be fine while TFT
boot is running.

--
nvpublic



More information about the U-Boot mailing list