qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] PATCH: add missing (dummy) raw_aio_ioctl() for FreeBSD case
@ 2009-05-01 19:30 Juergen Lock
  2009-05-01 20:05 ` Anthony Liguori
  0 siblings, 1 reply; 7+ messages in thread
From: Juergen Lock @ 2009-05-01 19:30 UTC (permalink / raw)
  To: qemu-devel

Assuming this never actually gets called (yet?), I just added a dummy:

Index: qemu/block-raw-posix.c
@@ -1323,6 +1323,16 @@
 {
     return -ENOTSUP;
 }
+
+#ifdef CONFIG_AIO
+static BlockDriverAIOCB *raw_aio_ioctl(BlockDriverState *bs,
+        unsigned long int req, void *buf,
+        BlockDriverCompletionFunc *cb, void *opaque)
+{
+    return NULL;
+}
+#endif
+
 #else /* !linux && !FreeBSD */
 
 static int fd_open(BlockDriverState *bs)

Signed-off-by: Juergen Lock <nox@jelal.kn-bremen.de>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] PATCH: add missing (dummy) raw_aio_ioctl() for FreeBSD case
  2009-05-01 19:30 [Qemu-devel] PATCH: add missing (dummy) raw_aio_ioctl() for FreeBSD case Juergen Lock
@ 2009-05-01 20:05 ` Anthony Liguori
  2009-05-01 20:18   ` M. Warner Losh
  0 siblings, 1 reply; 7+ messages in thread
From: Anthony Liguori @ 2009-05-01 20:05 UTC (permalink / raw)
  To: Juergen Lock; +Cc: qemu-devel

Juergen Lock wrote:
> Assuming this never actually gets called (yet?), I just added a dummy:
>   

I'd suggest not --disable-aio on FreeBSD.

Certainly, FreeBSD has a working pthread, right?

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] PATCH: add missing (dummy) raw_aio_ioctl() for FreeBSD case
  2009-05-01 20:05 ` Anthony Liguori
@ 2009-05-01 20:18   ` M. Warner Losh
  2009-05-01 21:19     ` Juergen Lock
  0 siblings, 1 reply; 7+ messages in thread
From: M. Warner Losh @ 2009-05-01 20:18 UTC (permalink / raw)
  To: anthony; +Cc: nox, qemu-devel

In message: <49FB55ED.7050005@codemonkey.ws>
            Anthony Liguori <anthony@codemonkey.ws> writes:
: Juergen Lock wrote:
: > Assuming this never actually gets called (yet?), I just added a dummy:
: >   
: 
: I'd suggest not --disable-aio on FreeBSD.
: 
: Certainly, FreeBSD has a working pthread, right?

Yes...

Warner

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] PATCH: add missing (dummy) raw_aio_ioctl() for FreeBSD case
  2009-05-01 20:18   ` M. Warner Losh
@ 2009-05-01 21:19     ` Juergen Lock
  2009-05-01 21:52       ` Christoph Hellwig
  0 siblings, 1 reply; 7+ messages in thread
From: Juergen Lock @ 2009-05-01 21:19 UTC (permalink / raw)
  To: M. Warner Losh; +Cc: qemu-devel

On Fri, May 01, 2009 at 02:18:52PM -0600, M. Warner Losh wrote:
> In message: <49FB55ED.7050005@codemonkey.ws>
>             Anthony Liguori <anthony@codemonkey.ws> writes:
> : Juergen Lock wrote:
> : > Assuming this never actually gets called (yet?), I just added a dummy:
> : >   
> : 
> : I'd suggest not --disable-aio on FreeBSD.
> : 
> : Certainly, FreeBSD has a working pthread, right?
> 
> Yes...

Oh, we are using aio afaict, at least configure says
	...
	AIO support       yes
	...
- but isn't this raw_aio_ioctl() only used for SG_IO i.e. scsi passthru?
(which isn't implemented for FreeBSD yet because doing direct scsi
commands from userland works differently there than on linux.)

 Or am I confused? :)

	Juergen

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] PATCH: add missing (dummy) raw_aio_ioctl() for FreeBSD case
  2009-05-01 21:19     ` Juergen Lock
@ 2009-05-01 21:52       ` Christoph Hellwig
  2009-05-02 14:30         ` Juergen Lock
  0 siblings, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2009-05-01 21:52 UTC (permalink / raw)
  To: Juergen Lock; +Cc: qemu-devel

On Fri, May 01, 2009 at 11:19:18PM +0200, Juergen Lock wrote:
> Oh, we are using aio afaict, at least configure says
> 	...
> 	AIO support       yes
> 	...
> - but isn't this raw_aio_ioctl() only used for SG_IO i.e. scsi passthru?
> (which isn't implemented for FreeBSD yet because doing direct scsi
> commands from userland works differently there than on linux.)
> 
>  Or am I confused? :)

