loadkmap: explain what happens with K_ALLOCATED key value

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
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 @@
 	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 @@
 	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);
 		}
 	}