xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PULL 1/3] xen: fix style of hw/block/xen_blkif.h
       [not found] <alpine.DEB.2.10.1606221246350.2575@sstabellini-ThinkPad-X260>
@ 2016-06-22 11:48 ` Stefano Stabellini
       [not found] ` <1466596120-28350-1-git-send-email-sstabellini@kernel.org>
  2016-06-23 10:18 ` [PULL 0/3] xen-20160622-tag Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Stefano Stabellini @ 2016-06-22 11:48 UTC (permalink / raw)
  To: peter.maydell
  Cc: anthony.perard, Juergen Gross, sstabellini, qemu-devel, xen-devel

From: Juergen Gross <jgross@suse.com>

Fix hw/block/xen_blkif.h to match qemu coding style.

Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
---
 hw/block/xen_blkif.h | 151 +++++++++++++++++++++++++++------------------------
 1 file changed, 81 insertions(+), 70 deletions(-)

diff --git a/hw/block/xen_blkif.h b/hw/block/xen_blkif.h
index e3b133b..7ccf92e 100644
--- a/hw/block/xen_blkif.h
+++ b/hw/block/xen_blkif.h
@@ -5,31 +5,33 @@
 #include <xen/io/blkif.h>
 #include <xen/io/protocols.h>
 
-/* Not a real protocol.  Used to generate ring structs which contain
+/*
+ * 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.  */
+ * avoid using switch(protocol) in a number of places.
+ */
 struct blkif_common_request {
-	char dummy;
+    char dummy;
 };
 struct blkif_common_response {
-	char dummy;
+    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];
+    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_???       */
+    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;
@@ -37,83 +39,92 @@ typedef struct blkif_x86_32_response blkif_x86_32_response_t;
 
 /* 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];
+    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_???       */
+    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);
+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_part;
-        blkif_x86_64_back_ring_t x86_64_part;
+    blkif_back_ring_t        native;
+    blkif_common_back_ring_t common;
+    blkif_x86_32_back_ring_t x86_32_part;
+    blkif_x86_64_back_ring_t x86_64_part;
 };
 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,
+    BLKIF_PROTOCOL_NATIVE = 1,
+    BLKIF_PROTOCOL_X86_32 = 2,
+    BLKIF_PROTOCOL_X86_64 = 3,
 };
 
-static inline void blkif_get_x86_32_req(blkif_request_t *dst, blkif_x86_32_request_t *src)
+static inline void blkif_get_x86_32_req(blkif_request_t *dst,
+                                        blkif_x86_32_request_t *src)
 {
-	int i, n = BLKIF_MAX_SEGMENTS_PER_REQUEST;
+    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;
-	/* Prevent the compiler from using src->... instead. */
-	barrier();
-	if (dst->operation == BLKIF_OP_DISCARD) {
-		struct blkif_request_discard *s = (void *)src;
-		struct blkif_request_discard *d = (void *)dst;
-		d->nr_sectors = s->nr_sectors;
-		return;
-	}
-	if (n > dst->nr_segments)
-		n = dst->nr_segments;
-	for (i = 0; i < n; i++)
-		dst->seg[i] = src->seg[i];
+    dst->operation = src->operation;
+    dst->nr_segments = src->nr_segments;
+    dst->handle = src->handle;
+    dst->id = src->id;
+    dst->sector_number = src->sector_number;
+    /* Prevent the compiler from using src->... instead. */
+    barrier();
+    if (dst->operation == BLKIF_OP_DISCARD) {
+        struct blkif_request_discard *s = (void *)src;
+        struct blkif_request_discard *d = (void *)dst;
+        d->nr_sectors = s->nr_sectors;
+        return;
+    }
+    if (n > dst->nr_segments) {
+        n = dst->nr_segments;
+    }
+    for (i = 0; i < n; i++) {
+        dst->seg[i] = src->seg[i];
+    }
 }
 
-static inline void blkif_get_x86_64_req(blkif_request_t *dst, blkif_x86_64_request_t *src)
+static inline void blkif_get_x86_64_req(blkif_request_t *dst,
+                                        blkif_x86_64_request_t *src)
 {
-	int i, n = BLKIF_MAX_SEGMENTS_PER_REQUEST;
+    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;
-	/* Prevent the compiler from using src->... instead. */
-	barrier();
-	if (dst->operation == BLKIF_OP_DISCARD) {
-		struct blkif_request_discard *s = (void *)src;
-		struct blkif_request_discard *d = (void *)dst;
-		d->nr_sectors = s->nr_sectors;
-		return;
-	}
-	if (n > dst->nr_segments)
-		n = dst->nr_segments;
-	for (i = 0; i < n; i++)
-		dst->seg[i] = src->seg[i];
+    dst->operation = src->operation;
+    dst->nr_segments = src->nr_segments;
+    dst->handle = src->handle;
+    dst->id = src->id;
+    dst->sector_number = src->sector_number;
+    /* Prevent the compiler from using src->... instead. */
+    barrier();
+    if (dst->operation == BLKIF_OP_DISCARD) {
+        struct blkif_request_discard *s = (void *)src;
+        struct blkif_request_discard *d = (void *)dst;
+        d->nr_sectors = s->nr_sectors;
+        return;
+    }
+    if (n > dst->nr_segments) {
+        n = dst->nr_segments;
+    }
+    for (i = 0; i < n; i++) {
+        dst->seg[i] = src->seg[i];
+    }
 }
 
 #endif /* __XEN_BLKIF_H__ */
-- 
1.9.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

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

* [PULL 2/3] xen: fix qdisk BLKIF_OP_DISCARD for 32/64 word size mix
       [not found] ` <1466596120-28350-1-git-send-email-sstabellini@kernel.org>
