diff mbox

[1/2] xen: add xen disk naming for use in monitor

Message ID 20180612235103.12633-2-brogers@suse.com (mailing list archive)
State New, archived
Headers show

Commit Message

Bruce Rogers June 12, 2018, 11:51 p.m. UTC
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 <brogers@suse.com>
---
 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(-)

Comments

Anthony PERARD June 13, 2018, 11:46 a.m. UTC | #1
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 <brogers@suse.com>
> ---
>  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,
Bruce Rogers June 13, 2018, 12:13 p.m. UTC | #2
>>> On 6/13/2018 at 5:46 AM, Anthony PERARD <anthony.perard@citrix.com> wrote:
> 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 <brogers@suse.com>
>> ‑‑‑
>>  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 

Understood. These patches come from an effort to provide this functionality
to older qemu releases that SUSE supports. I didn't try to work on a qdevify type
solution, as I figured if the block experts hadn't done that yet, I would probably
not be too successful myself.
From what I can see, the xen support in qemu is not well integrated in general,
so my patches here are implemented in that "spirit" - not elegant, but getting the
job done. I'd certainly rather see good integration of the xen model into qemu,
and if that is the right way forward to get this type of functionality, I'd be happy
with that approach as well.

Bruce
diff mbox

Patch

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), &errp)) {
+        xen_pv_printf(&blkdev->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("");
+}