Re: [Qemu-block] [PATCH 1/2] xen: add xen disk naming for use in monitor

2018-06-13 Thread Anthony PERARD
On Tue, Jun 12, 2018 at 05:51:02PM -0600, Bruce Rogers wrote:
> Provide monitor naming of xen disks, including associating an
> attached dev_id for a BlockBackend which has legacy_dev set.
> Currently, only xen disks have legacy_dev set to true.
> 
> Signed-off-by: Bruce Rogers 
> ---
>  block/block-backend.c |  5 -
>  hw/block/xen_disk.c   | 15 +++
>  include/hw/xen/xen.h  |  2 ++
>  stubs/xen-common.c|  5 +
>  4 files changed, 26 insertions(+), 1 deletion(-)
> 
> diff --git a/block/block-backend.c b/block/block-backend.c
> index d55c328736..db39dfe867 100644
> --- a/block/block-backend.c
> +++ b/block/block-backend.c
> @@ -23,6 +23,7 @@
>  #include "qemu/option.h"
>  #include "trace.h"
>  #include "migration/misc.h"
> +#include "hw/xen/xen.h"
>  
>  /* Number of coroutines to reserve per attached device model */
>  #define COROUTINE_POOL_RESERVATION 64
> @@ -895,7 +896,9 @@ char *blk_get_attached_dev_id(BlockBackend *blk)
>  {
>  DeviceState *dev;
>  
> -assert(!blk->legacy_dev);
> +if (blk->legacy_dev) {
> +return xen_blk_get_attached_dev_id(blk->dev);
> +}
>  dev = blk->dev;
>  
>  if (!dev) {

Hi Bruce,

Thanks for your patches!

But I don't think that the right way to go. We probably needs to
qdevifie xen_disk instead. This is point out by the numerous TODO about
"qdevified", and this very old mail:
https://lists.nongnu.org/archive/html/qemu-devel/2016-09/msg07902.html

Thanks,

-- 
Anthony PERARD



[Qemu-block] [PATCH 1/2] xen: add xen disk naming for use in monitor

2018-06-12 Thread Bruce Rogers
Provide monitor naming of xen disks, including associating an
attached dev_id for a BlockBackend which has legacy_dev set.
Currently, only xen disks have legacy_dev set to true.

Signed-off-by: Bruce Rogers 
---
 block/block-backend.c |  5 -
 hw/block/xen_disk.c   | 15 +++
 include/hw/xen/xen.h  |  2 ++
 stubs/xen-common.c|  5 +
 4 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/block/block-backend.c b/block/block-backend.c
index d55c328736..db39dfe867 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -23,6 +23,7 @@
 #include "qemu/option.h"
 #include "trace.h"
 #include "migration/misc.h"
+#include "hw/xen/xen.h"
 
 /* Number of coroutines to reserve per attached device model */
 #define COROUTINE_POOL_RESERVATION 64
@@ -895,7 +896,9 @@ char *blk_get_attached_dev_id(BlockBackend *blk)
 {
 DeviceState *dev;
 
-assert(!blk->legacy_dev);
+if (blk->legacy_dev) {
+return xen_blk_get_attached_dev_id(blk->dev);
+}
 dev = blk->dev;
 
 if (!dev) {
diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
index 9fbc0cdb87..fca0597d36 100644
--- a/hw/block/xen_disk.c
+++ b/hw/block/xen_disk.c
@@ -745,6 +745,7 @@ static int blk_connect(struct XenDevice *xendev)
 int order, ring_ref;
 unsigned int ring_size, max_grants;
 unsigned int i;
+Error *errp = NULL;
 
 trace_xen_disk_connect(xendev->name);
 
@@ -801,6 +802,13 @@ static int blk_connect(struct XenDevice *xendev)
 blk_ref(blkdev->blk);
 }
 blk_attach_dev_legacy(blkdev->blk, blkdev);
+if (!monitor_add_blk(blkdev->blk, g_strdup(blkdev->dev), )) {
+xen_pv_printf(>xendev, 0, "error: %s\n",
+  error_get_pretty(errp));
+error_free(errp);
+return -1;
+}
+
 blkdev->file_size = blk_getlength(blkdev->blk);
 if (blkdev->file_size < 0) {
 BlockDriverState *bs = blk_bs(blkdev->blk);
@@ -951,6 +959,7 @@ static void blk_disconnect(struct XenDevice *xendev)
 if (blkdev->blk) {
 blk_set_aio_context(blkdev->blk, qemu_get_aio_context());
 blk_detach_dev(blkdev->blk, blkdev);
+monitor_remove_blk(blkdev->blk);
 blk_unref(blkdev->blk);
 blkdev->blk = NULL;
 }
@@ -998,6 +1007,12 @@ static void blk_event(struct XenDevice *xendev)
 qemu_bh_schedule(blkdev->bh);
 }
 
+char *xen_blk_get_attached_dev_id(void *dev)
+{
+struct XenBlkDev *blkdev = dev;
+return g_strdup_printf("xen-qdisk-%i", blkdev->xendev.dev);
+}
+
 struct XenDevOps xen_blkdev_ops = {
 .flags  = DEVOPS_FLAG_NEED_GNTDEV,
 .size   = sizeof(struct XenBlkDev),
diff --git a/include/hw/xen/xen.h b/include/hw/xen/xen.h
index 7efcdaa8fe..a201517675 100644
--- a/include/hw/xen/xen.h
+++ b/include/hw/xen/xen.h
@@ -48,4 +48,6 @@ void xen_hvm_modified_memory(ram_addr_t start, ram_addr_t 
length);
 
 void xen_register_framebuffer(struct MemoryRegion *mr);
 
+char *xen_blk_get_attached_dev_id(void *dev);
+
 #endif /* QEMU_HW_XEN_H */
diff --git a/stubs/xen-common.c b/stubs/xen-common.c
index 09fce2dd36..aeac0534ac 100644
--- a/stubs/xen-common.c
+++ b/stubs/xen-common.c
@@ -12,3 +12,8 @@
 void xenstore_store_pv_console_info(int i, Chardev *chr)
 {
 }
+
+char *xen_blk_get_attached_dev_id(void *dev)
+{
+return g_strdup("");
+}
-- 
2.17.1