Skip to contentSkip to conversation

console: Improve TFTP booting performance

PATCH Superseded Jim Lin 2 participants 2 messages Mar 21, 2013

v2 of 9 Superseded Latest is v9 →

lore
Share & tools
lore

Jim Lin

author
#0 lore raw

PATCH v2 1/1 console: Improve TFTP booting performance

TFTP booting is observed a little bit slow, especially when a USB keyboard is installed.
The fix is to check whether Ctrl-C key is pressed every CONFIG_CTRLC_POLL_S second.

---
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.

 common/console.c   |   16 ++++++++++++++++
 doc/README.console |   10 ++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)
common/console.c +16 -0
index bf73178..b09e129 100644
@@ -521,12 +521,28 @@ int vprintf(const char *fmt, va_list args)
 	return i;
 }
 
+#ifdef CONFIG_CTRLC_POLL_S
+/*
+ * Process Ctrl-C every CONFIG_CTRLC_POLL_S second(s) to improve performance
+ * (like TFTP boot) when interlaced with other tasks like USB KB
+ * polling.
+ */
+static unsigned long ctrlc_ts = (CONFIG_CTRLC_POLL_S * CONFIG_SYS_HZ);
+#endif
+
 /* test if ctrl-c was pressed */
 static int ctrlc_disabled = 0;	/* see disable_ctrl() */
 static int ctrlc_was_pressed = 0;
 int ctrlc(void)
 {
 	if (!ctrlc_disabled && gd->have_console) {
+#ifdef CONFIG_CTRLC_POLL_S
+		if (get_timer(ctrlc_ts) < (CONFIG_CTRLC_POLL_S
+				* CONFIG_SYS_HZ))
+			return 0;
+		else
+			ctrlc_ts = get_timer(0);
+#endif
 		if (tstc()) {
 			switch (getc()) {
 			case 0x03:		/* ^C - Control C */
doc/README.console +10 -0
index b353f9f..6b38b8c 100644
@@ -116,3 +116,13 @@ CREDITS for other contact informations):
 
 - MPC823FADS with AD7176 on a PAL TV (YCbYCr)	- arsenio at tin.it
 - GENIETV    with AD7177 on a PAL TV (YCbYCr)	- [email protected]
+
+Config Switches:
+----------------
+CONFIG_CTRLC_POLL_S	define a value to check whether Ctrl-C is pressed
+			every defined second(s). This is to improve TFTP
+			booting if USB KB is installed and polling is used.
+			For example:
+			Define the following in configuration header file
+			#define CONFIG_CTRLC_POLL_S	1
+			for console to check Ctrl-C every second.
Signature · 1 line
1.7.7
#1 lore raw

PATCH v2 1/1 console: Improve TFTP booting performance

Dear Jim Lin,

Quoted 13 lines · In message <[email protected]> you wrote:

TFTP booting is observed a little bit slow, especially when a USB keyboard is installed.
The fix is to check whether Ctrl-C key is pressed every CONFIG_CTRLC_POLL_S second.

---
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.

Quoted 3 lines
 common/console.c   |   16 ++++++++++++++++
 doc/README.console |   10 ++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)

NAK.

You modify not only the TFTP related code, but the general behaviour everywhere. For you, and for TFTP operation, it might be sufficient to check for ^C only every few seconds, but in general this is not the case.

You write your problem comes from using a USB keyboard, where tstc() appears to be a slow operation.

In this case it would be best to fix the problem at the root, i. e. improve the performance of tstc() so it doesn't hurt any more.

What you are doing here is just paperingover a problem which may (and will) hit you in other places as well. Do not do that. Fix the root problem.

Best regards,

Wolfgang Denk

Signature · 6 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
As usual, this being a 1.3.x release, I haven't  even  compiled  this
kernel yet. So if it works, you should be doubly impressed.
      - Linus Torvalds in <[email protected]>