Message ID | 20180612235103.12633-2-brogers@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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,
>>> 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 --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(""); +}
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(-)