[git commit] loadkmap: explain what happens with K_ALLOCATED key value

Denys Vlasenko vda.linux at googlemail.com
Thu Sep 19 15:56:59 UTC 2013


commit: http://git.busybox.net/busybox/commit/?id=054f3eb7848230702b149a7e17f05314cb0157cb
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 console-tools/loadkmap.c |   27 +++++++++++++++++++--------
 1 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/console-tools/loadkmap.c b/console-tools/loadkmap.c
index bcffe16..66ec3b0 100644
--- a/console-tools/loadkmap.c
+++ b/console-tools/loadkmap.c
@@ -48,6 +48,7 @@ int loadkmap_main(int argc UNUSED_PARAM, char **argv)
 	if (argv[1])
 		bb_show_usage();
 /* bb_warn_ignoring_args(argv[1]); */
+
 	fd = get_console_fd_or_die();
 /* or maybe:
 	opt = getopt32(argv, "C:", &tty_name);
@@ -61,14 +62,24 @@ int loadkmap_main(int argc UNUSED_PARAM, char **argv)
 	xread(STDIN_FILENO, flags, MAX_NR_KEYMAPS);
 
 	for (i = 0; i < MAX_NR_KEYMAPS; i++) {
-		if (flags[i] == 1) {
-			xread(STDIN_FILENO, ibuff, NR_KEYS * sizeof(uint16_t));
-			for (j = 0; j < NR_KEYS; j++) {
-				ke.kb_index = j;
-				ke.kb_table = i;
-				ke.kb_value = ibuff[j];
-				ioctl(fd, KDSKBENT, &ke);
-			}
+		if (flags[i] != 1)
+			continue;
+		xread(STDIN_FILENO, ibuff, NR_KEYS * sizeof(uint16_t));
+		for (j = 0; j < NR_KEYS; j++) {
+			ke.kb_index = j;
+			ke.kb_table = i;
+			ke.kb_value = ibuff[j];
+			/*
+			 * Note: table[idx:0] can contain special value
+			 * K_ALLOCATED (marks allocated tables in kernel).
+			 * dumpkmap saves the value as-is; but attempts
+			 * to load it here fail, since it isn't a valid
+			 * key value: it is K(KT_SPEC,126) == 2<<8 + 126,
+			 * whereas last valid KT_SPEC is
+			 * K_BARENUMLOCK == K(KT_SPEC,19).
+			 * So far we just ignore these errors:
+			 */
+			ioctl(fd, KDSKBENT, &ke);
 		}
 	}
 


More information about the busybox-cvs mailing list