aboutsummaryrefslogtreecommitdiff
path: root/pc-bios/s390-ccw/s390-ccw.h
diff options
context:
space:
mode:
authorThomas Huth <thuth@redhat.com>2018-04-20 11:30:42 +0200
committerThomas Huth <thuth@redhat.com>2018-05-02 11:27:14 +0200
commit9a848adf45d6732e62551decb3c0255173090767 (patch)
treeaab37fe0d824198aa9777e3df7dccdb3aca0779d /pc-bios/s390-ccw/s390-ccw.h
parent0c18822953011ec0a3038c8a5eca1803b72a213e (diff)
downloadqemu-9a848adf45d6732e62551decb3c0255173090767.zip
qemu-9a848adf45d6732e62551decb3c0255173090767.tar.gz
qemu-9a848adf45d6732e62551decb3c0255173090767.tar.bz2
pc-bios/s390-ccw/net: Use diag308 to reset machine before jumping to the OS
The netboot firmware so far simply jumped directly into the OS kernel after the download has been completed. This, however, bears the risk that the virtio-net device still might be active in the background and incoming packets are still placed into the buffers - which could destroy memory of the now-running Linux kernel in case it did not take over the device fast enough. Also the SCLP console is not put into a well-defined state here. We should hand over the system in a clean state when jumping into the kernel, so let's use the same mechanism as it's done in the main s390-ccw firmware and reset the machine with diag308 into a clean state before jumping into the OS kernel code. To be able to share the code with the main s390-ccw firmware, the related functions are now extracted from bootmap.c into a new file called jump2ipl.c. Since we now also set the boot device schid at address 184 for the network boot device, this patch also slightly changes the way how we detect the entry points for non-ELF binary images: The code now looks for the "S390EP" magic first and then jumps to 0x10000 in case it has been found. This is necessary for booting from network devices, since the normal kernel code (where the PSW at ddress 0 points to) tries to do a block load from the boot device. This of course fails for a virtio-net device and causes the kernel to abort with a panic-PSW silently. Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
Diffstat (limited to 'pc-bios/s390-ccw/s390-ccw.h')
-rw-r--r--pc-bios/s390-ccw/s390-ccw.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h
index a1bdb4c..9828aa2 100644
--- a/pc-bios/s390-ccw/s390-ccw.h
+++ b/pc-bios/s390-ccw/s390-ccw.h
@@ -87,6 +87,10 @@ ulong get_second(void);
/* bootmap.c */
void zipl_load(void);
+/* jump2ipl.c */
+void jump_to_IPL_code(uint64_t address);
+void jump_to_low_kernel(void);
+
/* menu.c */
void menu_set_parms(uint8_t boot_menu_flag, uint32_t boot_menu_timeout);
int menu_get_zipl_boot_index(const char *menu_data);