[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 03/17] s390/ipl: Fix waiting for virtio processing
From: |
Christian Borntraeger |
Subject: |
[Qemu-devel] [PULL 03/17] s390/ipl: Fix waiting for virtio processing |
Date: |
Tue, 24 Sep 2013 09:27:37 +0200 |
From: Cornelia Huck <address@hidden>
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 <address@hidden>
Acked-by: Alexander Graf <address@hidden>
Signed-off-by: Christian Borntraeger <address@hidden>
---
pc-bios/s390-ccw/virtio.c | 7 ++++---
pc-bios/s390-ccw/virtio.h | 1 +
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c
index 49f2d29..4d6e48f 100644
--- a/pc-bios/s390-ccw/virtio.c
+++ b/pc-bios/s390-ccw/virtio.c
@@ -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);
}
@@ -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)
@@ -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;
@@ -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;
diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h
index 86fdd57..772a63f 100644
--- a/pc-bios/s390-ccw/virtio.h
+++ b/pc-bios/s390-ccw/virtio.h
@@ -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;
--
1.8.3.1
- [Qemu-devel] [PULL 00/17] s390 patches, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 09/17] s390/sclpconsole: Add code to support live migration for sclpconsole, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 17/17] s390/sclplmconsole: Add support for SCLP line-mode console, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 10/17] s390/sclpquiesce: Add code to support live migration, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 11/17] s390/sclp: add reset() functions, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 12/17] s390/eventfacility: fix multiple Read Event Data sources, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 13/17] s390/eventfacility: Fix receive/send masks, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 16/17] s390/ebcdic: Move conversion tables to header file, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 14/17] s390/eventfacility: remove unused event_type variable, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 05/17] s390/cpu: Make setcc() function available to other files, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 03/17] s390/ipl: Fix waiting for virtio processing,
Christian Borntraeger <=
- [Qemu-devel] [PULL 15/17] s390/eventfacility: allow childs to handle more than 1 event type, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 08/17] s390/sclpconsole: modify definition of input buffer, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 02/17] s390/dump: zero out padding bytes in notes sections, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 01/17] s390/kvm: Add check for priviledged SCLP handler, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 07/17] s390/kexec: Implement diag308 subcode 0, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 04/17] s390/ipl: Update the s390-ccw.img rom, Christian Borntraeger, 2013/09/24
- [Qemu-devel] [PULL 06/17] s390/ioinst: Moved the CC setting to the IO instruction handlers, Christian Borntraeger, 2013/09/24
- Re: [Qemu-devel] [PULL 00/17] s390 patches, Alexander Graf, 2013/09/25