[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 2/2] libxl: introduce gfx_passthru_kind



On 2015/3/6 20:55, Wei Liu wrote:
On Fri, Mar 06, 2015 at 05:08:23PM +0800, Tiejun Chen wrote:
Although we already have 'gfx_passthru' in b_info, this doesn' suffice
after we want to handle IGD specifically. Now we define a new field of
type, gfx_passthru_kind, to indicate we're trying to pass IGD. Actually
this means we can benefit this to support other specific devices just
by extending gfx_passthru_kind. And then we can cooperate with
gfx_passthru to address IGD cases as follows:

     gfx_passthru = 0    => sets build_info.u.gfx_passthru to false
     gfx_passthru = 1    => sets build_info.u.gfx_passthru to false and
                                                                ^^^^^
                                                                true?

I just simply pick up this from Campbell's comment but I agree you.


                            build_info.u.gfx_passthru_kind to DEFAULT
     gfx_passthru = "igd"    => sets build_info.u.gfx_passthru to false
                                and build_info.u.gfx_passthru_kind to IGD

Here if gfx_passthru_kind = DEFAULT, we will call
libxl__is_igd_vga_passthru() to check if we're hitting that table to need
to pass that option to qemu. But if gfx_passthru_kind = "igd" we always
force to pass that.

Signed-off-by: Tiejun Chen <tiejun.chen@xxxxxxxxx>
---
  tools/libxl/libxl_dm.c      | 13 +++++++++++++
  tools/libxl/libxl_types.idl |  6 ++++++
  tools/libxl/xl_cmdimpl.c    | 19 +++++++++++++++++--
  3 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 8599a6a..780dd2a 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -757,6 +757,19 @@ static char ** 
libxl__build_device_model_args_new(libxl__gc *gc,
                                              machinearg, max_ram_below_4g);
              }
          }
+
+        if (b_info->u.hvm.gfx_passthru_kind ==
+                LIBXL_GFX_PASSTHRU_KIND_DEFAULT) {
+            if (libxl__is_igd_vga_passthru(gc, guest_config)) {
+                machinearg = GCSPRINTF("%s,igd-passthru=on", machinearg);
+            }

You can remove that {} around machinearg -- it's only one line after
`if'.

Okay.


+        } else if (b_info->u.hvm.gfx_passthru_kind ==
+                        LIBXL_GFX_PASSTHRU_KIND_IGD) {
+                machinearg = GCSPRINTF("%s,igd-passthru=on", machinearg);
+        } else {
+            LOG(WARN, "gfx_passthru_kind is invalid so ignored.\n");
+        }
+
          flexarray_append(dm_args, machinearg);
          for (i = 0; b_info->extra_hvm && b_info->extra_hvm[i] != NULL; i++)
              flexarray_append(dm_args, b_info->extra_hvm[i]);
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 02be466..e209460 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -140,6 +140,11 @@ libxl_tsc_mode = Enumeration("tsc_mode", [
      (3, "native_paravirt"),
      ])

+libxl_gfx_passthru_kind = Enumeration("gfx_passthru_kind", [
+    (0, "default"),
+    (1, "igd"),
+    ], init_val = "LIBXL_GFX_PASSTHRU_KIND_DEFAULT")
+

You don't need to set init_val if the default value is 0.

Got it.


  # Consistent with the values defined for HVM_PARAM_TIMER_MODE.
  libxl_timer_mode = Enumeration("timer_mode", [
      (-1, "unknown"),
@@ -430,6 +435,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
                                         ("spice",            libxl_spice_info),

                                         ("gfx_passthru",     libxl_defbool),
+                                       ("gfx_passthru_kind",     
libxl_gfx_passthru_kind),
                                                                 ^^^^
One space is enough, I think.

Okay.



                                         ("serial",           string),
                                         ("boot",             string),
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 440db78..3f7fede 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1953,8 +1953,23 @@ skip_vfb:
          xlu_cfg_replace_string (config, "spice_streaming_video",
                                  &b_info->u.hvm.spice.streaming_video, 0);
          xlu_cfg_get_defbool(config, "nographic", &b_info->u.hvm.nographic, 0);
-        xlu_cfg_get_defbool(config, "gfx_passthru",
-                            &b_info->u.hvm.gfx_passthru, 0);
+        if (!xlu_cfg_get_long(config, "gfx_passthru", &l, 1)) {
+            if (!l) {
+                libxl_defbool_set(&b_info->u.hvm.gfx_passthru, false);
+            } else if (i == 1) {
+                libxl_defbool_set(&b_info->u.hvm.gfx_passthru, true);
+            } else {
+                fprintf(stderr, "ERROR: invalid value %ld for 
\"gfx_passthru\"\n", l);

Please wrap this line to be < 80 column.

+                exit (1);
+            }
+        } else if (!xlu_cfg_get_string(config, "gfx_passthru", &buf, 0)) {
+            if (libxl_gfx_passthru_kind_from_string(buf, 
&b_info->u.hvm.gfx_passthru_kind)) {

Ditto.

+                fprintf(stderr, "ERROR: invalid value \"%s\" for 
\"gfx_passthru\"\n",

Ditto.

So,

@@ -1959,13 +1959,15 @@ skip_vfb:
             } else if (i == 1) {
                 libxl_defbool_set(&b_info->u.hvm.gfx_passthru, true);
             } else {
- fprintf(stderr, "ERROR: invalid value %ld for \"gfx_passthru\"\n", l);
+                fprintf(stderr, "ERROR: invalid value %ld for"
+                                " \"gfx_passthru\"\n", l);
                 exit (1);
             }
         } else if (!xlu_cfg_get_string(config, "gfx_passthru", &buf, 0)) {
- if (libxl_gfx_passthru_kind_from_string(buf, &b_info->u.hvm.gfx_passthru_kind)) { - fprintf(stderr, "ERROR: invalid value \"%s\" for \"gfx_passthru\"\n",
-                        buf);
+            if (libxl_gfx_passthru_kind_from_string(buf,
+ &b_info->u.hvm.gfx_passthru_kind)) {
+                fprintf(stderr, "ERROR: invalid value \"%s\" for"
+                                " \"gfx_passthru\"\n", buf);
                 exit (1);
             }
             libxl_defbool_set(&b_info->u.hvm.gfx_passthru, false);

Thanks
Tiejun

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.