diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-02-14 09:23:14 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-02-14 09:23:14 +0000 |
commit | 20457bb88157c63901c0b1b7219bf084d4bac2a6 (patch) | |
tree | f14e2c33d8f21c696924b1d98305664a7d93f63b | |
parent | fdbcfd71bbc84b9e44bc0c79489b750109a380d0 (diff) | |
download | xen-20457bb88157c63901c0b1b7219bf084d4bac2a6.tar.gz xen-20457bb88157c63901c0b1b7219bf084d4bac2a6.tar.bz2 xen-20457bb88157c63901c0b1b7219bf084d4bac2a6.zip |
stubdom: optimize block io completion polling by not polling all the
time; only when some requests have completed.
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
-rw-r--r-- | extras/mini-os/blkfront.c | 5 | ||||
-rw-r--r-- | tools/ioemu/block-vbd.c | 10 |
2 files changed, 12 insertions, 3 deletions
diff --git a/extras/mini-os/blkfront.c b/extras/mini-os/blkfront.c index b83d5af345..1021bb018f 100644 --- a/extras/mini-os/blkfront.c +++ b/extras/mini-os/blkfront.c @@ -327,6 +327,11 @@ int blkfront_aio_poll(struct blkfront_dev *dev) struct blkif_response *rsp; moretodo: +#ifdef HAVE_LIBC + files[dev->fd].read = 0; + mb(); /* Make sure to let the handler set read to 1 before we start looking at the ring */ +#endif + rp = dev->ring.sring->rsp_prod; rmb(); /* Ensure we see queued responses up to 'rp'. */ cons = dev->ring.rsp_cons; diff --git a/tools/ioemu/block-vbd.c b/tools/ioemu/block-vbd.c index 9cb97255e6..5561cf1787 100644 --- a/tools/ioemu/block-vbd.c +++ b/tools/ioemu/block-vbd.c @@ -67,6 +67,12 @@ static int vbd_probe(const uint8_t *buf, int buf_size, const char *filename) return 100; } +static void vbd_io_completed(void *opaque) +{ + BDRVVbdState *s = opaque; + blkfront_aio_poll(s->dev); +} + static int vbd_open(BlockDriverState *bs, const char *filename, int flags) { BDRVVbdState *s = bs->opaque; @@ -85,6 +91,7 @@ static int vbd_open(BlockDriverState *bs, const char *filename, int flags) } s->fd = blkfront_open(s->dev); + qemu_set_fd_handler(s->fd, vbd_io_completed, NULL, s); QEMU_LIST_INSERT_HEAD(&vbds, s, list); @@ -102,9 +109,6 @@ void qemu_aio_init(void) void qemu_aio_poll(void) { - BDRVVbdState *s; - for (s = vbds.lh_first; s; s = s->list.le_next) - blkfront_aio_poll(s->dev); } /* Wait for all IO requests to complete. */ |