aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2019-08-27version: update to 20190827qemu-slof-20190827Alexey Kardashevskiy1-1/+1
This is another update for QEMU 4.2. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2019-08-27libnet: Fix the check of the argument lengths of the "ping" commandThomas Huth1-1/+1
The current if-condition can never be true. Buglink: https://bugs.launchpad.net/qemu/+bug/1840646 Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2019-08-27fdt: Update phandles after H_CASAlexey Kardashevskiy1-0/+1
At the moment SLOF generates phandles except a few exceptions such as an interrupt controller (XICS/XIVE) and NVLink-related nodes. For these nodes QEMU generates phandles which SLOF later detects and replaces with the node addresses (which are phandles in SLOF). However we are missing these updates when processing the ibm,client-architecture-support client interface call - SLOF calls QEMU with H_CAS to get an update for the device tree, and if that blob contains phandles, they make it to the final tree unchanged with undefined results. This calls fdt-fix-phandles for the H_CAS update blob. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2019-08-27rtas: Reserve space for FWNMI logAlexey Kardashevskiy1-0/+9
The Firmware Assisted Non-Maskable Interrupts Option (FWNMI) feature requires some space for RTAS log which is in the RTAS blob area. This expands the RTAS blob size to 2k. More details here: https://patchwork.ozlabs.org/patch/1146765/ Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2019-07-19version: update to 20190719qemu-slof-20190719Alexey Kardashevskiy1-1/+1
This is for QEMU 4.2. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2019-07-18rtas: Integrate RTAS blobAlexey Kardashevskiy6-39/+49
We implement RTAS as a simple binary blob which calls directly into QEMU via a custom hcall. So far we were relying on QEMU putting the RTAS blob to the guest memory with its location in linux,rtas-base/rtas-size. The problems with this are: 1. we need to peek a location in the guest ram in addition to slof, FDT and sometime kernel and init ram disk; having one less image makes QEMU's life easier. 2. for secure VMs, it is yet another image which needs to be signed and verified. This implements "instantiate-rtas" completely in SLOF, including KVM PR support ("broken sc1"). Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: Thomas Huth <thuth@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
2019-07-03version: update to 20190703qemu-slof-20190703Alexey Kardashevskiy1-1/+1
This is for QEMU 4.1. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2019-04-10libnet: Correctly re-initialize the "ip_version" variable each timeThomas Huth1-1/+3
I recently noticed that if you start QEMU with two NICs, and only want to boot from the second NIC, SLOF only tries to get an IP address via DHCPv6 instead of trying both, DHCPv4 and DHCPv6. For example: $ qemu-system-ppc64 -nic hubport,hubid=1 \ -nic user,model=virtio,tftp=/.../tftp,bootfile=zImage.pseries [...] Trying to load: from: /vdevice/l-lan@71000002 ... Initializing NIC Reading MAC address from device: 52:54:00:12:34:56 Requesting information via DHCP: 007 Aborted E3001 (net) Could not get IP address Trying to load: from: /pci@800000020000000/ethernet@0 ... Initializing NIC Reading MAC address from device: 52:54:00:12:34:57 Requesting information via DHCPv6: done Using IPv6 address: fec0::5254:ff:fe12:3457 The problem is that we never re-initialize the "ip_version" variable anymore, so once it has been set to 6, it stays at 6 for the second network boot attempt, too. Thus reset the variable to 4 at the beginning of the netload() function. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2019-01-14version: update to 20190114qemu-slof-20190114Alexey Kardashevskiy1-1/+1
This is for QEMU 4.0. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2019-01-10vio-vscsi: Support multiple channels / busesThomas Huth1-5/+11
The spapr-vscsi device of QEMU supports multiple channels (a.k.a. buses). But when QEMU is started with a device on a bus > 0, SLOF fails to detect the device, so that the boot fails. For example: qemu-system-ppc64 -nodefaults -nographic -serial stdio -device spapr-vscsi \ -blockdev driver=file,filename=/path/to/cdrom.iso,node-name=d1,read-only=on \ -device scsi-cd,id=cd1,drive=d1,channel=6,scsi-id=5,lun=1 Thus SLOF should scan the various channels for bootable SCSI devices, too. Since the common SLOF code for scanning SCSI devices has no meaning of "channels" or "bus", we simply fake the bus ID to be part of the target ID, so instead of supporting 64 targets = 64 devices, we now support 8 channel * 64 targets = 512 devices instead. Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1663160 Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-12-18board-qemu/slof/vio-vscsi: Scan up to 64 SCSI IDsThomas Huth1-2/+2
QEMU supports up the 64 SCSI IDs on the vscsi "bus", see the string "max_target = 63" in the source file hw/scsi/spapr_vscsi.c of QEMU. However, SLOF currently only checks the first 9 IDs on the vscsi adaptor, so when you try to boot from a CD-ROM like this, the boot fails: qemu-system-ppc64 ... -device spapr-vscsi,id=scsi0,reg=0x2000 \ -drive file=/path/to/cdrom.iso,format=raw,if=none,id=dr1,readonly=on \ -device scsi-cd,bus=scsi0.0,channel=0,scsi-id=63,lun=1,drive=dr1,id=scd1 Thus let's change the amount of IDs that we scan in SLOF to 64, too, to match the ID range that QEMU provides. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Laurent Vivier <lvivier@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-12-18usb/storage: Implement block write supportLaurent Vivier1-5/+22
The only missing parts were to manage the transfer direction in do-bulk-command and to copy the data to the buffer before the write operation. This is needed as GRUB2 wants to write the grubenv file at start and hangs because the data are not provided to the disk controller. I've checked the file is correctly modified by modifying an environment variable in GRUB2 with "set saved_entry=2" then "save_env saved_entry" and checking the result in linux with "grub2-editenv list". Fixes: Fixes: a0b96fe66fcd991b407c1d67ca842921e477a6fd (Provide "write" function in the disk-label package) Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-12-18usb/storage: Invert the logic of the IF-statementsLaurent Vivier1-20/+19
to prepare write implementation Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-09-07fdt: Fix phandles for NVLink/NVLink2Alexey Kardashevskiy1-0/+5
The NVIDIA driver for NVLink2-capable GPU NVIDIA V100 discovers topology between GPU/NPUs/GPURAM via the device tree which needs to have cross references between device tree nodes. This adds patching of the nodes needed for the driver to initialize. As all these properties only contain phandles and nothing else, there is no risc of accidendal damage. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> --- Changes: * added the commit log
2018-09-07fdt: Factor out code to replace a phandle in placeAlexey Kardashevskiy1-8/+17
We generate a fake XICS phandle in QEMU and SLOF replaces that phandle with the real one (i.e. SLOF's node address) in interrupt-parent and interrupt-map properties. These properties are handled differently - the interrupt-map is fixed in place while interrupt-parent is decoded+encoded+set as a property. This changes interrupt-parent fixing code to do what the interrupt-map code does because soon we are going to have more phandles to fix and some contain an array of phandles (such as "ibm,npu"). Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> --- Changes: v2: * removed fdt-replace-l,
2018-09-07pci: use appropriate base class idsGreg Kurz1-5/+5
This will allow SLOF to print the appropriate name instead of "unknown" for PCI classes 0xd to 0x11. Signed-off-by: Greg Kurz <groug@kaod.org> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-07-24Makefile: Set a proper DRIVER_NAME when building from a git treeThomas Huth1-0/+1
The DRIVER_NAME environment variable is not set up correctly for the build_romfs tool in case we build from a git tree, so the field in the rom header did not contain much useful data. Let's use the revision string from git as DRIVER_NAME in this case. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-07-24romfs/tools: Silence more compiler warnings with GCC 8.1Thomas Huth1-7/+12
GCC 8 complains about the following usages of strncpy, too: create_crc.c:86:3: warning: ‘strncpy’ specified bound 16 equals destination size [-Wstringop-truncation] strncpy(uHeader.stHeader.version, pcVersion, 16); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ create_crc.c:84:3: warning: ‘strncpy’ specified bound 16 equals destination size [-Wstringop-truncation] strncpy(uHeader.stHeader.version, pcVersion, 16); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Let's work around the issue by using memcpy instead. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-07-20romfs/tools: Silence GCC 8.1 compiler warning with FLASHFS_MAGICThomas Huth1-15/+6
GCC 8.1 introduce some new warnings which affect create_crc.c. One of them is: create_crc.c: In function ‘createHeaderImage’: create_crc.c:110:2: warning: ‘strncpy’ output truncated before terminating nul copying 8 bytes from a string of the same length [-Wstringop-truncation] strncpy(uHeader.stHeader.magic, FLASHFS_MAGIC, 8); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Initialize the header struct statically here instead to silence the warning. Suggested-by: Segher Boessenkool <segher@kernel.crashing.org> Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-07-20romfs/tools: Remove superfluous union around the rom header structThomas Huth2-17/+13
Accessing the struct with memset and memcpy can also be done without the union wrapper. While we're at it, also remove the FLASHFS_HEADER_DATA_SIZE macre and use sizeof(stHeader) instead. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-07-19make.rules: Compile SLOF with -fno-asynchronous-unwind-tablesThomas Huth1-2/+3
With the new GCC 8, the asynchronous-unwind-tables are always enabled. We don't need this for SLOF, so disable them to save 32 kiB in the boot_rom.bin. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-07-02version: update to 20180702qemu-slof-20180702Alexey Kardashevskiy1-1/+1
This is aimed to go to QEMU v3.0. Compared to 20180621, this fixes a couple issues related to gcc8.1. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-07-02Fix bad assembler statements for compiling with gcc 8.1 / as 2.30Thomas Huth2-2/+2
When compiling with a very recent toolchain, I get these warnings: ../../llfw/boot_abort.S: Assembler messages: ../../llfw/boot_abort.S:76: Warning: invalid register expression and: stage2_head.S: Assembler messages: stage2_head.S:57: Warning: invalid register expression The first one is using the wrong opcode, we should use "and" instead of "andi" here. The second one is using a register instead of a constant for load-immediate, which is non-sense, too. Fix it to use the right constant instead. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Laurent Vivier <lvivier@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-07-02libelf: Add REL32 to the list of ignored relocationsThomas Huth1-0/+1
When compiling SLOF with GCC 8.1, I currently get a lot of these errors: ERROR: Unhandled relocation (A) type 26 Type 26 is the "relative 32-bit" relocation. We can simply ignore it (like the other relative relocations - REL14, REL24 and REL64) to shut up these error messages. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Laurent Vivier <lvivier@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-06-21version: update to 20180621qemu-slof-20180621Alexey Kardashevskiy1-1/+1
This is aimed to go to QEMU v3.0. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-06-07lib/libnet/pxelinux: Fix two off-by-one bugs in the pxelinux.cfg parserThomas Huth1-5/+6
There are two small bugs in the pxelinux.cfg parser: 1. If the file does not end with a '\n', the code set 'eol = cfg + cfgsize' and later wrote a NUL character to *eol, i.e. it wrote the NUL character beyond the end of the buffer. We've got to use 'eol = cfg + cfgsize - 1' instead. 2. The code always replaced the last byte of the buffer with a NUL character to get a proper termination. If the config file ends with a required character (e.g. the last line is a KERNEL or INITRD line and the file does not have a '\n' at the end), the last character got lost. Move the obligation for the terminating NUL character to the caller instead so that we can be sure to have a proper terminated buffer in pxelinux_parse_cfg() without the need to blindly overwrite the last character here. Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-06-07lib/libnet/pxelinux: Make the size handling for pxelinux_load_cfg more logicalThomas Huth1-6/+8
The pxelinux_load_cfg() function always tried to load one byte less than its parameter said (so that we've got space for a terminating NUL-character later). This is not very intuitive, let's better ask for one byte less when we call the function. While we're at it, add a sanity check that the function really did not load more bytes than requested. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-06-07libc: Add a simple implementation of an assert() functionThomas Huth1-0/+36
... useful for "this should never happen" situations, where you want to make sure that it really never happens. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Greg Kurz <groug@kaod.org> [aik: removed extra ';' and empty line] Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-29libnet: Support UUID-based pxelinux.cfg file namesThomas Huth3-5/+31
Retrieve the UUID from the device tree and pass it to the pxelinux.cfg function, so that we can look there for UUID-based file names, too. Signed-off-by: Thomas Huth <thuth@redhat.com> [aik: removed trailing space] Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-29slof: Add a helper function to get the contents of a property in C codeThomas Huth2-0/+17
We will need to retrieve the UUID of the VM in the libnet code, so we need a function to get the contents from a device tree property. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-29libnet: Add support for DHCPv4 options 209 and 210Thomas Huth5-20/+88
There are two dedicated DHCP options for loading PXELINUX config files, option 209 (config file name) and 210 (path prefix). We should support them, too, in case some users want to configure their boot flow this way. See RFC 5071 and the following URL for more details: https://www.syslinux.org/wiki/index.php?title=PXELINUX#DHCP_options Unlike most other strings in libnet, I've chosen to not use fixed-size arrays for these two strings, but to allocate the memory via malloc here. We always have to make sure not to overflow the stack in Paflof, so adding 2 * 256 byte arrays to struct filename_ip sounded just too dangerous to me. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-29libnet: Wire up pxelinux.cfg network bootingThomas Huth3-5/+96
In case the normal network loading failed, try to load a pxelinux.cfg config file. If that succeeds, load the kernel and initrd with the information that could be found in this file. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-29libnet: Add functions for downloading and parsing pxelinux.cfg filesThomas Huth3-1/+246
Booting a kernel via pxelinux.cfg files is common on x86 and also with ppc64 bootloaders like petitboot, so it would be nice to support this in SLOF, too. This patch adds functions for downloading and parsing such pxelinux.cfg files. See this URL for more details on pxelinux.cfg: https://www.syslinux.org/wiki/index.php?title=PXELINUX Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-29libnet: Put code for determing TFTP error strings into a separate functionThomas Huth3-73/+109
This way we can easily re-use the rc --> string translation in later patches. Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-29libc: Add the snprintf() functionThomas Huth3-1/+30
Code has been taken from the sprintf() function (which is almost the same, except that snprintf calls vsnprintf instead of vsprintf internally). Signed-off-by: Thomas Huth <thuth@redhat.com> [aik: fixed traling spaces] Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-29libnet: Pass ip_version via struct filename_ipThomas Huth3-12/+13
When we will support loading of pxelinux.cfg files later, we have to call the tftp load function multiple times from different places. To avoid that we've also got to pass around the ip_version information via function para- meters to all spots, let's rather put it into struct filename_ip instead since we've got this struct filename_ip info available everywhere already. While we're at it, also drop the __attribute__((packed)) from the struct. The struct is only used internally, without exchanging it with the outside world, so the attribute is certainly not necessary here. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-29resolve ihandle and xt handle in the input command (like for the output)Laurent Vivier1-16/+24
Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-29Fix output wordLaurent Vivier1-5/+31
We can select the console output, but it does not really work Implement term-io-emit, as we have term-io-key to really send characters to the output selected by stdout. Resolve xt and ihandle in the output command. Use them in the new term-io-emit function. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> [aik: fixed commit log] Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-25obp-tftp: Make sure to not overwrite paflof in memoryThomas Huth1-1/+7
The obp-tftp package is currently using an arbitrary large value as maximal load size. If the downloaded file is big enough, we can easily erase Paflof in memory this way. Let's make sure that this can not happen by limiting the size to the amount of memory below the Paflof binary (which is close to the end of the RAM) in case of board-qemu, or the amount of memory between the minimum RAM size and the load-base on board-js2x. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-25libnet: Get rid of unused huge_load and block_size parametersThomas Huth6-26/+10
The blocksize is hard-coded to 1428 bytes in obp-tftp.fs, so instead of hardcoding this in the Forth code, we could also move this into tftp.c directly instead. A similar condition exists with the huge-tftp-load parameter. While this non-standard variable could still be changed in the obp-tftp package, it does not make much sense to set it to zero since you only lose the possibility to do huge TFTP loads with index wrap-around in that case. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-24libc: Check for NULL pointers in free()Thomas Huth1-1/+3
POSIX says that the free() function should simply do nothing if a NULL pointer argument has been specified. So let's be a little bit more compliant in our libc and add a NULL pointer check here, too. Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-24libc: Implement strrchr()Thomas Huth2-1/+29
This function will be used in one of the next patches to find the last slash in a file name string. Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-05-14libnet: Get rid of unnecessary (char *) castsThomas Huth6-33/+35
For some strange reasons, the libnet code is using int8_t arrays for strings in a couple of places where it really does not make any sense. Therefor a lot of "(char *)" casts are needed when the code is using the string functions from the libc. Let's change the strings to use "char" instead of "int8_t" so we can get rid of a lot of these casts. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-04-04broken_sc1: check for H_PRIVILEGENikunj A Dadhania2-5/+6
Recently, found that when DAWR was disabled by linux kernel, the hcall started returning H_UNSUPPORTED, and VM did not boot up as broken_sc1 patched up SC calls falsely. Instead of checking for various returns, check if its not in privilege mode and patch sc1 in that case. CC: Michael Ellerman <michael@ellerman.id.au> CC: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2018-03-05OF: Use new property "stdout-path" for boot consoleNikunj A Dadhania1-1/+11
Linux kernel commit 2a9d832cc9aae21ea827520fef635b6c49a06c6d (of: Add bindings for chosen node, stdout-path) deprecated chosen property "linux,stdout-path" and "stdout". Check for new property "stdout-path" first and as a fallback check "linux,stdout-path". This older property can be deprecated after 5 years. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2017-12-14version: update to 20171214qemu-slof-20171412qemu-slof-20171214Alexey Kardashevskiy1-1/+1
This is aimed to go to QEMU v2.12. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2017-12-13boot: use a temporary bootdev-bufNikunj A Dadhania1-3/+38
The catpad size is 1K size, which can overflow easily with around 20 devices having bootindex. Replace usage of $cat with a dynamically allocated buffer(16K) here. Introduce new words to work on the buffer (allocate, free and concatenate) Reported here: https://github.com/qemu/SLOF/issues/3 Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2017-12-13boot: do not concatenate bootdevNikunj A Dadhania1-2/+10
We were concatenating the word " parse-load" and $bootdev list that was input to evaluate. Open code EVALUATE work such that concatenation is not required. "load" and "load-next" does not use $cat anymore. Reported here: https://github.com/qemu/SLOF/issues/3 Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2017-12-11libvirtio: Mark struct virtio_scsi_req_cmd as packedThomas Huth1-1/+1
The struct contains an uneven amount of bytes, so we should use the "packed" attribute to avoid padding problems here. So far the problems did not show up yet since the struct is filled by Forth code only and QEMU seems to be quite forgiving about the length of the descriptor, but anyway, let's better be safe than sorry here. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2017-11-06fdt: Implement "fdt-fetch" method for client interfaceAlexey Kardashevskiy1-0/+16
The guest kernel fetches the device tree via the client interface, calling it for every node and property, and traversing the entire tree twice - first to build strings blob, second - to build struct blob. On top of that there is also not so efficient implementation of the "getprop" method - it calls slow "get-property" which does full search for a property. As the result, on a 256 CPU + 256 Intel E1000 virtual devices, the guest's flatten_device_tree() takes roughly 8.5sec. However now we have a FDT rendering helper in SLOF which takes about 350ms to render the FDT. This implements a client interface call to allow the guest to read it during early boot and save time. The produced DTB is almost the same as the guest kernel would have produced itself - the differences are: 1. SLOF creates an empty reserved map; the guest can easily fix it up later; 2. SLOF only reuses 40 most popular strings; the guest reuses everything it can - on a 256CPU + 256 PCI devices guest, the difference is about 20KB for 350KB FDT blob. Note, that the guest also ditches the "name" property just like SLOF does: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/powerpc/kernel/prom_init.c?h=v4.13#n2302 Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> --- If the guest tries "fdt-fetch" and SLOF does not have it, than SLOF prints an error: === copying OF device tree... fdt-fetch NOT FOUNDBuilding dt strings... Building dt structure... === and the guest continues with the old method. We could suppress SLOF error for such unlikely situation though.