@ 2016-06-22 11:48   ` Stefano Stabellini
  2016-06-22 11:48   ` [PULL 3/3] xen: move xen_sysdev to xen_backend.c Stefano Stabellini
  1 sibling, 0 replies; 4+ messages in thread
From: Stefano Stabellini @ 2016-06-22 11:48 UTC (permalink / raw)
  To: peter.maydell
  Cc: anthony.perard, Juergen Gross, sstabellini, qemu-devel, xen-devel

From: Juergen Gross <jgross@suse.com>

In case the word size of the domU and qemu running the qdisk backend
differ BLKIF_OP_DISCARD will not work reliably, as the request
structure in the ring have different layouts for different word size.

Correct this by copying the request structure in case of different
word size element by element in the BLKIF_OP_DISCARD case, too.

Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
---
 hw/block/xen_blkif.h | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/hw/block/xen_blkif.h b/hw/block/xen_blkif.h
index 7ccf92e..0738684 100644
--- a/hw/block/xen_blkif.h
+++ b/hw/block/xen_blkif.h
@@ -28,6 +28,14 @@ struct blkif_x86_32_request {
     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_request_discard {
+    uint8_t        operation;        /* BLKIF_OP_DISCARD                     */
+    uint8_t        flag;             /* nr_segments in request struct        */
+    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)  */
+    uint64_t       nr_sectors;       /* # of contiguous sectors to discard   */
+};
 struct blkif_x86_32_response {
     uint64_t        id;              /* copied from request */
     uint8_t         operation;       /* copied from request */
@@ -46,6 +54,14 @@ struct blkif_x86_64_request {
     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_request_discard {
+    uint8_t        operation;        /* BLKIF_OP_DISCARD                     */
+    uint8_t        flag;             /* nr_segments in request struct        */
+    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)  */
+    uint64_t       nr_sectors;       /* # of contiguous sectors to discard   */
+};
 struct blkif_x86_64_response {
     uint64_t       __attribute__((__aligned__(8))) id;
     uint8_t         operation;       /* copied from request */
@@ -88,7 +104,7 @@ static inline void blkif_get_x86_32_req(blkif_request_t *dst,
     /* Prevent the compiler from using src->... instead. */
     barrier();
     if (dst->operation == BLKIF_OP_DISCARD) {
-        struct blkif_request_discard *s = (void *)src;
+        struct blkif_x86_32_request_discard *s = (void *)src;
         struct blkif_request_discard *d = (void *)dst;
         d->nr_sectors = s->nr_sectors;
         return;
@@ -114,7 +130,7 @@ static inline void blkif_get_x86_64_req(blkif_request_t *dst,
     /* Prevent the compiler from using src->... instead. */
     barrier();
     if (dst->operation == BLKIF_OP_DISCARD) {
-        struct blkif_request_discard *s = (void *)src;
+        struct blkif_x86_64_request_discard *s = (void *)src;
         struct blkif_request_discard *d = (void *)dst;
         d->nr_sectors = s->nr_sectors;
         return;
-- 
1.9.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

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

* [PULL 3/3] xen: move xen_sysdev to xen_backend.c
       [not found] ` <1466596120-28350-1-git-send-email-sstabellini@kernel.org>
  2016-06-22 11:48   ` [PULL 2/3] xen: fix qdisk BLKIF_OP_DISCARD for 32/64 word size mix Stefano Stabellini
@ 2016-06-22 11:48   ` Stefano Stabellini
  1 sibling, 0 replies; 4+ messages in thread
From: Stefano Stabellini @ 2016-06-22 11:48 UTC (permalink / raw)
  To: peter.maydell
  Cc: anthony.perard, Juergen Gross, sstabellini, qemu-devel, xen-devel

From: Juergen Gross <jgross@suse.com>

Commit 9432e53a5bc88681b2d3aec4dac9db07c5476d1b added xen_sysdev as a
system device to serve as an anchor for removable virtual buses. This
introduced a build failure for non-x86 builds with CONFIG_XEN_BACKEND
set, as xen_sysdev was defined in a x86 specific file while being
consumed in an architecture independent source.

Move the xen_sysdev definition and initialization to xen_backend.c to
avoid the build failure.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
---
 hw/xen/xen_backend.c      | 41 +++++++++++++++++++++++++++++++++++++++++
 hw/xenpv/xen_machine_pv.c | 40 ----------------------------------------
 2 files changed, 41 insertions(+), 40 deletions(-)

diff --git a/hw/xen/xen_backend.c b/hw/xen/xen_backend.c
index e7ce724..bab79b1 100644
--- a/hw/xen/xen_backend.c
+++ b/hw/xen/xen_backend.c
@@ -26,12 +26,17 @@
 #include <sys/signal.h>
 
 #include "hw/hw.h"
+#include "hw/sysbus.h"
 #include "sysemu/char.h"
 #include "qemu/log.h"
 #include "hw/xen/xen_backend.h"
 
 #include <xen/grant_table.h>
 
+#define TYPE_XENSYSDEV "xensysdev"
+
+DeviceState *xen_sysdev;
+
 /* ------------------------------------------------------------- */
 
 /* public */
@@ -762,6 +767,10 @@ int xen_be_init(void)
         /* Check if xen_init() have been called */
         goto err;
     }
+
+    xen_sysdev = qdev_create(NULL, TYPE_XENSYSDEV);
+    qdev_init_nofail(xen_sysdev);
+
     return 0;
 
 err:
@@ -862,3 +871,35 @@ void xen_be_printf(struct XenDevice *xendev, int msg_level, const char *fmt, ...
     }
     qemu_log_flush();
 }
+
+static int xen_sysdev_init(SysBusDevice *dev)
+{
+    return 0;
+}
+
+static Property xen_sysdev_properties[] = {
+    {/* end of property list */},
+};
+
+static void xen_sysdev_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
+
+    k->init = xen_sysdev_init;
+    dc->props = xen_sysdev_properties;
+}
+
+static const TypeInfo xensysdev_info = {
+    .name          = TYPE_XENSYSDEV,
+    .parent        = TYPE_SYS_BUS_DEVICE,
+    .instance_size = sizeof(SysBusDevice),
+    .class_init    = xen_sysdev_class_init,
+};
+
+static void xenbe_register_types(void)
+{
+    type_register_static(&xensysdev_info);
+}
+
+type_init(xenbe_register_types);
diff --git a/hw/xenpv/xen_machine_pv.c b/hw/xenpv/xen_machine_pv.c
index f68cf48..48f725c 100644
--- a/hw/xenpv/xen_machine_pv.c
+++ b/hw/xenpv/xen_machine_pv.c
@@ -25,15 +25,10 @@
 #include "qemu/osdep.h"
 #include "hw/hw.h"
 #include "hw/boards.h"
-#include "hw/sysbus.h"
 #include "hw/xen/xen_backend.h"
 #include "xen_domainbuild.h"
 #include "sysemu/block-backend.h"
 
-#define TYPE_XENSYSDEV "xensysdev"
-
-DeviceState *xen_sysdev;
-
 static void xen_init_pv(MachineState *machine)
 {
     DriveInfo *dinfo;
@@ -72,9 +67,6 @@ static void xen_init_pv(MachineState *machine)
         break;
     }
 
-    xen_sysdev = qdev_create(NULL, TYPE_XENSYSDEV);
-    qdev_init_nofail(xen_sysdev);
-
     xen_be_register("console", &xen_console_ops);
     xen_be_register("vkbd", &xen_kbdmouse_ops);
     xen_be_register("vfb", &xen_framebuffer_ops);
@@ -112,38 +104,6 @@ static void xen_init_pv(MachineState *machine)
     xen_init_display(xen_domid);
 }
 
-static int xen_sysdev_init(SysBusDevice *dev)
-{
-    return 0;
-}
-
-static Property xen_sysdev_properties[] = {
-    {/* end of property list */},
-};
-
-static void xen_sysdev_class_init(ObjectClass *klass, void *data)
-{
-    DeviceClass *dc = DEVICE_CLASS(klass);
-    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
-
-    k->init = xen_sysdev_init;
-    dc->props = xen_sysdev_properties;
-}
-
-static const TypeInfo xensysdev_info = {
-    .name          = TYPE_XENSYSDEV,
-    .parent        = TYPE_SYS_BUS_DEVICE,
-    .instance_size = sizeof(SysBusDevice),
-    .class_init    = xen_sysdev_class_init,
-};
-
-static void xenpv_register_types(void)
-{
-    type_register_static(&xensysdev_info);
-}
-
-type_init(xenpv_register_types);
-
 static void xenpv_machine_init(MachineClass *mc)
 {
     mc->desc = "Xen Para-virtualized PC";
-- 
1.9.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

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

* Re: [PULL 0/3] xen-20160622-tag
       [not found] <alpine.DEB.2.10.1606221246350.2575@sstabellini-ThinkPad-X260>
  2016-06-22 11:48 ` [PULL 1/3] xen: fix style of hw/block/xen_blkif.h Stefano Stabellini
       [not found] ` <1466596120-28350-1-git-send-email-sstabellini@kernel.org>
@ 2016-06-23 10:18 ` Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2016-06-23 10:18 UTC (permalink / raw)
  To: Stefano Stabellini; +Cc: Anthony PERARD, QEMU Developers, xen-devel

On 22 June 2016 at 12:47, Stefano Stabellini <sstabellini@kernel.org> wrote:
> The following changes since commit 6f1d2d1c5ad20d464705b17318cb7ca495f8078a:
>
>   Merge remote-tracking branch 'remotes/stsquad/tags/pull-travis-20160621-1' into staging (2016-06-21 15:19:58 +0100)
>
> are available in the git repository at:
>
>
>   git://xenbits.xen.org/people/sstabellini/qemu-dm.git tags/xen-20160622-tag
>
> for you to fetch changes up to 25f8f6b4c295940ae5d83c19509353afc1dbc9a4:
>
>   xen: move xen_sysdev to xen_backend.c (2016-06-22 11:28:42 +0100)
>
> ----------------------------------------------------------------
> xen-20160622

Applied, thanks.

-- PMM

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

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

end of thread, other threads:[~2016-06-23 10:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <alpine.DEB.2.10.1606221246350.2575@sstabellini-ThinkPad-X260>
2016-06-22 11:48 ` [PULL 1/3] xen: fix style of hw/block/xen_blkif.h Stefano Stabellini
     [not found] ` <1466596120-28350-1-git-send-email-sstabellini@kernel.org>
2016-06-22 11:48   ` [PULL 2/3] xen: fix qdisk BLKIF_OP_DISCARD for 32/64 word size mix Stefano Stabellini
2016-06-22 11:48   ` [PULL 3/3] xen: move xen_sysdev to xen_backend.c Stefano Stabellini
2016-06-23 10:18 ` [PULL 0/3] xen-20160622-tag Peter Maydell

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).