]> git.proxmox.com Git - mirror_qemu.git/commit - hw/ppc/spapr.c
target/ppc: Manage external HPT via virtual hypervisor
authorDavid Gibson <david@gibson.dropbear.id.au>
Thu, 23 Feb 2017 00:39:18 +0000 (11:39 +1100)
committerDavid Gibson <david@gibson.dropbear.id.au>
Wed, 1 Mar 2017 00:23:39 +0000 (11:23 +1100)
commite57ca75ce3b2bd33102573a8c0555d62e1bcfceb
tree4bd3de614de344aff41a51060a67f0beb4ba912b
parent36778660d7fd0748a6129916e47ecedd67bdb758
target/ppc: Manage external HPT via virtual hypervisor

The pseries machine type implements the behaviour of a PAPR compliant
hypervisor, without actually executing such a hypervisor on the virtual
CPU.  To do this we need some hooks in the CPU code to make hypervisor
facilities get redirected to the machine instead of emulated internally.

For hypercalls this is managed through the cpu->vhyp field, which points
to a QOM interface with a method implementing the hypercall.

For the hashed page table (HPT) - also a hypervisor resource - we use an
older hack.  CPUPPCState has an 'external_htab' field which when non-NULL
indicates that the HPT is stored in qemu memory, rather than within the
guest's address space.

For consistency - and to make some future extensions easier - this merges
the external HPT mechanism into the vhyp mechanism.  Methods are added
to vhyp for the basic operations the core hash MMU code needs: map_hptes()
and unmap_hptes() for reading the HPT, store_hpte() for updating it and
hpt_mask() to retrieve its size.

To match this, the pseries machine now sets these vhyp fields in its
existing vhyp class, rather than reaching into the cpu object to set the
external_htab field.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
hw/ppc/spapr.c
hw/ppc/spapr_cpu_core.c
hw/ppc/spapr_hcall.c
target/ppc/cpu.h
target/ppc/kvm.c
target/ppc/machine.c
target/ppc/mmu-hash32.h
target/ppc/mmu-hash64.c
target/ppc/mmu-hash64.h
target/ppc/mmu_helper.c