On 13/02/14 16:15, Richard Henderson wrote: > On 02/13/2014 01:17 AM, Christian Borntraeger wrote: >> The current code does not initialize next_idx as the qemu >> elf loader does not zero the bss section. >> Make the initialization explicit. >> >> Signed-off-by: Christian Borntraeger <borntrae...@de.ibm.com> >> --- >> pc-bios/s390-ccw/virtio.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c >> index 4d6e48f..a46914d 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); >> } >> > > FWIW, I believe that rom_reset needs to do this re-zeroing of the bss. > That seems to be the only place we don't take care for datasize != romsize. >
Indeed, initializing the data as in my patches isnt wrong (and allows to move that structures around e.g. from a global variable to stack), so it still makes sense to apply both patches, but the main problem was that the bss section is not cleared on reset. So we need to memset from rom->data+rom->datasize to rom->data+rom->romsize to avoid more of these kind of problems in an add-on patch. Christian