[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/2] libxl: introduce gfx_passthru_kind
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? > 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'. > + } 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. > # 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. > > ("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. Wei. > + buf); > + exit (1); > + } > + libxl_defbool_set(&b_info->u.hvm.gfx_passthru, false); > + } > switch (xlu_cfg_get_list_as_string_list(config, "serial", > &b_info->u.hvm.serial_list, > 1)) > -- > 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |