Re: [Xen-devel] HVMLite / PVHv2 - using x86 EFI boot entry

From: Roger Pau Monné
Date: Wed Apr 13 2016 - 06:04:30 EST


On Wed, Apr 06, 2016 at 04:02:40PM +0100, Matt Fleming wrote:
[...]
> One place that struck me as suitable for this "hypercall in an EFI
> service stub" approach is the trouble with doing ACPI reboot as
> documented here,
>
> http://lists.xen.org/archives/html/xen-devel/2016-02/msg01609.html
>
> Performing the reset hypercall from within HVMlite's custom EfiReset()
> service would avoid having to touch ACPICA at all, and would be
> indistinguishable from bare metal.

I don't get this, the "reset/shutdown" hypercall requires the following
steps from Dom0 (it's not as simple as calling a hypercall):

The way to perform a full system power off from Dom0 is different than
what's done in a DomU guest. In order to perform a power off from Dom0 the
native ACPI path should be followed, but the guest should not write the
`SLP_EN` bit to the Pm1Control register. Instead the
`XENPF_enter_acpi_sleep` hypercall should be used, filling the following
data in the `xen_platform_op` struct:

cmd = XENPF_enter_acpi_sleep
interface_version = XENPF_INTERFACE_VERSION
u.enter_acpi_sleep.pm1a_cnt_val = Pm1aControlValue
u.enter_acpi_sleep.pm1b_cnt_val = Pm1bControlValue

At which point it means that we are either going to duplicate ACPICA code
into the HVMlite's custom EfiReset() service, or we are going to call into
ACPICA, which is what we already do now.

Roger.