From d1028f1b5b4cf83e8af5f48996cf392fb12d391a Mon Sep 17 00:00:00 2001 From: Christian Borntraeger Date: Wed, 12 Feb 2014 16:17:35 +0100 Subject: s390-ccw.img: Fix sporadic reboot hangs: Initialize next_idx The current code does not initialize next_idx in the virtio ring. As the ccw bios will always use guest memory at a fixed location, this queue might != 0 after a reboot. Lets make the initialization explicit. Signed-off-by: Christian Borntraeger Reviewed-by: Cornelia Huck --- pc-bios/s390-ccw/virtio.c | 1 + 1 file changed, 1 insertion(+) (limited to 'pc-bios') diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 4d6e48fcbe..a46914dd68 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -124,6 +124,7 @@ static void vring_init(struct vring *vr, unsigned int num, void *p, vr->used->flags = VRING_USED_F_NO_NOTIFY; vr->used->idx = 0; vr->used_idx = 0; + vr->next_idx = 0; debug_print_addr("init vr", vr); } -- cgit v1.2.1 From 5d739a4787a53da8d787551c8de27ad39fabdb34 Mon Sep 17 00:00:00 2001 From: Christian Borntraeger Date: Tue, 11 Feb 2014 22:46:53 +0100 Subject: s390-ccw.img: Fix sporadic errors with ccw boot image - initialize css We have to set the cssid to 0, otherwise the stsch code will return an operand exception without the m bit. In the same way we should set m=0. This case was triggered in some cases during reboot, if for some reason the location of blk_schid.cssid contains 1 and m was 0. Turns out that the qemu elf loader does not zero out the bss section on reboot. The symptom was an dump of the old kernel with several areas overwritten. The bootloader does not register a program check handler, so bios exception jumped back into the old kernel. Lets just use a local struct with a designed initializer. That will guarantee that all other subelements are initialized to 0. Signed-off-by: Christian Borntraeger Reviewed-by: Cornelia Huck --- pc-bios/s390-ccw/main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'pc-bios') diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index c5d533231b..5c33766533 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -10,7 +10,6 @@ #include "s390-ccw.h" -struct subchannel_id blk_schid; char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); uint64_t boot_value; @@ -23,13 +22,13 @@ void virtio_panic(const char *string) static void virtio_setup(uint64_t dev_info) { + struct subchannel_id blk_schid = { .one = 1 }; struct schib schib; int i; int r; bool found = false; bool check_devno = false; uint16_t dev_no = -1; - blk_schid.one = 1; if (dev_info != -1) { check_devno = true; -- cgit v1.2.1 From 0ca3611221d8d80bcf98337f4691addc07df0b08 Mon Sep 17 00:00:00 2001 From: Christian Borntraeger Date: Thu, 13 Feb 2014 09:48:12 +0100 Subject: s390-ccw.img: new binary rom to match latest fixes Signed-off-by: Christian Borntraeger --- pc-bios/s390-ccw.img | Bin 9336 -> 9336 bytes 1 file changed, 0 insertions(+), 0 deletions(-) (limited to 'pc-bios') diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img index 6727f0ca39..f6223e77c2 100644 Binary files a/pc-bios/s390-ccw.img and b/pc-bios/s390-ccw.img differ -- cgit v1.2.1