From a0e11b617b9ef41cefe8739dff4d6a7b01ca967f Mon Sep 17 00:00:00 2001 From: Collin Walling Date: Tue, 29 May 2018 00:40:09 -0400 Subject: [PATCH 1/7] pc-bios/s390-ccw: define loadparm length Loadparm is defined by the s390 architecture to be 8 bytes in length. Let's define this size in the s390-ccw bios. Suggested-by: Laszlo Ersek Signed-off-by: Collin Walling Reviewed-by: Laszlo Ersek Reviewed-by: Thomas Huth Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/iplb.h | 4 +++- pc-bios/s390-ccw/main.c | 8 ++++---- pc-bios/s390-ccw/sclp.c | 2 +- pc-bios/s390-ccw/sclp.h | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h index ded20c834e..772d5c57c9 100644 --- a/pc-bios/s390-ccw/iplb.h +++ b/pc-bios/s390-ccw/iplb.h @@ -12,6 +12,8 @@ #ifndef IPLB_H #define IPLB_H +#define LOADPARM_LEN 8 + struct IplBlockCcw { uint8_t reserved0[85]; uint8_t ssid; @@ -61,7 +63,7 @@ struct IplParameterBlock { uint8_t pbt; uint8_t flags; uint16_t reserved01; - uint8_t loadparm[8]; + uint8_t loadparm[LOADPARM_LEN]; union { IplBlockCcw ccw; IplBlockFcp fcp; diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 26f9adf84a..544851d672 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -15,7 +15,7 @@ char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); static SubChannelId blk_schid = { .one = 1 }; IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE))); -static char loadparm_str[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +static char loadparm_str[LOADPARM_LEN + 1] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; QemuIplParameters qipl; #define LOADPARM_PROMPT "PROMPT " @@ -80,13 +80,13 @@ static bool find_dev(Schib *schib, int dev_no) static void menu_setup(void) { - if (memcmp(loadparm_str, LOADPARM_PROMPT, 8) == 0) { + if (memcmp(loadparm_str, LOADPARM_PROMPT, LOADPARM_LEN) == 0) { menu_set_parms(QIPL_FLAG_BM_OPTS_CMD, 0); return; } /* If loadparm was set to any other value, then do not enable menu */ - if (memcmp(loadparm_str, LOADPARM_EMPTY, 8) != 0) { + if (memcmp(loadparm_str, LOADPARM_EMPTY, LOADPARM_LEN) != 0) { return; } @@ -117,7 +117,7 @@ static void virtio_setup(void) enable_mss_facility(); sclp_get_loadparm_ascii(loadparm_str); - memcpy(ldp + 10, loadparm_str, 8); + memcpy(ldp + 10, loadparm_str, LOADPARM_LEN); sclp_print(ldp); memcpy(&qipl, early_qipl, sizeof(QemuIplParameters)); diff --git a/pc-bios/s390-ccw/sclp.c b/pc-bios/s390-ccw/sclp.c index 3836cb4716..c0223fab0b 100644 --- a/pc-bios/s390-ccw/sclp.c +++ b/pc-bios/s390-ccw/sclp.c @@ -114,7 +114,7 @@ void sclp_get_loadparm_ascii(char *loadparm) memset((char *)_sccb, 0, sizeof(ReadInfo)); sccb->h.length = sizeof(ReadInfo); if (!sclp_service_call(SCLP_CMDW_READ_SCP_INFO, sccb)) { - ebcdic_to_ascii((char *) sccb->loadparm, loadparm, 8); + ebcdic_to_ascii((char *) sccb->loadparm, loadparm, LOADPARM_LEN); } } diff --git a/pc-bios/s390-ccw/sclp.h b/pc-bios/s390-ccw/sclp.h index 0dd987ff5d..8450161ba7 100644 --- a/pc-bios/s390-ccw/sclp.h +++ b/pc-bios/s390-ccw/sclp.h @@ -56,7 +56,7 @@ typedef struct ReadInfo { uint16_t rnmax; uint8_t rnsize; uint8_t reserved[13]; - uint8_t loadparm[8]; + uint8_t loadparm[LOADPARM_LEN]; } __attribute__((packed)) ReadInfo; typedef struct SCCB { From 4248981d5190eaf2b0ab74d8c287b6070ffc300a Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Tue, 5 Jun 2018 12:41:49 +0200 Subject: [PATCH 2/7] roms: Update SLOF submodule to current status We need the latest version of SLOF's libnet for adding pxelinux.cfg support in the s390-ccw bios, too. Signed-off-by: Thomas Huth --- roms/SLOF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roms/SLOF b/roms/SLOF index fa981320a1..2317427ce7 160000 --- a/roms/SLOF +++ b/roms/SLOF @@ -1 +1 @@ -Subproject commit fa981320a1e0968d6fc1b8de319723ff8212b337 +Subproject commit 2317427ce76006723f7ae103a6998ab41dd79c68 From 134f0b3d7ca5fbbd17f21fea87066967ce1d6de5 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Fri, 18 May 2018 11:31:27 +0200 Subject: [PATCH 3/7] pc-bios/s390-ccw/net: Update code for the latest changes in SLOF The ip_version information now has to be stored in the filename_ip_t structure, and there is now a common function called tftp_get_error_info() which can be used to get the error string for a TFTP error code. We can also get rid of some superfluous "(char *)" casts now. Acked-by: Christian Borntraeger Tested-by: Viktor Mihajlovski Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netboot.mak | 2 +- pc-bios/s390-ccw/netmain.c | 86 +++++++----------------------------- 2 files changed, 18 insertions(+), 70 deletions(-) diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak index 4f64128c6c..a73be367e6 100644 --- a/pc-bios/s390-ccw/netboot.mak +++ b/pc-bios/s390-ccw/netboot.mak @@ -34,7 +34,7 @@ STDLIB_OBJS = atoi.o atol.o strtoul.o strtol.o rand.o malloc.o free.o %.o : $(SLOF_DIR)/lib/libc/stdlib/%.c $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") -STDIO_OBJS = sprintf.o vfprintf.o vsnprintf.o vsprintf.o fprintf.o \ +STDIO_OBJS = sprintf.o snprintf.o vfprintf.o vsnprintf.o vsprintf.o fprintf.o \ printf.o putc.o puts.o putchar.o stdchnls.o fileno.o %.o : $(SLOF_DIR)/lib/libc/stdio/%.c $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index 600024155b..d007fb7a86 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -47,7 +47,6 @@ IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE))); static char cfgbuf[2048]; static SubChannelId net_schid = { .one = 1 }; -static int ip_version = 4; static uint64_t dest_timer; static uint64_t get_timer_ms(void) @@ -100,10 +99,10 @@ static int dhcp(struct filename_ip *fn_ip, int retries) printf("\nGiving up after %d DHCP requests\n", retries); return -1; } - ip_version = 4; + fn_ip->ip_version = 4; rc = dhcpv4(NULL, fn_ip); if (rc == -1) { - ip_version = 6; + fn_ip->ip_version = 6; set_ipv6_address(fn_ip->fd, 0); rc = dhcpv6(NULL, fn_ip); if (rc == 0) { @@ -137,8 +136,7 @@ static int tftp_load(filename_ip_t *fnip, void *buffer, int len) tftp_err_t tftp_err; int rc; - rc = tftp(fnip, buffer, len, DEFAULT_TFTP_RETRIES, &tftp_err, 1, 1428, - ip_version); + rc = tftp(fnip, buffer, len, DEFAULT_TFTP_RETRIES, &tftp_err); if (rc < 0) { /* Make sure that error messages are put into a new line */ @@ -149,61 +147,11 @@ static int tftp_load(filename_ip_t *fnip, void *buffer, int len) printf(" TFTP: Received %s (%d KBytes)\n", fnip->filename, rc / 1024); } else if (rc > 0) { printf(" TFTP: Received %s (%d Bytes)\n", fnip->filename, rc); - } else if (rc == -1) { - puts("unknown TFTP error"); - } else if (rc == -2) { - printf("TFTP buffer of %d bytes is too small for %s\n", - len, fnip->filename); - } else if (rc == -3) { - printf("file not found: %s\n", fnip->filename); - } else if (rc == -4) { - puts("TFTP access violation"); - } else if (rc == -5) { - puts("illegal TFTP operation"); - } else if (rc == -6) { - puts("unknown TFTP transfer ID"); - } else if (rc == -7) { - puts("no such TFTP user"); - } else if (rc == -8) { - puts("TFTP blocksize negotiation failed"); - } else if (rc == -9) { - puts("file exceeds maximum TFTP transfer size"); - } else if (rc <= -10 && rc >= -15) { - const char *icmp_err_str; - switch (rc) { - case -ICMP_NET_UNREACHABLE - 10: - icmp_err_str = "net unreachable"; - break; - case -ICMP_HOST_UNREACHABLE - 10: - icmp_err_str = "host unreachable"; - break; - case -ICMP_PROTOCOL_UNREACHABLE - 10: - icmp_err_str = "protocol unreachable"; - break; - case -ICMP_PORT_UNREACHABLE - 10: - icmp_err_str = "port unreachable"; - break; - case -ICMP_FRAGMENTATION_NEEDED - 10: - icmp_err_str = "fragmentation needed and DF set"; - break; - case -ICMP_SOURCE_ROUTE_FAILED - 10: - icmp_err_str = "source route failed"; - break; - default: - icmp_err_str = " UNKNOWN"; - break; - } - printf("ICMP ERROR \"%s\"\n", icmp_err_str); - } else if (rc == -40) { - printf("TFTP error occurred after %d bad packets received", - tftp_err.bad_tftp_packets); - } else if (rc == -41) { - printf("TFTP error occurred after missing %d responses", - tftp_err.no_packets); - } else if (rc == -42) { - printf("TFTP error missing block %d, expected block was %d", - tftp_err.blocks_missed, - tftp_err.blocks_received); + } else { + const char *errstr = NULL; + int ecode; + tftp_get_error_info(fnip, &tftp_err, rc, &errstr, &ecode); + printf("TFTP error: %s\n", errstr ? errstr : "unknown error"); } return rc; @@ -231,7 +179,7 @@ static int net_init(filename_ip_t *fn_ip) rc = dhcp(fn_ip, DEFAULT_BOOT_RETRIES); if (rc >= 0) { - if (ip_version == 4) { + if (fn_ip->ip_version == 4) { set_ipv4_address(fn_ip->own_ip); } } else { @@ -239,11 +187,11 @@ static int net_init(filename_ip_t *fn_ip) return -101; } - if (ip_version == 4) { + if (fn_ip->ip_version == 4) { printf(" Using IPv4 address: %d.%d.%d.%d\n", (fn_ip->own_ip >> 24) & 0xFF, (fn_ip->own_ip >> 16) & 0xFF, (fn_ip->own_ip >> 8) & 0xFF, fn_ip->own_ip & 0xFF); - } else if (ip_version == 6) { + } else if (fn_ip->ip_version == 6) { char ip6_str[40]; ipv6_to_str(fn_ip->own_ip6.addr, ip6_str); printf(" Using IPv6 address: %s\n", ip6_str); @@ -261,17 +209,17 @@ static int net_init(filename_ip_t *fn_ip) } printf(" Using TFTP server: "); - if (ip_version == 4) { + if (fn_ip->ip_version == 4) { printf("%d.%d.%d.%d\n", (fn_ip->server_ip >> 24) & 0xFF, (fn_ip->server_ip >> 16) & 0xFF, (fn_ip->server_ip >> 8) & 0xFF, fn_ip->server_ip & 0xFF); - } else if (ip_version == 6) { + } else if (fn_ip->ip_version == 6) { char ip6_str[40]; ipv6_to_str(fn_ip->server_ip6.addr, ip6_str); printf("%s\n", ip6_str); } - if (strlen((char *)fn_ip->filename) > 0) { + if (strlen(fn_ip->filename) > 0) { printf(" Bootfile name: '%s'\n", fn_ip->filename); } @@ -280,7 +228,7 @@ static int net_init(filename_ip_t *fn_ip) static void net_release(filename_ip_t *fn_ip) { - if (ip_version == 4) { + if (fn_ip->ip_version == 4) { dhcp_send_release(fn_ip->fd); } } @@ -322,7 +270,7 @@ static int handle_ins_cfg(filename_ip_t *fn_ip, char *cfg, int cfgsize) return -1; } *ptr = 0; - strncpy((char *)fn_ip->filename, insbuf, sizeof(fn_ip->filename)); + strncpy(fn_ip->filename, insbuf, sizeof(fn_ip->filename)); destaddr = (char *)atol(ptr + 1); rc = tftp_load(fn_ip, destaddr, (long)_start - (long)destaddr); if (rc <= 0) { @@ -455,7 +403,7 @@ void main(void) panic("Network initialization failed. Halting.\n"); } - fnlen = strlen((char *)fn_ip.filename); + fnlen = strlen(fn_ip.filename); if (fnlen > 0 && fn_ip.filename[fnlen - 1] != '/') { rc = net_try_direct_tftp_load(&fn_ip); } From ec623990b34ab0e271141356af96d67a0c4e980d Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Tue, 22 May 2018 11:37:29 +0200 Subject: [PATCH 4/7] pc-bios/s390-ccw/net: Add support for pxelinux-style config files Since it is quite cumbersome to manually create a combined kernel with initrd image for network booting, we now support loading via pxelinux configuration files, too. In these files, the kernel, initrd and command line parameters can be specified seperately, and the firmware then takes care of glueing everything together in memory after the files have been downloaded. See this URL for details about the config file layout: https://www.syslinux.org/wiki/index.php?title=PXELINUX The user can either specify a config file directly as bootfile via DHCP (but in this case, the file has to start either with "default" or a "#" comment so we can distinguish it from binary kernels), or a folder (i.e. the bootfile name must end with "/") where the firmware should look for the typical pxelinux.cfg file names, e.g. based on MAC or IP address. We also support the pxelinux.cfg DHCP options 209 and 210 from RFC 5071. Acked-by: Christian Borntraeger Tested-by: Viktor Mihajlovski Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netboot.mak | 7 +-- pc-bios/s390-ccw/netmain.c | 86 +++++++++++++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 4 deletions(-) diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak index a73be367e6..8af0cfd2da 100644 --- a/pc-bios/s390-ccw/netboot.mak +++ b/pc-bios/s390-ccw/netboot.mak @@ -25,8 +25,9 @@ CTYPE_OBJS = isdigit.o isxdigit.o toupper.o %.o : $(SLOF_DIR)/lib/libc/ctype/%.c $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") -STRING_OBJS = strcat.o strchr.o strcmp.o strcpy.o strlen.o strncmp.o strncpy.o \ - strstr.o memset.o memcpy.o memmove.o memcmp.o +STRING_OBJS = strcat.o strchr.o strrchr.o strcpy.o strlen.o strncpy.o \ + strcmp.o strncmp.o strcasecmp.o strncasecmp.o strstr.o \ + memset.o memcpy.o memmove.o memcmp.o %.o : $(SLOF_DIR)/lib/libc/string/%.c $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") @@ -50,7 +51,7 @@ libc.a: $(LIBCOBJS) # libnet files: LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \ - dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o + dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o LIBNETCFLAGS := $(QEMU_CFLAGS) -DDHCPARCH=0x1F $(LIBC_INC) $(LIBNET_INC) %.o : $(SLOF_DIR)/lib/libnet/%.c diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index d007fb7a86..c059546480 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "s390-ccw.h" #include "virtio.h" @@ -41,12 +42,14 @@ extern char _start[]; #define KERNEL_ADDR ((void *)0L) #define KERNEL_MAX_SIZE ((long)_start) +#define ARCH_COMMAND_LINE_SIZE 896 /* Taken from Linux kernel */ char stack[PAGE_SIZE * 8] __attribute__((aligned(PAGE_SIZE))); IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE))); static char cfgbuf[2048]; static SubChannelId net_schid = { .one = 1 }; +static uint8_t mac[6]; static uint64_t dest_timer; static uint64_t get_timer_ms(void) @@ -159,7 +162,6 @@ static int tftp_load(filename_ip_t *fnip, void *buffer, int len) static int net_init(filename_ip_t *fn_ip) { - uint8_t mac[6]; int rc; memset(fn_ip, 0, sizeof(filename_ip_t)); @@ -233,6 +235,66 @@ static void net_release(filename_ip_t *fn_ip) } } +/** + * Load a kernel with initrd (i.e. with the information that we've got from + * a pxelinux.cfg config file) + */ +static int load_kernel_with_initrd(filename_ip_t *fn_ip, + struct pl_cfg_entry *entry) +{ + int rc; + + printf("Loading pxelinux.cfg entry '%s'\n", entry->label); + + if (!entry->kernel) { + printf("Kernel entry is missing!\n"); + return -1; + } + + strncpy(fn_ip->filename, entry->kernel, sizeof(fn_ip->filename)); + rc = tftp_load(fn_ip, KERNEL_ADDR, KERNEL_MAX_SIZE); + if (rc < 0) { + return rc; + } + + if (entry->initrd) { + uint64_t iaddr = (rc + 0xfff) & ~0xfffUL; + + strncpy(fn_ip->filename, entry->initrd, sizeof(fn_ip->filename)); + rc = tftp_load(fn_ip, (void *)iaddr, KERNEL_MAX_SIZE - iaddr); + if (rc < 0) { + return rc; + } + /* Patch location and size: */ + *(uint64_t *)0x10408 = iaddr; + *(uint64_t *)0x10410 = rc; + rc += iaddr; + } + + if (entry->append) { + strncpy((char *)0x10480, entry->append, ARCH_COMMAND_LINE_SIZE); + } + + return rc; +} + +#define MAX_PXELINUX_ENTRIES 16 + +static int net_try_pxelinux_cfg(filename_ip_t *fn_ip) +{ + struct pl_cfg_entry entries[MAX_PXELINUX_ENTRIES]; + int num_ent, def_ent = 0; + + num_ent = pxelinux_load_parse_cfg(fn_ip, mac, NULL, DEFAULT_TFTP_RETRIES, + cfgbuf, sizeof(cfgbuf), + entries, MAX_PXELINUX_ENTRIES, &def_ent); + if (num_ent > 0) { + return load_kernel_with_initrd(fn_ip, &entries[def_ent]); + } + + return -1; +} + /** * Load via information from a .INS file (which can be found on CD-ROMs * for example) @@ -302,6 +364,25 @@ static int net_try_direct_tftp_load(filename_ip_t *fn_ip) if (!strncmp("* ", cfgbuf, 2)) { return handle_ins_cfg(fn_ip, cfgbuf, rc); } + /* + * pxelinux.cfg support via bootfile name is just here for developers' + * convenience (it eases testing with the built-in DHCP server of QEMU + * that does not support RFC 5071). The official way to configure a + * pxelinux.cfg file name is to use DHCP options 209 and 210 instead. + * So only use the pxelinux.cfg parser here for files that start with + * a magic comment string. + */ + if (!strncasecmp("# pxelinux", cfgbuf, 10)) { + struct pl_cfg_entry entries[MAX_PXELINUX_ENTRIES]; + int num_ent, def_ent = 0; + + num_ent = pxelinux_parse_cfg(cfgbuf, sizeof(cfgbuf), entries, + MAX_PXELINUX_ENTRIES, &def_ent); + if (num_ent <= 0) { + return -1; + } + return load_kernel_with_initrd(fn_ip, &entries[def_ent]); + } } /* Move kernel to right location */ @@ -407,6 +488,9 @@ void main(void) if (fnlen > 0 && fn_ip.filename[fnlen - 1] != '/') { rc = net_try_direct_tftp_load(&fn_ip); } + if (rc <= 0) { + rc = net_try_pxelinux_cfg(&fn_ip); + } net_release(&fn_ip); From 0d8261b506933c245b79ca6a57422dc81d8989c1 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Tue, 22 May 2018 11:53:51 +0200 Subject: [PATCH 5/7] pc-bios/s390-ccw/net: Try to load pxelinux.cfg file accoring to the UUID With the STSI instruction, we can get the UUID of the current VM instance, so we can support loading pxelinux config files via UUID in the file name, too. Acked-by: Christian Borntraeger Tested-by: Viktor Mihajlovski Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netmain.c | 56 +++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index c059546480..0392131c27 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -44,6 +44,9 @@ extern char _start[]; #define KERNEL_MAX_SIZE ((long)_start) #define ARCH_COMMAND_LINE_SIZE 896 /* Taken from Linux kernel */ +/* STSI 3.2.2 offset of first vmdb + offset of uuid inside vmdb */ +#define STSI322_VMDB_UUID_OFFSET ((8 + 12) * 4) + char stack[PAGE_SIZE * 8] __attribute__((aligned(PAGE_SIZE))); IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE))); static char cfgbuf[2048]; @@ -235,6 +238,56 @@ static void net_release(filename_ip_t *fn_ip) } } +/** + * Retrieve the Universally Unique Identifier of the VM. + * @return UUID string, or NULL in case of errors + */ +static const char *get_uuid(void) +{ + register int r0 asm("0"); + register int r1 asm("1"); + uint8_t *mem, *buf, uuid[16]; + int i, cc, chk = 0; + static char uuid_str[37]; + + mem = malloc(2 * PAGE_SIZE); + if (!mem) { + puts("Out of memory ... can not get UUID."); + return NULL; + } + buf = (uint8_t *)(((uint64_t)mem + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)); + memset(buf, 0, PAGE_SIZE); + + /* Get SYSIB 3.2.2 */ + r0 = (3 << 28) | 2; + r1 = 2; + asm volatile(" stsi 0(%[addr])\n" + " ipm %[cc]\n" + " srl %[cc],28\n" + : [cc] "=d" (cc) + : "d" (r0), "d" (r1), [addr] "a" (buf) + : "cc", "memory"); + if (cc) { + return NULL; + } + + for (i = 0; i < 16; i++) { + uuid[i] = buf[STSI322_VMDB_UUID_OFFSET + i]; + chk |= uuid[i]; + } + free(mem); + if (!chk) { + return NULL; + } + + sprintf(uuid_str, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-" + "%02x%02x%02x%02x%02x%02x", uuid[0], uuid[1], uuid[2], uuid[3], + uuid[4], uuid[5], uuid[6], uuid[7], uuid[8], uuid[9], uuid[10], + uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]); + + return uuid_str; +} + /** * Load a kernel with initrd (i.e. with the information that we've got from * a pxelinux.cfg config file) @@ -285,7 +338,8 @@ static int net_try_pxelinux_cfg(filename_ip_t *fn_ip) struct pl_cfg_entry entries[MAX_PXELINUX_ENTRIES]; int num_ent, def_ent = 0; - num_ent = pxelinux_load_parse_cfg(fn_ip, mac, NULL, DEFAULT_TFTP_RETRIES, + num_ent = pxelinux_load_parse_cfg(fn_ip, mac, get_uuid(), + DEFAULT_TFTP_RETRIES, cfgbuf, sizeof(cfgbuf), entries, MAX_PXELINUX_ENTRIES, &def_ent); if (num_ent > 0) { From 63c93fac18546ef9468c7b522bad0ae43f9f58ba Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Thu, 14 Jun 2018 10:38:22 +0200 Subject: [PATCH 6/7] pc-bios/s390-ccw: Optimize the s390-netboot.img for size The -O2 optimization flag is passed via CFLAGS to the firmware Makefile, but in netbook.mak, we've got some rules that only use QEMU_CFLAGS for compiling the libc and libnet from SLOF, so these files get compiled without optimization so far. Use CFLAGS here, too, to create faster and smaller code. We can additionally save some more bytes in the firmware images by compi- ling the code with -fno-asynchronous-unwind-tables. This will omit some ELF sections (used for stack unwinding for example) from the image that we do not need in the firmware. Acked-by: Christian Borntraeger Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/Makefile | 1 + pc-bios/s390-ccw/netboot.mak | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index 439e3cc9c9..1eb316b02f 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -15,6 +15,7 @@ OBJECTS = start.o main.o bootmap.o jump2ipl.o sclp.o menu.o \ QEMU_CFLAGS := $(filter -W%, $(QEMU_CFLAGS)) QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -msoft-float QEMU_CFLAGS += -march=z900 -fPIE -fno-strict-aliasing +QEMU_CFLAGS += -fno-asynchronous-unwind-tables QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-stack-protector) LDFLAGS += -Wl,-pie -nostdlib diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak index 8af0cfd2da..14e96b2aa6 100644 --- a/pc-bios/s390-ccw/netboot.mak +++ b/pc-bios/s390-ccw/netboot.mak @@ -19,7 +19,7 @@ s390-netboot.img: s390-netboot.elf # libc files: -LIBC_CFLAGS := $(QEMU_CFLAGS) $(LIBC_INC) $(LIBNET_INC) +LIBC_CFLAGS := $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) CTYPE_OBJS = isdigit.o isxdigit.o toupper.o %.o : $(SLOF_DIR)/lib/libc/ctype/%.c @@ -52,7 +52,7 @@ libc.a: $(LIBCOBJS) LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \ dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o -LIBNETCFLAGS := $(QEMU_CFLAGS) -DDHCPARCH=0x1F $(LIBC_INC) $(LIBNET_INC) +LIBNETCFLAGS := $(QEMU_CFLAGS) $(CFLAGS) -DDHCPARCH=0x1F $(LIBC_INC) $(LIBNET_INC) %.o : $(SLOF_DIR)/lib/libnet/%.c $(call quiet-command,$(CC) $(LIBNETCFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") From 4046826d46618ef7eb11df41fe8878669ce6991c Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 18 Jun 2018 15:24:44 +0200 Subject: [PATCH 7/7] pc-bios/s390-ccw: Update the s390-netboot.img binary This binary now contains the support for pxelinux.cfg-style network booting. Signed-off-by: Thomas Huth --- pc-bios/s390-netboot.img | Bin 87872 -> 54944 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pc-bios/s390-netboot.img b/pc-bios/s390-netboot.img index ef561efd2e222e03138705e9cf30d9e125a7970e..2c6886efb8320ff711589119ffbf077e68ec8784 100644 GIT binary patch literal 54944 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 MRZtp6f%Jgc0EmTxF8}}l literal 87872 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