All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: qemu-devel@nongnu.org
Cc: xen-devel@lists.xensource.com, Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 5/7] xen: add block device backend driver.
Date: Mon, 28 Jul 2008 09:25:22 -0500	[thread overview]
Message-ID: <488DD6D2.8020702@codemonkey.ws> (raw)
In-Reply-To: <1217251078-6591-6-git-send-email-kraxel@redhat.com>

Gerd Hoffmann wrote:
> This patch adds a block device backend driver to qemu.  It is a pure
> userspace implemention using the gntdev interface.  It uses "qdisk" as
> backend name in xenstore so it doesn't interfere with the other existing
> backends (blkback aka "vbd" and tapdisk aka "tap").
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  Makefile.target  |    2 +-
>  hw/xen-backend.h |    2 +
>  hw/xen-blkif.h   |  103 ++++++++
>  hw/xen-disk.c    |  681 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  hw/xen-machine.c |    1 +
>  sysemu.h         |    2 +-
>  vl.c             |    4 +
>  7 files changed, 793 insertions(+), 2 deletions(-)
>  create mode 100644 hw/xen-blkif.h
>  create mode 100644 hw/xen-disk.c
>
> diff --git a/Makefile.target b/Makefile.target
> index 66d41ee..2d599d2 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -517,7 +517,7 @@ endif
>  
>  # xen backend driver support
>  XEN_OBJS := xen-machine.o xen-backend.o
> -XEN_OBJS += xen-console.o xen-framebuffer.o
> +XEN_OBJS += xen-console.o xen-framebuffer.o xen-disk.o
>  ifeq ($(CONFIG_XEN), yes)
>    OBJS += $(XEN_OBJS)
>    LIBS += $(XEN_LIBS)
> diff --git a/hw/xen-backend.h b/hw/xen-backend.h
> index 3facf90..941b0a6 100644
> --- a/hw/xen-backend.h
> +++ b/hw/xen-backend.h
> @@ -10,6 +10,7 @@
>  
>  #include "hw.h"
>  #include "xen.h"
> +#include "sysemu.h"
>  
>  /*
>   * tweaks needed to build with different xen versions
> @@ -118,6 +119,7 @@ void xen_be_printf(struct xendev *xendev, int msg_level, const char *fmt, ...)
>  struct devops xen_console_ops;      /* xen_console.c     */
>  struct devops xen_kbdmouse_ops;     /* xen_framebuffer.c */
>  struct devops xen_framebuffer_ops;  /* xen_framebuffer.c */
> +struct devops xen_blkdev_ops;       /* xen_disk.c        */
>  
>  void xen_set_display(int domid, DisplayState *ds);
>  
> diff --git a/hw/xen-blkif.h b/hw/xen-blkif.h
> new file mode 100644
> index 0000000..254a5fd
> --- /dev/null
> +++ b/hw/xen-blkif.h
> @@ -0,0 +1,103 @@
> +#ifndef __XEN_BLKIF_H__
> +#define __XEN_BLKIF_H__
> +
> +#include <xen/io/ring.h>
> +#include <xen/io/blkif.h>
> +#include <xen/io/protocols.h>
> +
> +/* Not a real protocol.  Used to generate ring structs which contain
> + * the elements common to all protocols only.  This way we get a
> + * compiler-checkable way to use common struct elements, so we can
> + * avoid using switch(protocol) in a number of places.  */
> +struct blkif_common_request {
> +	char dummy;
> +};
> +struct blkif_common_response {
> +	char dummy;
> +};
> +
> +/* i386 protocol version */
> +#pragma pack(push, 4)
> +struct blkif_x86_32_request {
> +	uint8_t        operation;    /* BLKIF_OP_???                         */
> +	uint8_t        nr_segments;  /* number of segments                   */
> +	blkif_vdev_t   handle;       /* only for read/write requests         */
> +	uint64_t       id;           /* private guest value, echoed in resp  */
> +	blkif_sector_t sector_number;/* start sector idx on disk (r/w only)  */
> +	struct blkif_request_segment seg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
> +};
> +struct blkif_x86_32_response {
> +	uint64_t        id;              /* copied from request */
> +	uint8_t         operation;       /* copied from request */
> +	int16_t         status;          /* BLKIF_RSP_???       */
> +};
> +typedef struct blkif_x86_32_request blkif_x86_32_request_t;
> +typedef struct blkif_x86_32_response blkif_x86_32_response_t;
> +#pragma pack(pop)
> +
> +/* x86_64 protocol version */
> +struct blkif_x86_64_request {
> +	uint8_t        operation;    /* BLKIF_OP_???                         */
> +	uint8_t        nr_segments;  /* number of segments                   */
> +	blkif_vdev_t   handle;       /* only for read/write requests         */
> +	uint64_t       __attribute__((__aligned__(8))) id;
> +	blkif_sector_t sector_number;/* start sector idx on disk (r/w only)  */
> +	struct blkif_request_segment seg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
> +};
> +struct blkif_x86_64_response {
> +	uint64_t       __attribute__((__aligned__(8))) id;
> +	uint8_t         operation;       /* copied from request */
> +	int16_t         status;          /* BLKIF_RSP_???       */
> +};
> +typedef struct blkif_x86_64_request blkif_x86_64_request_t;
> +typedef struct blkif_x86_64_response blkif_x86_64_response_t;
> +
> +DEFINE_RING_TYPES(blkif_common, struct blkif_common_request, struct blkif_common_response);
> +DEFINE_RING_TYPES(blkif_x86_32, struct blkif_x86_32_request, struct blkif_x86_32_response);
> +DEFINE_RING_TYPES(blkif_x86_64, struct blkif_x86_64_request, struct blkif_x86_64_response);
> +
> +union blkif_back_rings {
> +	blkif_back_ring_t        native;
> +	blkif_common_back_ring_t common;
> +	blkif_x86_32_back_ring_t x86_32;
> +	blkif_x86_64_back_ring_t x86_64;
> +};
> +typedef union blkif_back_rings blkif_back_rings_t;
> +
> +enum blkif_protocol {
> +	BLKIF_PROTOCOL_NATIVE = 1,
> +	BLKIF_PROTOCOL_X86_32 = 2,
> +	BLKIF_PROTOCOL_X86_64 = 3,
> +};
> +
> +static void inline blkif_get_x86_32_req(blkif_request_t *dst, blkif_x86_32_request_t *src)
> +{
> +	int i, n = BLKIF_MAX_SEGMENTS_PER_REQUEST;
> +
> +	dst->operation = src->operation;
> +	dst->nr_segments = src->nr_segments;
> +	dst->handle = src->handle;
> +	dst->id = src->id;
> +	dst->sector_number = src->sector_number;
> +	if (n > src->nr_segments)
> +		n = src->nr_segments;
> +	for (i = 0; i < n; i++)
> +		dst->seg[i] = src->seg[i];
> +}
> +
> +static void inline blkif_get_x86_64_req(blkif_request_t *dst, blkif_x86_64_request_t *src)
> +{
> +	int i, n = BLKIF_MAX_SEGMENTS_PER_REQUEST;
> +
> +	dst->operation = src->operation;
> +	dst->nr_segments = src->nr_segments;
> +	dst->handle = src->handle;
> +	dst->id = src->id;
> +	dst->sector_number = src->sector_number;
> +	if (n > src->nr_segments)
> +		n = src->nr_segments;
> +	for (i = 0; i < n; i++)
> +		dst->seg[i] = src->seg[i];
> +}
> +
> +#endif /* __XEN_BLKIF_H__ */
> diff --git a/hw/xen-disk.c b/hw/xen-disk.c
> new file mode 100644
> index 0000000..6947363
> --- /dev/null
> +++ b/hw/xen-disk.c
> @@ -0,0 +1,681 @@
> +/*
> + *  xen paravirt block device backend
> + *
> + *  FIXME: the code is designed to handle multiple outstanding
> + *  requests (using aio or using threads), which isn't used right
> + *  now due to limitations of the qemu block driver interface.
> + *
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation; under version 2 of the License.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
> + */
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <stdarg.h>
> +#include <string.h>
> +#include <unistd.h>
> +#include <signal.h>
> +#include <inttypes.h>
> +#include <time.h>
> +#include <fcntl.h>
> +#include <errno.h>
> +#include <pthread.h>
>   

