[libvirt] [PATCH v2 1/3] libxl: add acpi slic table support

From: Ivan Kardykov <kardykov@tabit.pro> Libxl driver did not support setup additional acpi firmware to xen guest. It is necessary to activate OEM Windows installs. This patch allow to define in OS section acpi table param (which supported domain common schema). Signed-off-by: Ivan Kardykov <kardykov@tabit.pro> [added info to docs/formatdomain.html.in] Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> --- docs/formatdomain.html.in | 3 ++- src/libxl/libxl_conf.c | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 86a5261..c80f09a 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -363,7 +363,8 @@ <dd>The <code>table</code> element contains a fully-qualified path to the ACPI table. The <code>type</code> attribute contains the ACPI table type (currently only <code>slic</code> is supported) - <span class="since">Since 1.3.5 (QEMU only)</span></dd> + <span class="since">Since 1.3.5 (QEMU)</span> + <span class="since">Since 5.8.0 (Xen)</span></dd> </dl> <h4><a id="elementsOSContainer">Container boot</a></h4> diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index c76704a..c0d4861 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -506,6 +506,11 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, def->features[VIR_DOMAIN_FEATURE_ACPI] == VIR_TRISTATE_SWITCH_ON); + /* copy SLIC table path to acpi_firmware */ + if (def->os.slic_table && + VIR_STRDUP(b_info->u.hvm.acpi_firmware, def->os.slic_table) < 0) + return -1; + if (def->nsounds > 0) { /* * Use first sound device. man xl.cfg(5) describes soundhw as base-commit: 281a7f1d400aeb0d4d53dd3b628b7275f49854d0 -- git-series 0.9.1

Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> --- tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json | 54 +++++++++++++- tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml | 32 ++++++++- tests/libxlxml2domconfigtest.c | 2 +- 3 files changed, 88 insertions(+) create mode 100644 tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json create mode 100644 tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml diff --git a/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json new file mode 100644 index 0000000..5d85d75 --- /dev/null +++ b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json @@ -0,0 +1,54 @@ +{ + "c_info": { + "type": "hvm", + "name": "XenGuest2", + "uuid": "c7a5fdb2-cdaf-9455-926a-d65c16db1809" + }, + "b_info": { + "max_vcpus": 1, + "avail_vcpus": [ + 0 + ], + "max_memkb": 592896, + "target_memkb": 403456, + "shadow_memkb": 5656, + "sched_params": { + }, + "nested_hvm": "False", + "type.hvm": { + "pae": "True", + "apic": "True", + "acpi": "True", + "acpi_firmware": "/path/to/slic.dat", + "nographic": "True", + "vnc": { + "enable": "False" + }, + "sdl": { + "enable": "False" + }, + "spice": { + + }, + "boot": "c", + "rdm": { + + } + }, + "arch_arm": { + + } + }, + "disks": [ + { + "pdev_path": "/dev/HostVG/XenGuest2", + "vdev": "hda", + "backend": "phy", + "format": "raw", + "removable": 1, + "readwrite": 1 + } + ], + "on_reboot": "restart", + "on_crash": "restart" +} diff --git a/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml new file mode 100644 index 0000000..017fdb5 --- /dev/null +++ b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml @@ -0,0 +1,32 @@ +<domain type='xen'> + <name>XenGuest2</name> + <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>592896</memory> + <currentMemory unit='KiB'>403456</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='xenfv'>hvm</type> + <acpi> + <table type='slic'>/path/to/slic.dat</table> + </acpi> + </os> + <features> + <acpi/> + <apic/> + <pae/> + </features> + <clock offset='variable' adjustment='0' basis='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>restart</on_crash> + <devices> + <disk type='block' device='disk'> + <driver name='phy' type='raw'/> + <source dev='/dev/HostVG/XenGuest2'/> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + </devices> +</domain> diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c index 3b3f634..120796b 100644 --- a/tests/libxlxml2domconfigtest.c +++ b/tests/libxlxml2domconfigtest.c @@ -212,6 +212,8 @@ mymain(void) DO_TEST("fullvirt-cpuid-legacy-nest"); # endif + DO_TEST("fullvirt-acpi-slic"); + # ifdef LIBXL_HAVE_BUILDINFO_GRANT_LIMITS DO_TEST("max-gntframes-hvm"); # endif -- git-series 0.9.1

On 9/15/19 1:43 PM, Marek Marczykowski-Górecki wrote:
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> --- tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json | 54 +++++++++++++- tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml | 32 ++++++++- tests/libxlxml2domconfigtest.c | 2 +- 3 files changed, 88 insertions(+) create mode 100644 tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json create mode 100644 tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml
diff --git a/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json new file mode 100644 index 0000000..5d85d75 --- /dev/null +++ b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json @@ -0,0 +1,54 @@ +{ + "c_info": { + "type": "hvm", + "name": "XenGuest2", + "uuid": "c7a5fdb2-cdaf-9455-926a-d65c16db1809" + }, + "b_info": { + "max_vcpus": 1, + "avail_vcpus": [ + 0 + ], + "max_memkb": 592896, + "target_memkb": 403456, + "shadow_memkb": 5656, + "sched_params": { + }, + "nested_hvm": "False",
I had to remove the above line otherwise 'make check' fails. Did it work for you as is? Regards, Jim
+ "type.hvm": { + "pae": "True", + "apic": "True", + "acpi": "True", + "acpi_firmware": "/path/to/slic.dat", + "nographic": "True", + "vnc": { + "enable": "False" + }, + "sdl": { + "enable": "False" + }, + "spice": { + + }, + "boot": "c", + "rdm": { + + } + }, + "arch_arm": { + + } + }, + "disks": [ + { + "pdev_path": "/dev/HostVG/XenGuest2", + "vdev": "hda", + "backend": "phy", + "format": "raw", + "removable": 1, + "readwrite": 1 + } + ], + "on_reboot": "restart", + "on_crash": "restart" +} diff --git a/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml new file mode 100644 index 0000000..017fdb5 --- /dev/null +++ b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml @@ -0,0 +1,32 @@ +<domain type='xen'> + <name>XenGuest2</name> + <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>592896</memory> + <currentMemory unit='KiB'>403456</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='xenfv'>hvm</type> + <acpi> + <table type='slic'>/path/to/slic.dat</table> + </acpi> + </os> + <features> + <acpi/> + <apic/> + <pae/> + </features> + <clock offset='variable' adjustment='0' basis='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>restart</on_crash> + <devices> + <disk type='block' device='disk'> + <driver name='phy' type='raw'/> + <source dev='/dev/HostVG/XenGuest2'/> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + </devices> +</domain> diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c index 3b3f634..120796b 100644 --- a/tests/libxlxml2domconfigtest.c +++ b/tests/libxlxml2domconfigtest.c @@ -212,6 +212,8 @@ mymain(void) DO_TEST("fullvirt-cpuid-legacy-nest"); # endif
+ DO_TEST("fullvirt-acpi-slic"); + # ifdef LIBXL_HAVE_BUILDINFO_GRANT_LIMITS DO_TEST("max-gntframes-hvm"); # endif

On Mon, Sep 16, 2019 at 12:23:35PM +0000, Jim Fehlig wrote:
On 9/15/19 1:43 PM, Marek Marczykowski-Górecki wrote:
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> --- tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json | 54 +++++++++++++- tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml | 32 ++++++++- tests/libxlxml2domconfigtest.c | 2 +- 3 files changed, 88 insertions(+) create mode 100644 tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json create mode 100644 tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml
diff --git a/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json new file mode 100644 index 0000000..5d85d75 --- /dev/null +++ b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json @@ -0,0 +1,54 @@ +{ + "c_info": { + "type": "hvm", + "name": "XenGuest2", + "uuid": "c7a5fdb2-cdaf-9455-926a-d65c16db1809" + }, + "b_info": { + "max_vcpus": 1, + "avail_vcpus": [ + 0 + ], + "max_memkb": 592896, + "target_memkb": 403456, + "shadow_memkb": 5656, + "sched_params": { + }, + "nested_hvm": "False",
I had to remove the above line otherwise 'make check' fails. Did it work for you as is?
Yes, it works for me. But what's interesting, if I remove it, it works too. Other modifications do cause the test to fail, so the test was called. Maybe it's about Xen libs version? 4.8 here.
Regards, Jim
+ "type.hvm": { + "pae": "True", + "apic": "True", + "acpi": "True", + "acpi_firmware": "/path/to/slic.dat", + "nographic": "True", + "vnc": { + "enable": "False" + }, + "sdl": { + "enable": "False" + }, + "spice": { + + }, + "boot": "c", + "rdm": { + + } + }, + "arch_arm": { + + } + }, + "disks": [ + { + "pdev_path": "/dev/HostVG/XenGuest2", + "vdev": "hda", + "backend": "phy", + "format": "raw", + "removable": 1, + "readwrite": 1 + } + ], + "on_reboot": "restart", + "on_crash": "restart" +} diff --git a/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml new file mode 100644 index 0000000..017fdb5 --- /dev/null +++ b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml @@ -0,0 +1,32 @@ +<domain type='xen'> + <name>XenGuest2</name> + <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>592896</memory> + <currentMemory unit='KiB'>403456</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='xenfv'>hvm</type> + <acpi> + <table type='slic'>/path/to/slic.dat</table> + </acpi> + </os> + <features> + <acpi/> + <apic/> + <pae/> + </features> + <clock offset='variable' adjustment='0' basis='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>restart</on_crash> + <devices> + <disk type='block' device='disk'> + <driver name='phy' type='raw'/> + <source dev='/dev/HostVG/XenGuest2'/> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + </devices> +</domain> diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c index 3b3f634..120796b 100644 --- a/tests/libxlxml2domconfigtest.c +++ b/tests/libxlxml2domconfigtest.c @@ -212,6 +212,8 @@ mymain(void) DO_TEST("fullvirt-cpuid-legacy-nest"); # endif
+ DO_TEST("fullvirt-acpi-slic"); + # ifdef LIBXL_HAVE_BUILDINFO_GRANT_LIMITS DO_TEST("max-gntframes-hvm"); # endif
-- Best Regards, Marek Marczykowski-Górecki Invisible Things Lab A: Because it messes up the order in which people normally read text. Q: Why is top-posting such a bad thing?

On 9/16/19 6:47 AM, Marek Marczykowski-Górecki wrote:
On Mon, Sep 16, 2019 at 12:23:35PM +0000, Jim Fehlig wrote:
On 9/15/19 1:43 PM, Marek Marczykowski-Górecki wrote:
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> --- tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json | 54 +++++++++++++- tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml | 32 ++++++++- tests/libxlxml2domconfigtest.c | 2 +- 3 files changed, 88 insertions(+) create mode 100644 tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json create mode 100644 tests/libxlxml2domconfigdata/fullvirt-acpi-slic.xml
diff --git a/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json new file mode 100644 index 0000000..5d85d75 --- /dev/null +++ b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json @@ -0,0 +1,54 @@ +{ + "c_info": { + "type": "hvm", + "name": "XenGuest2", + "uuid": "c7a5fdb2-cdaf-9455-926a-d65c16db1809" + }, + "b_info": { + "max_vcpus": 1, + "avail_vcpus": [ + 0 + ], + "max_memkb": 592896, + "target_memkb": 403456, + "shadow_memkb": 5656, + "sched_params": { + }, + "nested_hvm": "False",
I had to remove the above line otherwise 'make check' fails. Did it work for you as is?
Yes, it works for me. But what's interesting, if I remove it, it works too. Other modifications do cause the test to fail, so the test was called. Maybe it's about Xen libs version? 4.8 here.
I think so. Starting with Xen 4.10 'nested_hvm' is not included in json config if it is set to the default value (which is consistent with other settings). I've removed it in my local branch and will push the series soon. BTW, the mentioning of versions got me to thinking that we should bump the minimum supported Xen version to 4.9. According to the support matrix for older xen versions [0], 4.8 general support ended June 2018 and security support ends in Dec 2019 (soon). 4.9 general support ends in Jan 2020 and security support extends until July 2020. What is your opinion on bumping the minimum version to 4.9? Regards, Jim [0] https://wiki.xenproject.org/wiki/Xen_Project_Release_Features

This isn't exactly equivalent setting (acpi_firmware may point to non-SLIC ACPI table), but it's the most behavior preserving option. Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> --- src/libxl/xen_xl.c | 7 ++- tests/xlconfigdata/test-fullvirt-acpi-slic.cfg | 26 ++++++++- tests/xlconfigdata/test-fullvirt-acpi-slic.xml | 63 +++++++++++++++++++- tests/xlconfigtest.c | 1 +- 4 files changed, 97 insertions(+) create mode 100644 tests/xlconfigdata/test-fullvirt-acpi-slic.cfg create mode 100644 tests/xlconfigdata/test-fullvirt-acpi-slic.xml diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c index 3a41a4a..015f0aa 100644 --- a/src/libxl/xen_xl.c +++ b/src/libxl/xen_xl.c @@ -134,6 +134,9 @@ xenParseXLOS(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps) } } + if (xenConfigCopyStringOpt(conf, "acpi_firmware", &def->os.slic_table) < 0) + return -1; + #ifdef LIBXL_HAVE_BUILDINFO_KERNEL if (xenConfigCopyStringOpt(conf, "kernel", &def->os.kernel) < 0) return -1; @@ -1247,6 +1250,10 @@ xenFormatXLOS(virConfPtr conf, virDomainDefPtr def) return -1; } + if (def->os.slic_table && + xenConfigSetString(conf, "acpi_firmware", def->os.slic_table) < 0) + return -1; + #ifdef LIBXL_HAVE_BUILDINFO_KERNEL if (def->os.kernel && xenConfigSetString(conf, "kernel", def->os.kernel) < 0) diff --git a/tests/xlconfigdata/test-fullvirt-acpi-slic.cfg b/tests/xlconfigdata/test-fullvirt-acpi-slic.cfg new file mode 100644 index 0000000..99b1726 --- /dev/null +++ b/tests/xlconfigdata/test-fullvirt-acpi-slic.cfg @@ -0,0 +1,26 @@ +name = "XenGuest2" +uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" +maxmem = 579 +memory = 394 +vcpus = 1 +pae = 1 +acpi = 1 +apic = 1 +viridian = 0 +rtc_timeoffset = 0 +localtime = 0 +on_poweroff = "destroy" +on_reboot = "restart" +on_crash = "restart" +device_model = "/usr/lib/xen/bin/qemu-system-i386" +sdl = 0 +vnc = 1 +vncunused = 1 +vnclisten = "127.0.0.1" +vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000" ] +parallel = "none" +serial = "none" +builder = "hvm" +acpi_firmware = "/sys/firmware/acpi/tables/SLIC" +boot = "d" +disk = [ "format=raw,vdev=hda,access=rw,backendtype=phy,target=/dev/HostVG/XenGuest2", "format=qcow2,vdev=hdb,access=rw,backendtype=qdisk,target=/var/lib/libvirt/images/XenGuest2-home", "format=raw,vdev=hdc,access=ro,backendtype=qdisk,devtype=cdrom,target=/root/boot.iso" ] diff --git a/tests/xlconfigdata/test-fullvirt-acpi-slic.xml b/tests/xlconfigdata/test-fullvirt-acpi-slic.xml new file mode 100644 index 0000000..9727422 --- /dev/null +++ b/tests/xlconfigdata/test-fullvirt-acpi-slic.xml @@ -0,0 +1,63 @@ +<domain type='xen'> + <name>XenGuest2</name> + <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>592896</memory> + <currentMemory unit='KiB'>403456</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='xenfv'>hvm</type> + <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader> + <acpi> + <table type='slic'>/sys/firmware/acpi/tables/SLIC</table> + </acpi> + <boot dev='cdrom'/> + </os> + <features> + <acpi/> + <apic/> + <pae/> + </features> + <clock offset='variable' adjustment='0' basis='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>restart</on_crash> + <devices> + <emulator>/usr/lib/xen/bin/qemu-system-i386</emulator> + <disk type='block' device='disk'> + <driver name='phy' type='raw'/> + <source dev='/dev/HostVG/XenGuest2'/> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/XenGuest2-home'/> + <target dev='hdb' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='1'/> + </disk> + <disk type='file' device='cdrom'> + <driver name='qemu' type='raw'/> + <source file='/root/boot.iso'/> + <target dev='hdc' bus='ide'/> + <readonly/> + <address type='drive' controller='0' bus='1' target='0' unit='0'/> + </disk> + <controller type='xenbus' index='0'/> + <controller type='ide' index='0'/> + <interface type='bridge'> + <mac address='00:16:3e:66:92:9c'/> + <source bridge='xenbr1'/> + <script path='vif-bridge'/> + <model type='e1000'/> + </interface> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'> + <listen type='address' address='127.0.0.1'/> + </graphics> + <video> + <model type='cirrus' vram='8192' heads='1' primary='yes'/> + </video> + <memballoon model='xen'/> + </devices> +</domain> diff --git a/tests/xlconfigtest.c b/tests/xlconfigtest.c index 80ac9b2..f49202d 100644 --- a/tests/xlconfigtest.c +++ b/tests/xlconfigtest.c @@ -266,6 +266,7 @@ mymain(void) DO_TEST("fullvirt-nestedhvm"); DO_TEST("fullvirt-nestedhvm-disabled"); DO_TEST("fullvirt-cpuid"); + DO_TEST("fullvirt-acpi-slic"); #ifdef LIBXL_HAVE_VNUMA DO_TEST("fullvirt-vnuma"); DO_TEST_PARSE("fullvirt-vnuma-autocomplete", false); -- git-series 0.9.1
participants (2)
-
Jim Fehlig
-
Marek Marczykowski-Górecki