ACPI Table Fixes for vmrunkernel
authorMichael Taufen <mtaufen@gmail.com>
Tue, 29 Mar 2016 20:25:54 +0000 (13:25 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 6 Apr 2016 20:37:47 +0000 (16:37 -0400)
commit7c8ddb988fa3e2c4a959ee3076ef413ed5f88a89
treeefd8818f7858da800ac1dc7ec50c6a0a2029184e
parentd09867fc9524e95c7956e3eda220222b92eea7fb
ACPI Table Fixes for vmrunkernel

Please note: Our ACPI tables are still quite hacky, and should probably
revised at some point in the future.

Upgraded table revision numbers as per the ACPI 5.0a spec

Used macros from actbl.h for ACPI table signatures
  One issue was that we had used "FADT" as the signature
  for the FADT table, when the ACPI spec says to use
  "FACP." Using the macros from the header should help
  avoid this in the future.

Provided a pre-compiled (from asl to c) DSDT in a new header file.
ACPI requires the DSDT table be present, and Linux makes the
reasonable assumption that you will provide it.

Puts the FADT address in the first entry of the XSDT, as Linux expects.

Background:

Linux used to place tables at fixed indices in an internal array
when reading in ACPI. It would look for the DSDT in a specific place
in that array later on, even when it hadn't managed to install it,
and would bail out and continue booting when it found bogus data.

We noticed the issue when we upgraded our Linux fork to v4.5, in which
they use a default value of 0xffffffff for the FADT and DSDT indices,
and set these indices as the tables are installed rather than using
fixed positions.

It would look for the address of the DSDT at this index, and the use of the
retrieved, bogus address would cause a page fault in the kernel during boot.

Linux commit 8ec3f459073e67e5c6d78507dec693064b3040a2 contains the relevant
change to ACPI code.

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
[fixed checkpatch complaints, rm extraneous //comment]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tests/vmm/vmrunkernel.c
user/vmm/include/vmm/acpi/vmm_simple_dsdt.h [new file with mode: 0644]