Re: [Xen-devel] [PATCH v2 2/6] libxl: add backend type and id to vkb

2018-07-05 Thread Wei Liu
On Thu, Jul 05, 2018 at 04:06:35PM +0100, Wei Liu wrote:
> On Tue, Jun 12, 2018 at 04:31:43PM +0300, Oleksandr Grytsov wrote:
> > From: Oleksandr Grytsov 
> [...]
> > diff --git a/tools/libxl/libxl_vkb.c b/tools/libxl/libxl_vkb.c
> > index 7652ad23ce..beaf17475d 100644
> > --- a/tools/libxl/libxl_vkb.c
> > +++ b/tools/libxl/libxl_vkb.c
> > @@ -14,12 +14,42 @@
> >  
> >  #include "libxl_internal.h"
> >  
> > +#include 
> > +
> >  static int libxl__device_vkb_setdefault(libxl__gc *gc, uint32_t domid,
> >  libxl_device_vkb *vkb, bool 
> > hotplug)
> >  {
> > +if (vkb->backend_type == LIBXL_VKB_BACKEND_UNKNOWN) {
> > +vkb->backend_type = LIBXL_VKB_BACKEND_QEMU;
> > +}
> > +
> >  return libxl__resolve_domid(gc, vkb->backend_domname, 
> > >backend_domid);
> >  }
> >  
> > +static int libxl__device_vkb_dm_needed(libxl_device_vkb *vkb, uint32_t 
> > domid)
> > +{
> > +   if (vkb->backend_type == LIBXL_VKB_BACKEND_QEMU) {
> > +return 1;
> > +   }
> 
> Indentation is wrong here.
> 
> > +
> > +return 0;
> 
> This function can be simplified as
> 
>return vkb->backend_type == LIBXL_VKB_BACKEND_QEMU;
> 
> I think this patch is also missing adding LIBXL_HAVE in libxl.h.

You can only add one LIBXL_HAVE when you finish adding all the new
fields btw.

Wei.  

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v2 2/6] libxl: add backend type and id to vkb

