From: Collin Walling <walling@linux.ibm.com>
To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, cohuck@redhat.com,
thuth@redhat.com, borntraeger@de.ibm.com
Cc: gor@linux.ibm.com, frankja@linux.ibm.com
Subject: [Qemu-devel] [PATCH 3/4] pc-bios/s390-ccw: fix non-sequential boot entries (eckd)
Date: Tue, 10 Apr 2018 11:01:25 -0400 [thread overview]
Message-ID: <1523372486-13190-4-git-send-email-walling@linux.ibm.com> (raw)
In-Reply-To: <1523372486-13190-1-git-send-email-walling@linux.ibm.com>
zIPL boot menu entries can be non-sequential. Let's account
for this issue for the s390 zIPL boot menu. Since this boot
menu is actually an imitation and is not completely capable
of everything the real zIPL menu can do, let's also print a
different banner to the user.
Signed-off-by: Collin Walling <walling@linux.ibm.com>
Reported-by: Vasily Gorbik <gor@linux.ibm.com>
---
| 32 ++++++++++++++++++++------------
1 file changed, 20 insertions(+), 12 deletions(-)
--git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c
index 96eec81..083405f 100644
--- a/pc-bios/s390-ccw/menu.c
+++ b/pc-bios/s390-ccw/menu.c
@@ -158,7 +158,7 @@ static void boot_menu_prompt(bool retry)
}
}
-static int get_boot_index(int entries)
+static int get_boot_index(bool *valid_entries)
{
int boot_index;
bool retry = false;
@@ -168,7 +168,8 @@ static int get_boot_index(int entries)
boot_menu_prompt(retry);
boot_index = get_index();
retry = true;
- } while (boot_index < 0 || boot_index >= entries);
+ } while (boot_index < 0 || boot_index >= MAX_BOOT_ENTRIES ||
+ !valid_entries[boot_index]);
sclp_print("\nBooting entry #");
sclp_print(uitoa(boot_index, tmp, sizeof(tmp)));
@@ -176,21 +177,28 @@ static int get_boot_index(int entries)
return boot_index;
}
-static void zipl_println(const char *data, size_t len)
+static void zipl_println(const char *data, size_t len, bool *valid_entries)
{
char buf[len + 2];
+ int entry;
ebcdic_to_ascii(data, buf, len);
buf[len] = '\n';
buf[len + 1] = '\0';
sclp_print(buf);
+
+ entry = buf[0] == ' ' ? atoui(buf + 1) : atoui(buf);
+ valid_entries[entry] = true;
+
+ if (entry == 0)
+ sclp_print("\n");
}
int menu_get_zipl_boot_index(const char *menu_data)
{
size_t len;
- int entries;
+ bool valid_entries[MAX_BOOT_ENTRIES] = {false};
uint16_t zipl_flag = *(uint16_t *)(menu_data - ZIPL_FLAG_OFFSET);
uint16_t zipl_timeout = *(uint16_t *)(menu_data - ZIPL_TIMEOUT_OFFSET);
@@ -202,19 +210,19 @@ int menu_get_zipl_boot_index(const char *menu_data)
timeout = zipl_timeout * 1000;
}
- /* Print and count all menu items, including the banner */
- for (entries = 0; *menu_data; entries++) {
+ /* Print banner */
+ sclp_print("s390-ccw zIPL Boot Menu\n\n");
+ menu_data += strlen(menu_data) + 1;
+
+ /* Print entries */
+ while (*menu_data) {
len = strlen(menu_data);
- zipl_println(menu_data, len);
+ zipl_println(menu_data, len, valid_entries);
menu_data += len + 1;
-
- if (entries < 2) {
- sclp_print("\n");
- }
}
sclp_print("\n");
- return get_boot_index(entries - 1); /* subtract 1 to exclude banner */
+ return get_boot_index(valid_entries);
}
--
2.7.4
next prev parent reply other threads:[~2018-04-10 15:01 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-10 15:01 [Qemu-devel] [PATCH 0/4] Small fixes for s390x QEMU boot menu Collin Walling
2018-04-10 15:01 ` [Qemu-devel] [PATCH 1/4] pc-bios/s390-ccw: rename MAX_TABLE_ENTRIES to MAX_BOOT_ENTRIES Collin Walling
2018-04-12 18:34 ` Thomas Huth
2018-04-10 15:01 ` [Qemu-devel] [PATCH 2/4] pc-bios/s390-ccw: fix loadparm initialization and int conversion Collin Walling
2018-04-12 18:57 ` Thomas Huth
2018-04-12 20:57 ` Collin Walling
2018-04-12 21:04 ` Farhan Ali
2018-04-13 4:11 ` Thomas Huth
2018-04-10 15:01 ` Collin Walling [this message]
2018-04-13 6:14 ` [Qemu-devel] [PATCH 3/4] pc-bios/s390-ccw: fix non-sequential boot entries (eckd) Thomas Huth
2018-04-13 14:56 ` [Qemu-devel] [qemu-s390x] " Collin Walling
2018-04-10 15:01 ` [Qemu-devel] [PATCH 4/4] pc-bios/s390-ccw: fix non-sequential boot entries (enum) Collin Walling
2018-04-13 7:55 ` Thomas Huth
-- strict thread matches above, loose matches on Subject: below --
2018-04-13 22:08 [Qemu-devel] [PATCH v2 0/4] Small fixes for s390x QEMU boot menu Collin Walling
2018-04-13 22:08 ` [Qemu-devel] [PATCH 3/4] pc-bios/s390-ccw: fix non-sequential boot entries (eckd) Collin Walling
2018-04-16 5:30 ` Thomas Huth
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=1523372486-13190-4-git-send-email-walling@linux.ibm.com \
--to=walling@linux.ibm.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=frankja@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=thuth@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).