[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] libxl: introduce gfx_passthru_kind
From: |
Wei Liu |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] libxl: introduce gfx_passthru_kind |
Date: |
Fri, 6 Mar 2015 12:55:45 +0000 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
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 <address@hidden>
> ---
> 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
Re: [Qemu-devel] [PATCH 2/2] libxl: introduce gfx_passthru_kind,
Wei Liu <=
Re: [Qemu-devel] [PATCH 2/2] libxl: introduce gfx_passthru_kind, Ian Campbell, 2015/03/11
Re: [Qemu-devel] [PATCH 0/2] libxl: try to support IGD passthrough for qemu upstream, Wei Liu, 2015/03/06
Re: [Qemu-devel] [Xen-devel] [PATCH 0/2] libxl: try to support IGD passthrough for qemu upstream, Konrad Rzeszutek Wilk, 2015/03/06