qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2 15/18] xen: convert "-machine igd-passthru" to an accelera


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v2 15/18] xen: convert "-machine igd-passthru" to an accelerator property
Date: Mon, 9 Dec 2019 16:48:22 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2

On 12/9/19 4:01 PM, Paolo Bonzini wrote:
The first machine property to fall is Xen's Intel integrated graphics
passthrough.  The "-machine igd-passthru" option does not set anymore
a property on the machine object, but desugars to a GlobalProperty on
accelerator objects.

The setter is very simple, since the value ends up in a
global variable, so this patch also provides an example before the more
complicated cases that follow it.

Signed-off-by: Paolo Bonzini <address@hidden>
---
  hw/core/machine.c   | 20 --------------------
  hw/xen/xen-common.c | 16 ++++++++++++++++
  include/hw/boards.h |  1 -
  qemu-options.hx     |  7 ++++---
  vl.c                | 14 ++++----------
  5 files changed, 24 insertions(+), 34 deletions(-)

diff --git a/hw/core/machine.c b/hw/core/machine.c
index 45ddfb6..d7a0356 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -412,20 +412,6 @@ static void machine_set_graphics(Object *obj, bool value, 
Error **errp)
      ms->enable_graphics = value;
  }
-static bool machine_get_igd_gfx_passthru(Object *obj, Error **errp)
-{
-    MachineState *ms = MACHINE(obj);
-
-    return ms->igd_gfx_passthru;
-}
-
-static void machine_set_igd_gfx_passthru(Object *obj, bool value, Error **errp)
-{
-    MachineState *ms = MACHINE(obj);
-
-    ms->igd_gfx_passthru = value;
-}
-
  static char *machine_get_firmware(Object *obj, Error **errp)
  {
      MachineState *ms = MACHINE(obj);
@@ -862,12 +848,6 @@ static void machine_class_init(ObjectClass *oc, void *data)
      object_class_property_set_description(oc, "graphics",
          "Set on/off to enable/disable graphics emulation", &error_abort);
- object_class_property_add_bool(oc, "igd-passthru",
-        machine_get_igd_gfx_passthru, machine_set_igd_gfx_passthru,
-        &error_abort);
-    object_class_property_set_description(oc, "igd-passthru",
-        "Set on/off to enable/disable igd passthrou", &error_abort);

So before this option was available in builds/targets ...

-
      object_class_property_add_str(oc, "firmware",
          machine_get_firmware, machine_set_firmware,
          &error_abort);
diff --git a/hw/xen/xen-common.c b/hw/xen/xen-common.c
index 5284b0d..6cba30c 100644
--- a/hw/xen/xen-common.c
+++ b/hw/xen/xen-common.c
@@ -124,6 +124,16 @@ static void xen_change_state_handler(void *opaque, int 
running,
      }
  }
+static bool xen_get_igd_gfx_passthru(Object *obj, Error **errp)
+{
+    return has_igd_gfx_passthru;
+}
+
+static void xen_set_igd_gfx_passthru(Object *obj, bool value, Error **errp)
+{
+    has_igd_gfx_passthru = value;
+}
+
  static void xen_setup_post(MachineState *ms, AccelState *accel)
  {
      int rc;
@@ -177,6 +187,12 @@ static void xen_accel_class_init(ObjectClass *oc, void 
*data)
      ac->compat_props = g_ptr_array_new();
compat_props_add(ac->compat_props, compat, G_N_ELEMENTS(compat));
+
+    object_class_property_add_bool(oc, "igd-passthru",
+        xen_get_igd_gfx_passthru, xen_set_igd_gfx_passthru,
+        &error_abort);
+    object_class_property_set_description(oc, "igd-passthru",
+        "Set on/off to enable/disable igd passthrou", &error_abort);

... and now it is only available when building with --enable-xen.

This is a good cleanup.

I wonder if ppl uses 'igd-passthru=off' without Xen, won't it break their command line?

  }
