From: "Todd T. Fries" <todd@fries.net>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] Patch: block-raw.c for OpenBSD
Date: Tue, 20 Mar 2007 21:35:54 -0500 [thread overview]
Message-ID: <20070321023552.GA24325@fries.net> (raw)
This is relative to the 20070319 snapshot, mostly from Enache Adrian,
3n4ch3 at gmail dot com ..
--- block-raw.c.orig Mon Mar 12 16:16:47 2007
+++ block-raw.c Tue Mar 20 19:16:43 2007
@@ -25,7 +25,9 @@
#include "block_int.h"
#include <assert.h>
#ifndef _WIN32
+#ifndef CONFIG_NO_AIO
#include <aio.h>
+#endif
#ifndef QEMU_TOOL
#include "exec-all.h"
@@ -53,10 +55,16 @@
#include <linux/cdrom.h>
#include <linux/fd.h>
#endif
-#ifdef __FreeBSD__
+#ifdef __FreeBSD__
#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 +166,7 @@ static int raw_pwrite(BlockDriverState *
}
/***********************************************************/
+#ifndef CONFIG_NO_AIO
/* Unix AIO using POSIX AIO */
typedef struct RawAIOCB {
@@ -380,6 +389,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 +439,25 @@ 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 (uint64_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;
@@ -445,6 +502,7 @@ static int64_t raw_getlength(BlockDrive
}
return size;
}
+#endif
static int raw_create(const char *filename, int64_t total_size,
const char *backing_file, int flags)
@@ -479,11 +537,13 @@ BlockDriver bdrv_raw = {
raw_close,
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,
@@ -815,11 +875,13 @@ BlockDriver bdrv_host_device = {
raw_close,
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,
--
Todd Fries .. todd@fries.net
_____________________________________________
| \ 1.636.410.0632 (voice)
| Free Daemon Consulting, LLC \ 1.405.227.9094 (voice)
| http://FreeDaemonConsulting.com \ 1.866.792.3418 (FAX)
| "..in support of free software solutions." \ 250797 (FWD)
| \
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
37E7 D3EB 74D0 8D66 A68D B866 0326 204E 3F42 004A
http://todd.fries.net/pgp.txt
next reply other threads:[~2007-03-21 2:38 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-21 2:35 Todd T. Fries [this message]
2007-04-02 10:01 ` [Qemu-devel] Patch: block-raw.c for OpenBSD Thiemo Seufer
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=20070321023552.GA24325@fries.net \
--to=todd@fries.net \
--cc=qemu-devel@nongnu.org \
/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.