You're not.  Currently aio_ioctl is only used for SG_IO.  But I don't
think wiring up for freebsd would hurt.  The actual posix-aio-compat.c
code for it is compiled on freebsd anyway, so hooking it up is easy,
and you're prepared if other users pop up.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] PATCH: add missing (dummy) raw_aio_ioctl() for FreeBSD case
  2009-05-01 21:52       ` Christoph Hellwig
@ 2009-05-02 14:30         ` Juergen Lock
  2009-05-02 18:01           ` Christoph Hellwig
  0 siblings, 1 reply; 7+ messages in thread
From: Juergen Lock @ 2009-05-02 14:30 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: qemu-devel

On Fri, May 01, 2009 at 11:52:26PM +0200, Christoph Hellwig wrote:
> On Fri, May 01, 2009 at 11:19:18PM +0200, Juergen Lock wrote:
> > Oh, we are using aio afaict, at least configure says
> > 	...
> > 	AIO support       yes
> > 	...
> > - but isn't this raw_aio_ioctl() only used for SG_IO i.e. scsi passthru?
> > (which isn't implemented for FreeBSD yet because doing direct scsi
> > commands from userland works differently there than on linux.)
> > 
> >  Or am I confused? :)
> 
> You're not.  Currently aio_ioctl is only used for SG_IO.  But I don't
> think wiring up for freebsd would hurt.  The actual posix-aio-compat.c
> code for it is compiled on freebsd anyway, so hooking it up is easy,
> and you're prepared if other users pop up.

Alright I can do that too...  Tho in that case I'd say raw_ioctl() needs
to be hooked up too:

Index: qemu/block-raw-posix.c
@@ -1321,8 +1321,44 @@
 
 static int raw_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
 {
-    return -ENOTSUP;
+    BDRVRawState *s = bs->opaque;
+
+    return ioctl(s->fd, req, buf);
+}
+
+#ifdef CONFIG_AIO
+static BlockDriverAIOCB *raw_aio_ioctl(BlockDriverState *bs,
+        unsigned long int req, void *buf,
+        BlockDriverCompletionFunc *cb, void *opaque)
+{
+    BDRVRawState *s = bs->opaque;
+    RawAIOCB *acb;
+
+    if (fd_open(bs) < 0)
+        return NULL;
+
+    acb = qemu_aio_get(bs, cb, opaque);
+    if (!acb)
+        return NULL;
+    acb->aiocb.aio_fildes = s->fd;
+    acb->aiocb.ev_signo = SIGUSR2;
+    acb->aiocb.aio_offset = 0;
+    acb->aiocb.aio_flags = 0;
+
+    acb->next = posix_aio_state->first_aio;
+    posix_aio_state->first_aio = acb;
+
+    acb->aiocb.aio_ioctl_buf = buf;
+    acb->aiocb.aio_ioctl_cmd = req;
+    if (qemu_paio_ioctl(&acb->aiocb) < 0) {
+        raw_aio_remove(acb);
+        return NULL;
+    }
+
+    return &acb->common;
 }
+#endif
+
 #else /* !linux && !FreeBSD */
 
 static int fd_open(BlockDriverState *bs)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] PATCH: add missing (dummy) raw_aio_ioctl() for FreeBSD case
  2009-05-02 14:30         ` Juergen Lock
@ 2009-05-02 18:01           ` Christoph Hellwig
  0 siblings, 0 replies; 7+ messages in thread
From: Christoph Hellwig @ 2009-05-02 18:01 UTC (permalink / raw)
  To: Juergen Lock; +Cc: Christoph Hellwig, qemu-devel

On Sat, May 02, 2009 at 04:30:45PM +0200, Juergen Lock wrote:
>  
>  static int raw_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
>  {
> -    return -ENOTSUP;
> +    BDRVRawState *s = bs->opaque;
> +
> +    return ioctl(s->fd, req, buf);
> +}
> +
> +#ifdef CONFIG_AIO
> +static BlockDriverAIOCB *raw_aio_ioctl(BlockDriverState *bs,
> +        unsigned long int req, void *buf,
> +        BlockDriverCompletionFunc *cb, void *opaque)
> +{
> +    BDRVRawState *s = bs->opaque;
> +    RawAIOCB *acb;
> +
> +    if (fd_open(bs) < 0)
> +        return NULL;
> +
> +    acb = qemu_aio_get(bs, cb, opaque);
> +    if (!acb)
> +        return NULL;
> +    acb->aiocb.aio_fildes = s->fd;
> +    acb->aiocb.ev_signo = SIGUSR2;
> +    acb->aiocb.aio_offset = 0;
> +    acb->aiocb.aio_flags = 0;
> +
> +    acb->next = posix_aio_state->first_aio;
> +    posix_aio_state->first_aio = acb;
> +
> +    acb->aiocb.aio_ioctl_buf = buf;
> +    acb->aiocb.aio_ioctl_cmd = req;
> +    if (qemu_paio_ioctl(&acb->aiocb) < 0) {
> +        raw_aio_remove(acb);
> +        return NULL;
> +    }
> +
> +    return &acb->common;
>  }
> +#endif

Shouldn't we just make these implementations totally unconditional
(bdrv_ioctl) or conditional on CONFIG_AIO only (bdrv_aio_ioctl)?

I can't think of any Posix-ish operating system that wouldn't provide
the ioctl system call.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2009-05-02 18:02 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-01 19:30 [Qemu-devel] PATCH: add missing (dummy) raw_aio_ioctl() for FreeBSD case Juergen Lock
2009-05-01 20:05 ` Anthony Liguori
2009-05-01 20:18   ` M. Warner Losh
2009-05-01 21:19     ` Juergen Lock
2009-05-01 21:52       ` Christoph Hellwig
2009-05-02 14:30         ` Juergen Lock
2009-05-02 18:01           ` Christoph Hellwig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).