From: Daniel Thompson <daniel.thompson@linaro.org>
To: Douglas Anderson <dianders@chromium.org>,
Jason Wessel <jason.wessel@windriver.com>
Cc: Daniel Thompson <daniel.thompson@linaro.org>,
kgdb-bugreport@lists.sourceforge.net,
linux-kernel@vger.kernel.org, patches@linaro.org
Subject: [PATCH v4 2/5] kdb: Simplify code to fetch characters from console
Date: Fri, 25 Oct 2019 08:33:25 +0100 [thread overview]
Message-ID: <20191025073328.643-3-daniel.thompson@linaro.org> (raw)
In-Reply-To: <20191025073328.643-1-daniel.thompson@linaro.org>
Currently kdb_read_get_key() contains complex control flow that, on
close inspection, turns out to be unnecessary. In particular:
1. It is impossible to enter the branch conditioned on (escape_delay == 1)
except when the loop enters with (escape_delay == 2) allowing us to
combine the branches.
2. Most of the code conditioned on (escape_delay == 2) simply modifies
local data and then breaks out of the loop causing the function to
return escape_data[0].
3. Based on #2 there is not actually any need to ever explicitly set
escape_delay to 2 because we it is much simpler to directly return
escape_data[0] instead.
4. escape_data[0] is, for all but one exit path, known to be '\e'.
Simplify the code based on these observations.
There is a subtle (and harmless) change of behaviour resulting from this
simplification: instead of letting the escape timeout after ~1998
milliseconds we now timeout after ~2000 milliseconds
Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
---
kernel/debug/kdb/kdb_io.c | 38 ++++++++++++++------------------------
1 file changed, 14 insertions(+), 24 deletions(-)
diff --git a/kernel/debug/kdb/kdb_io.c b/kernel/debug/kdb/kdb_io.c
index cfc054fd8097..a92ceca29637 100644
--- a/kernel/debug/kdb/kdb_io.c
+++ b/kernel/debug/kdb/kdb_io.c
@@ -124,25 +124,18 @@ static int kdb_read_get_key(char *buffer, size_t bufsize)
touch_nmi_watchdog();
f = &kdb_poll_funcs[0];
}
- if (escape_delay == 2) {
- *ped = '\0';
- ped = escape_data;
- --escape_delay;
- }
- if (escape_delay == 1) {
- key = *ped++;
- if (!*ped)
- --escape_delay;
- break;
- }
+
key = (*f)();
+
if (key == -1) {
if (escape_delay) {
udelay(ESCAPE_UDELAY);
- --escape_delay;
+ if (--escape_delay == 0)
+ return '\e';
}
continue;
}
+
if (bufsize <= 2) {
if (key == '\r')
key = '\n';
@@ -150,27 +143,24 @@ static int kdb_read_get_key(char *buffer, size_t bufsize)
*buffer = '\0';
return -1;
}
+
if (escape_delay == 0 && key == '\e') {
escape_delay = ESCAPE_DELAY;
ped = escape_data;
f_escape = f;
}
if (escape_delay) {
- *ped++ = key;
- if (f_escape != f) {
- escape_delay = 2;
- continue;
- }
+ if (f_escape != f)
+ return '\e';
+ *ped++ = key;
key = kdb_handle_escape(escape_data, ped - escape_data);
- if (key > 0) {
- escape_data[0] = key;
- escape_data[1] = '\0';
- }
- if (key)
- escape_delay = 2;
- continue;
+ if (key < 0)
+ return '\e';
+ if (key == 0)
+ continue;
}
+
break; /* A key to process */
}
return key;
--
2.21.0
next prev parent reply other threads:[~2019-10-25 7:34 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-25 7:33 [PATCH v4 0/5] kdb: Cleanup code to read user input and handle escape sequences Daniel Thompson
2019-10-25 7:33 ` [PATCH v4 1/5] kdb: Tidy up code to " Daniel Thompson
2019-10-25 7:33 ` Daniel Thompson [this message]
2019-10-25 7:33 ` [PATCH v4 3/5] kdb: Remove special case logic from kdb_read() Daniel Thompson
2019-10-25 7:33 ` [PATCH v4 4/5] kdb: Improve handling of characters from different input sources Daniel Thompson
2019-10-25 7:33 ` [PATCH v4 5/5] kdb: Tweak escape handling for vi users Daniel Thompson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191025073328.643-3-daniel.thompson@linaro.org \
--to=daniel.thompson@linaro.org \
--cc=dianders@chromium.org \
--cc=jason.wessel@windriver.com \
--cc=kgdb-bugreport@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=patches@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.