Skip to content

Commit

Permalink
s390/ipl: Fix waiting for virtio processing
Browse files Browse the repository at this point in the history
The guest side must not manipulate the index for the used buffers. Instead,
remember the state of the used buffer locally and wait until it has moved.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Acked-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
  • Loading branch information
cohuck authored and borntraeger committed Sep 20, 2013
1 parent abd137a commit 441ea69
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 3 deletions.
7 changes: 4 additions & 3 deletions pc-bios/s390-ccw/virtio.c
Expand Up @@ -123,6 +123,7 @@ static void vring_init(struct vring *vr, unsigned int num, void *p,
/* We're running with interrupts off anyways, so don't bother */
vr->used->flags = VRING_USED_F_NO_NOTIFY;
vr->used->idx = 0;
vr->used_idx = 0;

debug_print_addr("init vr", vr);
}
Expand Down Expand Up @@ -150,8 +151,6 @@ static void vring_send_buf(struct vring *vr, void *p, int len, int flags)
if (!(flags & VRING_DESC_F_NEXT)) {
vr->avail->idx++;
}

vr->used->idx = vr->next_idx;
}

static u64 get_clock(void)
Expand Down Expand Up @@ -180,7 +179,8 @@ static int vring_wait_reply(struct vring *vr, int timeout)
struct subchannel_id schid = vr->schid;
int r = 0;

while (vr->used->idx == vr->next_idx) {
/* Wait until the used index has moved. */
while (vr->used->idx == vr->used_idx) {
vring_notify(schid);
if (timeout && (get_second() >= target_second)) {
r = 1;
Expand All @@ -189,6 +189,7 @@ static int vring_wait_reply(struct vring *vr, int timeout)
yield();
}

vr->used_idx = vr->used->idx;
vr->next_idx = 0;
vr->desc[0].len = 0;
vr->desc[0].flags = 0;
Expand Down
1 change: 1 addition & 0 deletions pc-bios/s390-ccw/virtio.h
Expand Up @@ -115,6 +115,7 @@ struct vring_used {
struct vring {
unsigned int num;
int next_idx;
int used_idx;
struct vring_desc *desc;
struct vring_avail *avail;
struct vring_used *used;
Expand Down

0 comments on commit 441ea69

Please sign in to comment.