2018-07-05 Thread Wei Liu
On Tue, Jun 12, 2018 at 04:31:43PM +0300, Oleksandr Grytsov wrote:
> From: Oleksandr Grytsov 
[...]
> diff --git a/tools/libxl/libxl_vkb.c b/tools/libxl/libxl_vkb.c
> index 7652ad23ce..beaf17475d 100644
> --- a/tools/libxl/libxl_vkb.c
> +++ b/tools/libxl/libxl_vkb.c
> @@ -14,12 +14,42 @@
>  
>  #include "libxl_internal.h"
>  
> +#include 
> +
>  static int libxl__device_vkb_setdefault(libxl__gc *gc, uint32_t domid,
>  libxl_device_vkb *vkb, bool hotplug)
>  {
> +if (vkb->backend_type == LIBXL_VKB_BACKEND_UNKNOWN) {
> +vkb->backend_type = LIBXL_VKB_BACKEND_QEMU;
> +}
> +
>  return libxl__resolve_domid(gc, vkb->backend_domname, 
> >backend_domid);
>  }
>  
> +static int libxl__device_vkb_dm_needed(libxl_device_vkb *vkb, uint32_t domid)
> +{
> +   if (vkb->backend_type == LIBXL_VKB_BACKEND_QEMU) {
> +return 1;
> +   }

Indentation is wrong here.

> +
> +return 0;

This function can be simplified as

   return vkb->backend_type == LIBXL_VKB_BACKEND_QEMU;

I think this patch is also missing adding LIBXL_HAVE in libxl.h.

Wei.

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [PATCH v2 2/6] libxl: add backend type and id to vkb

2018-06-12 Thread Oleksandr Grytsov
From: Oleksandr Grytsov 

New field backend_type is added to vkb device
in order to have QEMU and user space backend
simultaneously. Each vkb backend shall read
appropriate XS entry and service only own
frontends.
Id is a string field which used by the backend
to indentify the frontend.

Signed-off-by: Oleksandr Grytsov 
---
 tools/libxl/libxl_create.c  |  3 +++
 tools/libxl/libxl_dm.c  |  1 +
 tools/libxl/libxl_types.idl |  8 
 tools/libxl/libxl_vkb.c | 35 ++-
 4 files changed, 46 insertions(+), 1 deletion(-)

diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index b5e27a7766..70029600af 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -1421,6 +1421,9 @@ static void domcreate_launch_dm(libxl__egc *egc, 
libxl__multidev *multidev,
 for (i = 0; i < d_config->num_vfbs; i++) {
 libxl__device_add(gc, domid, __vfb_devtype,
   _config->vfbs[i]);
+}
+
+for (i = 0; i < d_config->num_vkbs; i++) {
 libxl__device_add(gc, domid, __vkb_devtype,
   _config->vkbs[i]);
 }
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 18ada69e8b..2362ecdce9 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -1786,6 +1786,7 @@ static int 
libxl__vfb_and_vkb_from_hvm_guest_config(libxl__gc *gc,
 
 vkb->backend_domid = 0;
 vkb->devid = 0;
+
 return 0;
 }
 
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 01ec1d1afa..66c9444101 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -247,6 +247,12 @@ libxl_vuart_type = Enumeration("vuart_type", [
 (1, "sbsa_uart"),
 ])
 
+libxl_vkb_backend = Enumeration("vkb_backend", [
+(0, "UNKNOWN"),
+(1, "QEMU"),
+(2, "LINUX")
+])
+
 #
 # Complex libxl types
 #
@@ -626,6 +632,8 @@ libxl_device_vkb = Struct("device_vkb", [
 ("backend_domid", libxl_domid),
 ("backend_domname", string),
 ("devid", libxl_devid),
+("backend_type", libxl_vkb_backend),
+("unique_id", string)
 ])
 
 libxl_device_disk = Struct("device_disk", [
diff --git a/tools/libxl/libxl_vkb.c b/tools/libxl/libxl_vkb.c
index 7652ad23ce..beaf17475d 100644
--- a/tools/libxl/libxl_vkb.c
+++ b/tools/libxl/libxl_vkb.c
@@ -14,12 +14,42 @@
 
 #include "libxl_internal.h"
 
+#include 
+
 static int libxl__device_vkb_setdefault(libxl__gc *gc, uint32_t domid,
 libxl_device_vkb *vkb, bool hotplug)
 {
+if (vkb->backend_type == LIBXL_VKB_BACKEND_UNKNOWN) {
+vkb->backend_type = LIBXL_VKB_BACKEND_QEMU;
+}
+
 return libxl__resolve_domid(gc, vkb->backend_domname, >backend_domid);
 }
 
+static int libxl__device_vkb_dm_needed(libxl_device_vkb *vkb, uint32_t domid)
+{
+   if (vkb->backend_type == LIBXL_VKB_BACKEND_QEMU) {
+return 1;
+   }
+
+return 0;
+}
+
+static int libxl__set_xenstore_vkb(libxl__gc *gc, uint32_t domid,
+   libxl_device_vkb *vkb,
+   flexarray_t *back, flexarray_t *front,
+   flexarray_t *ro_front)
+{
+flexarray_append_pair(back, "backend-type",
+  (char 
*)libxl_vkb_backend_to_string(vkb->backend_type));
+
+if (vkb->unique_id) {
+flexarray_append_pair(back, XENKBD_FIELD_UNIQUE_ID, vkb->unique_id);
+}
+
+return 0;
+}
+
 int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb,
  const libxl_asyncop_how *ao_how)
 {
@@ -47,7 +77,10 @@ static LIBXL_DEFINE_UPDATE_DEVID(vkb)
 LIBXL_DEFINE_DEVICE_REMOVE(vkb)
 
 DEFINE_DEVICE_TYPE_STRUCT(vkb, VKBD,
-.skip_attach = 1
+.skip_attach = 1,
+.dm_needed = (device_dm_needed_fn_t)libxl__device_vkb_dm_needed,
+.set_xenstore_config = (device_set_xenstore_config_fn_t)
+   libxl__set_xenstore_vkb
 );
 
 /*
-- 
2.17.1


___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel