All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Campbell <ian.campbell@citrix.com>
To: "Chen, Tiejun" <tiejun.chen@intel.com>
Cc: Ian.Jackson@eu.citrix.com, wei.liu2@citrix.com,
	qemu-devel@nongnu.org, stefano.stabellini@citrix.com,
	xen-devel@lists.xen.org
Subject: Re: [v2][PATCH 2/2] libxl: introduce gfx_passthru_kind
Date: Thu, 12 Mar 2015 12:26:26 +0000	[thread overview]
Message-ID: <1426163186.21353.409.camel__42760.27742676$1426163295$gmane$org@citrix.com> (raw)
In-Reply-To: <55010596.2030106@intel.com>

On Thu, 2015-03-12 at 11:18 +0800, Chen, Tiejun wrote:
> >> +
> >> +        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);
> >> +        } 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");
> >> +        }
> >
> > I think this whole block should be inside an:
> >          if (libxl_defbool_val(b_info->u.hvm.gfx_passthru)
> > the semantics should be that kind is ignored unless passthru is enabled.
> >
> > and then the if/else chain could become a switch perhaps?
> 
> Okay.
> 
> >
> > I'm unsure what we should do if kind==DEFAULT but
> > libxl__is_igd_vga_passthru fails. At a minimum a warning seems
> > desirable. I'm not sure if it should warrant a failure or not.
> 
> I think a warning message plus abort() should be enough, and then user 
> can determine what's next,

In libxl an abort is only warranted if something _cannot_ happen and is
not under user control. I think think that applies here unless some
earlier code is guaranteed to have validated the value before it reaches
this point.

> Please take a look at this,
> 
> +
> +        if (libxl_defbool_val(b_info->u.hvm.gfx_passthru)) {
> +            switch (b_info->u.hvm.gfx_passthru_kind) {
> +            case LIBXL_GFX_PASSTHRU_KIND_DEFAULT:
> +                if (libxl__is_igd_vga_passthru(gc, guest_config)) {
> +                    machinearg = GCSPRINTF("%s,igd-passthru=on", 
> machinearg);
> +                } else {
> +                    LOG(WARN, "No supported IGD to passthru,"
> +                        " or please force set gfx_passthru=\"igd\".\n");
> +                    abort();

I don't think you can abort here, since a user can set
b_info->u.hvm.gfx_passthru_kind to default. You would need to return an
error.

> @@ -720,6 +720,13 @@ void libxl_mac_copy(libxl_ctx *ctx, libxl_mac *dst, 
> libxl_mac *src);
>   #define LIBXL_HAVE_PSR_MBM 1
>   #endif
> 
> +/*
> + * LIBXL_HAVE_GFX_PASSTHRU_KIND
> + *
> + * If this is defined, the Graphic Device Passthrough Override is 
> supported.

Almost, please also explicitly name the type field as other similar
comments do for clarity.

> + */
> +#define LIBXL_HAVE_GFX_PASSTHRU_KIND 1
> +
>   typedef char **libxl_string_list;
>   void libxl_string_list_dispose(libxl_string_list *sl);
>   int libxl_string_list_length(const libxl_string_list *sl);
> @@ -1501,6 +1508,11 @@ int libxl_psr_cmt_get_sample(libxl_ctx *ctx,
>                                uint64_t *tsc_r);
>   #endif
> 
> +#ifdef LIBXL_HAVE_GFX_PASSTHRU_KIND

No ifdef needed here (or in libxl_internal.h)


> +bool libxl__is_igd_vga_passthru(libxl__gc *gc,
> +                                const libxl_domain_config *d_config);

and this should be in libxl_internal.h not here...

> But looks libxl__gc{} is defined in the libxl_internal.h file... I guess 
> we need a conversion, or other idea?

... which answers this question.

> Here I update this chunk of code based on your two comments:
> 
> @@ -1953,8 +1953,22 @@ 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, true);
> +            } else {
> +                libxl_defbool_set(&b_info->u.hvm.gfx_passthru, false);
> +            }

This is exactly the same as:
        libxl_defbool_set(&b_info->u.hvm.gfx_passthru, l);

Ian.

  parent reply	other threads:[~2015-03-12 12:26 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-10  9:42 [Qemu-devel] [v2][PATCH 0/2] libxl: try to support IGD passthrough for qemu upstream Tiejun Chen
2015-03-10  9:42 ` [Qemu-devel] [v2][PATCH 1/2] libxl: introduce libxl__is_igd_vga_passthru Tiejun Chen
2015-03-11 11:26   ` Ian Campbell
2015-03-11 11:26   ` Ian Campbell
2015-03-10  9:42 ` Tiejun Chen
2015-03-10  9:42 ` [v2][PATCH 2/2] libxl: introduce gfx_passthru_kind Tiejun Chen
2015-03-10  9:42 ` [Qemu-devel] " Tiejun Chen
2015-03-11 11:34   ` Ian Campbell
2015-03-12  3:18     ` Chen, Tiejun
2015-03-12 12:26       ` Ian Campbell
2015-03-13  1:39         ` Chen, Tiejun
2015-03-13 10:11           ` Ian Campbell
2015-03-13 10:11           ` [Qemu-devel] " Ian Campbell
2015-03-16  1:07             ` Chen, Tiejun
2015-03-16  1:07             ` [Qemu-devel] " Chen, Tiejun
2015-03-16 12:20               ` Ian Campbell
2015-03-17  7:46                 ` Chen, Tiejun
2015-03-17  7:46                 ` [Qemu-devel] " Chen, Tiejun
2015-03-17  9:26                   ` Ian Campbell
2015-03-18  7:32                     ` Chen, Tiejun
2015-03-18  7:32                     ` [Qemu-devel] " Chen, Tiejun
2015-03-18 10:25                       ` Ian Campbell
2015-03-18 10:25                       ` [Qemu-devel] " Ian Campbell
2015-03-19  2:07                         ` Chen, Tiejun
2015-03-19  2:07                         ` [Qemu-devel] " Chen, Tiejun
2015-03-19 10:44                           ` Ian Campbell
2015-03-20  1:04                             ` Chen, Tiejun
2015-03-20  1:04                             ` [Qemu-devel] " Chen, Tiejun
2015-03-20  9:40                               ` Ian Campbell
2015-03-20  9:40                               ` [Qemu-devel] " Ian Campbell
2015-03-20 10:08                                 ` Chen, Tiejun
2015-03-20 10:11                                   ` Ian Campbell
2015-03-20 10:20                                     ` Chen, Tiejun
2015-03-20 10:20                                     ` Chen, Tiejun
2015-03-20 10:11                                   ` Ian Campbell
2015-03-20 10:08                                 ` Chen, Tiejun
2015-03-19 10:44                           ` Ian Campbell
2015-03-17  9:26                   ` Ian Campbell
2015-03-16 12:20               ` Ian Campbell
2015-03-13  1:39         ` Chen, Tiejun
2015-03-12 12:26       ` Ian Campbell [this message]
2015-03-12  3:18     ` Chen, Tiejun
2015-03-11 11:34   ` Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='1426163186.21353.409.camel__42760.27742676$1426163295$gmane$org@citrix.com' \
    --to=ian.campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefano.stabellini@citrix.com \
    --cc=tiejun.chen@intel.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.