#define TYPE_XEN_ACCEL ACCEL_CLASS_NAME("xen")
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 36fcbda..cdcf481 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -287,7 +287,6 @@ struct MachineState {
      bool mem_merge;
      bool usb;
      bool usb_disabled;
-    bool igd_gfx_passthru;
      char *firmware;
      bool iommu;
      bool suppress_vmdesc;
diff --git a/qemu-options.hx b/qemu-options.hx
index 9775258..6f12b31 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -37,7 +37,6 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
      "                kvm_shadow_mem=size of KVM shadow MMU in bytes\n"
      "                dump-guest-core=on|off include guest memory in a core dump 
(default=on)\n"
      "                mem-merge=on|off controls memory merge support (default: 
on)\n"
-    "                igd-passthru=on|off controls IGD GFX passthrough support 
(default=off)\n"
      "                aes-key-wrap=on|off controls support for AES key wrapping 
(default=on)\n"
      "                dea-key-wrap=on|off controls support for DEA key wrapping 
(default=on)\n"
      "                suppress-vmdesc=on|off disables self-describing migration 
(default=off)\n"
@@ -71,8 +70,6 @@ more than one accelerator specified, the next one is used if 
the previous one
  fails to initialize.
  @item kernel_irqchip=on|off
  Controls in-kernel irqchip support for the chosen accelerator when available.
-@item gfx_passthru=on|off
-Enables IGD GFX passthrough support for the chosen machine when available.
  @item vmport=on|off|auto
  Enables emulation of VMWare IO port, for vmmouse etc. auto says to select the
  value based on accel. For accel=xen the default is off otherwise the default
@@ -120,6 +117,7 @@ ETEXI
  DEF("accel", HAS_ARG, QEMU_OPTION_accel,
      "-accel [accel=]accelerator[,prop[=value][,...]]\n"
      "                select accelerator (kvm, xen, hax, hvf, whpx or tcg; use 
'help' for a list)\n"

Here we could use:

#ifdef CONFIG_XEN_BACKEND

(not sure we want such #ifdefry although)

+    "                igd-passthru=on|off (enable Xen integrated Intel graphics 
passthrough, default=off)\n"

#endif

      "                tb-size=n (TCG translation block cache size)\n"
      "                thread=single|multi (enable multi-threaded TCG)\n", 
QEMU_ARCH_ALL)
  STEXI
@@ -130,6 +128,9 @@ kvm, xen, hax, hvf, whpx or tcg can be available. By 
default, tcg is used. If th
  more than one accelerator specified, the next one is used if the previous one
  fails to initialize.
  @table @option
+@item igd-passthru=on|off
+When Xen is in use, this option controls whether Intel integrated graphics
+devices can be passed through to the guest (default=off)
  @item tb-size=@var{n}
  Controls the size (in MiB) of the TCG translation block cache.
  @item thread=single|multi
diff --git a/vl.c b/vl.c
index e6ff56b..ee872f2 100644
--- a/vl.c
+++ b/vl.c
@@ -1257,13 +1257,6 @@ static void configure_msg(QemuOpts *opts)
  }
-/* Now we still need this for compatibility with XEN. */
-bool has_igd_gfx_passthru;
-static void igd_gfx_passthru(void)
-{
-    has_igd_gfx_passthru = current_machine->igd_gfx_passthru;
-}
-
  /***********************************************************/
  /* USB devices */
@@ -2642,6 +2635,10 @@ static int machine_set_property(void *opaque,
      if (g_str_equal(qom_name, "accel")) {
          return 0;
      }

Similarly:

#ifdef CONFIG_XEN_BACKEND

+    if (g_str_equal(qom_name, "igd-passthru")) {
+        object_register_sugar_prop(ACCEL_CLASS_NAME("xen"), qom_name, value);
+        return 0;
+    }

#endif

return object_parse_property_opt(opaque, name, value, "type", errp);
  }
@@ -4456,9 +4453,6 @@ int main(int argc, char **argv, char **envp)
              exit(1);
      }
- /* Check if IGD GFX passthrough. */
-    igd_gfx_passthru();
-
      /* init generic devices */
      rom_set_order_override(FW_CFG_ORDER_OVERRIDE_DEVICE);
      qemu_opts_foreach(qemu_find_opts("device"),





reply via email to

[Prev in Thread] Current Thread [Next in Thread]