All of lore.kernel.org
 help / color / mirror / Atom feed
From: Enache Adrian <3n4ch3@gmail.com>
To: todd@fries.net, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] support for non aio host os's?
Date: Sat, 17 Mar 2007 01:38:27 +0200	[thread overview]
Message-ID: <45fb2a80.36998767.1d9a.7e60@mx.google.com> (raw)
In-Reply-To: <20070316213135.GA32640@fries.net>

On Fri, Mar 16, 2007 at 04:31:36PM -0500, Todd T. Fries wrote:
> .. so now that aio is in, and whatever existed before is out, has anybody
> come up with a way to support host os's that do not have aio?

This is what I'm using.
Just manage to have '#define CONFIG_NO_AIO 1' in ./config-host.h.

Patch is against qemu-cvs, and also includes a raw_getlength()
function that works with disk devices on OpenBSD.

Adi

--- /home/src/qemu/block-raw.c	Sat Jan 20 14:10:33 2007
+++ ./block-raw.c	Sat Mar 17 01:34:36 2007
@@ -25,7 +25,10 @@
 #include "block_int.h"
 #include <assert.h>
 #ifndef _WIN32
+
+#ifndef CONFIG_NO_AIO
 #include <aio.h>
+#endif
 
 #ifndef QEMU_TOOL
 #include "exec-all.h"
@@ -57,6 +60,13 @@
 #include <sys/disk.h>
 #endif
 
+#ifdef __OpenBSD__
+#include <sys/ioctl.h>
+#include <sys/disklabel.h>
+#include <sys/dkio.h>
+#endif
+
+
 //#define DEBUG_FLOPPY
 
 #define FTYPE_FILE   0
@@ -158,6 +168,7 @@ static int raw_pwrite(BlockDriverState *
 }
 
 /***********************************************************/
+#ifndef CONFIG_NO_AIO
 /* Unix AIO using POSIX AIO */
 
 typedef struct RawAIOCB {
@@ -380,6 +391,37 @@ static void raw_aio_cancel(BlockDriverAI
     }
 }
 
+#else /* !CONFIG_NO_AIO */
+
+void qemu_aio_init(void)
+{
+}
+
+void qemu_aio_poll(void)
+{
+}
+
+void qemu_aio_flush(void)
+{
+}
+
+void qemu_aio_wait_start(void)
+{
+}
+
+void qemu_aio_wait(void)
+{
+#ifndef QEMU_TOOL
+    qemu_bh_poll();
+#endif
+}
+
+void qemu_aio_wait_end(void)
+{
+}
+
+#endif /* !CONFIG_NO_AIO */
+
 static void raw_close(BlockDriverState *bs)
 {
     BDRVRawState *s = bs->opaque;
@@ -399,8 +441,28 @@ static int raw_truncate(BlockDriverState
     return 0;
 }
 
+#ifdef __OpenBSD__
+
 static int64_t  raw_getlength(BlockDriverState *bs)
 {
+    int fd = ((BDRVRawState*)bs->opaque)->fd;
+    struct stat st;
+    if(fstat(fd, &st))
+	return -1;
+    if(S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode)){
+	struct disklabel dl;
+	if(ioctl(fd, DIOCGDINFO, &dl))
+	    return -1;
+	return (int64_t)dl.d_secsize *
+		dl.d_partitions[DISKPART(st.st_rdev)].p_size;
+    }else
+	return st.st_size;
+}
+
+#else /* !__OpenBSD__ */
+
+static int64_t  raw_getlength(BlockDriverState *bs)
+{
     BDRVRawState *s = bs->opaque;
     int fd = s->fd;
     int64_t size;
@@ -446,6 +508,8 @@ static int64_t  raw_getlength(BlockDrive
     return size;
 }
 
+#endif /* !__OpenBSD__ */
+
 static int raw_create(const char *filename, int64_t total_size,
                       const char *backing_file, int flags)
 {
@@ -480,10 +544,12 @@ BlockDriver bdrv_raw = {
     raw_create,
     raw_flush,
     
+#ifndef CONFIG_NO_AIO
     .bdrv_aio_read = raw_aio_read,
     .bdrv_aio_write = raw_aio_write,
     .bdrv_aio_cancel = raw_aio_cancel,
     .aiocb_size = sizeof(RawAIOCB),
+#endif /* !CONFIG_NO_AIO */
     .protocol_name = "file",
     .bdrv_pread = raw_pread,
     .bdrv_pwrite = raw_pwrite,
@@ -816,10 +882,12 @@ BlockDriver bdrv_host_device = {
     NULL,
     raw_flush,
     
+#ifndef CONFIG_NO_AIO
     .bdrv_aio_read = raw_aio_read,
     .bdrv_aio_write = raw_aio_write,
     .bdrv_aio_cancel = raw_aio_cancel,
     .aiocb_size = sizeof(RawAIOCB),
+#endif /* !CONFIG_NO_AIO */
     .bdrv_pread = raw_pread,
     .bdrv_pwrite = raw_pwrite,
     .bdrv_getlength = raw_getlength,

      reply	other threads:[~2007-03-16 23:40 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-16 21:31 [Qemu-devel] support for non aio host os's? Todd T. Fries
2007-03-16 23:38 ` Enache Adrian [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45fb2a80.36998767.1d9a.7e60@mx.google.com \
    --to=3n4ch3@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=todd@fries.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.