This doesn't seem to be needed?

Regards,

Anthony Liguori

  reply	other threads:[~2008-07-28 14:26 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-28 13:17 [Qemu-devel] [PATCH 0/7] merge some xen bits into qemu Gerd Hoffmann
2008-07-28 13:17 ` Gerd Hoffmann
2008-07-28 13:17 ` [Qemu-devel] [PATCH 1/7] xen: groundwork for xen support Gerd Hoffmann
2008-07-28 13:17   ` Gerd Hoffmann
2008-07-28 14:04   ` [Qemu-devel] " Anthony Liguori
2008-07-28 14:52     ` Gerd Hoffmann
2008-07-29  8:10       ` [Xen-devel] " Daniel P. Berrange
2008-07-29  8:10         ` Daniel P. Berrange
2008-07-29 13:32         ` [Xen-devel] " Anthony Liguori
2008-07-29 13:32           ` Anthony Liguori
2008-07-29 14:24           ` [Xen-devel] " Daniel P. Berrange
2008-07-29 14:24             ` Daniel P. Berrange
2008-07-29 19:11             ` [Xen-devel] " Anthony Liguori
2008-07-29 19:11               ` Anthony Liguori
2008-07-29 21:36               ` [Xen-devel] " Gerd Hoffmann
2008-07-29 21:36                 ` Gerd Hoffmann
2008-07-29 21:48                 ` [Xen-devel] " Anthony Liguori
2008-07-29 21:48                   ` Anthony Liguori
2008-07-29 14:32           ` [Xen-devel] " Gerd Hoffmann
2008-07-29 14:32             ` Gerd Hoffmann
2008-07-28 23:14     ` [Xen-devel] " Samuel Thibault
2008-07-28 23:14       ` Samuel Thibault
2008-07-29  7:38       ` [Xen-devel] " Gerd Hoffmann
2008-07-29  7:38         ` Gerd Hoffmann
2008-07-29  8:12         ` [Xen-devel] " Daniel P. Berrange
2008-07-29  8:12           ` Daniel P. Berrange
2008-07-29  8:55           ` [Xen-devel] " Gerd Hoffmann
2008-07-29  8:55             ` Gerd Hoffmann
2008-07-28 13:17 ` [Qemu-devel] [PATCH 2/7] xen: backend driver core Gerd Hoffmann
2008-07-28 13:17   ` Gerd Hoffmann
2008-07-28 14:13   ` [Qemu-devel] " Anthony Liguori
2008-07-28 15:51     ` Gerd Hoffmann
2008-07-28 13:17 ` [Qemu-devel] [PATCH 3/7] xen: add console backend driver Gerd Hoffmann
2008-07-28 13:17   ` Gerd Hoffmann
2008-07-28 14:17   ` [Qemu-devel] " Anthony Liguori
2008-07-28 15:43     ` Gerd Hoffmann
2008-07-28 19:04       ` Anthony Liguori
2008-07-28 13:17 ` [Qemu-devel] [PATCH 4/7] xen: add framebuffer " Gerd Hoffmann
2008-07-28 13:17   ` Gerd Hoffmann
2008-07-28 14:22   ` [Qemu-devel] " Anthony Liguori
2008-07-28 14:41     ` Andreas Färber
2008-07-28 14:41       ` Andreas Färber
2008-07-30  9:59       ` [Qemu-devel] " Gerd Hoffmann
2008-08-01 14:57         ` Anthony Liguori
2008-07-30  9:20     ` Gerd Hoffmann
2008-07-30  9:20       ` Gerd Hoffmann
2008-07-30 16:31       ` [Qemu-devel] " Markus Armbruster
2008-07-30 16:31         ` Markus Armbruster
2008-08-01 15:05         ` Anthony Liguori
2008-07-28 13:17 ` [Qemu-devel] [PATCH 5/7] xen: add block device " Gerd Hoffmann
2008-07-28 13:17   ` Gerd Hoffmann
2008-07-28 14:25   ` Anthony Liguori [this message]
2008-07-28 13:17 ` [Qemu-devel] [PATCH 6/7] xen: add net " Gerd Hoffmann
2008-07-28 13:17   ` Gerd Hoffmann
2008-07-28 14:27   ` [Qemu-devel] " Anthony Liguori
2008-07-28 15:45     ` Gerd Hoffmann
2008-07-28 13:17 ` [Qemu-devel] [PATCH 7/7] xen: blk & nic configuration via cmd line Gerd Hoffmann
2008-07-28 13:17   ` Gerd Hoffmann
  -- strict thread matches above, loose matches on Subject: below --
2008-08-04 15:50 [Qemu-devel] [PATCH 0/7] merge some xen bits into qemu Gerd Hoffmann
2008-08-04 15:50 ` [Qemu-devel] [PATCH 5/7] xen: add block device backend driver Gerd Hoffmann
2008-08-04 17:26   ` Blue Swirl
2008-08-04 17:37     ` Samuel Thibault
2008-08-04 17:46     ` Anthony Liguori
2008-08-04 19:50     ` Gerd Hoffmann
2008-08-04 20:04       ` Paul Brook
2008-08-05  7:18         ` Gerd Hoffmann
2008-08-04 20:58       ` Blue Swirl
2008-08-05  7:01         ` Gerd Hoffmann
2008-10-28 12:23 [Qemu-devel] [PATCH 0/7] merge some xen bits into qemu Gerd Hoffmann
2008-10-28 12:23 ` [Qemu-devel] [PATCH 5/7] xen: add block device backend driver Gerd Hoffmann

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=488DD6D2.8020702@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=xen-devel@lists.xensource.com \
    /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.