qemu/target/ppc
David Gibson 0b0b831016 pseries: Implement HPT resizing
This patch implements hypercalls allowing a PAPR guest to resize its own
hash page table.  This will eventually allow for more flexible memory
hotplug.

The implementation is partially asynchronous, handled in a special thread
running the hpt_prepare_thread() function.  The state of a pending resize
is stored in SPAPR_MACHINE->pending_hpt.

The H_RESIZE_HPT_PREPARE hypercall will kick off creation of a new HPT, or,
if one is already in progress, monitor it for completion.  If there is an
existing HPT resize in progress that doesn't match the size specified in
the call, it will cancel it, replacing it with a new one matching the
given size.

The H_RESIZE_HPT_COMMIT completes transition to a resized HPT, and can only
be called successfully once H_RESIZE_HPT_PREPARE has successfully
completed initialization of a new HPT.  The guest must ensure that there
are no concurrent accesses to the existing HPT while this is called (this
effectively means stop_machine() for Linux guests).

For now H_RESIZE_HPT_COMMIT goes through the whole old HPT, rehashing each
HPTE into the new HPT.  This can have quite high latency, but it seems to
be of the order of typical migration downtime latencies for HPTs of size
up to ~2GiB (which would be used in a 256GiB guest).

In future we probably want to move more of the rehashing to the "prepare"
phase, by having H_ENTER and other hcalls update both current and
pending HPTs.  That's a project for another day, but should be possible
without any changes to the guest interface.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2017-07-17 15:07:05 +10:00
..
translate target-ppc: Add xscvqpudz and xscvqpuwz instructions 2017-02-22 11:28:28 +11:00
arch_dump.c target/ppc: Fix size of struct PPCElfPrstatus 2017-04-26 12:41:55 +10:00
compat.c pseries: Move CPU compatibility property to machine 2017-06-30 14:03:31 +10:00
cpu-models.c target/ppc/cpu-models: Fix/remove bad CPU aliases 2017-01-31 13:46:26 +11:00
cpu-models.h target/ppc: Allow workarounds for POWER9 DD1 2017-05-11 09:45:15 +10:00
cpu-qom.h spapr: Add ibm,processor-radix-AP-encodings to the device tree 2017-04-26 12:00:41 +10:00
cpu.c target/ppc: support for 32-bit carry and overflow 2017-03-01 11:23:39 +11:00
cpu.h ppc: Rework CPU compatibility testing across migration 2017-06-30 14:03:31 +10:00
dfp_helper.c
excp_helper.c target-ppc: SPR_BOOKE_ESR not set on FP exceptions 2017-07-11 11:04:01 +10:00
fpu_helper.c target/ppc: use helper for excp handling 2017-03-06 13:17:28 +11:00
gdbstub.c
helper.h target/ppc: Flush TLB on write to PIDR 2017-04-26 12:41:56 +10:00
helper_regs.h cputlb: drop flush_global flag from tlb_flush 2017-01-13 14:24:37 +00:00
int_helper.c target/ppc: introduce helper_update_ov_legacy 2017-03-01 11:23:39 +11:00
internal.h target-ppc: implement load atomic instruction 2017-02-22 11:28:27 +11:00
kvm-stub.c
kvm.c pseries: Stubs for HPT resizing 2017-07-17 15:07:05 +10:00
kvm_ppc.h pseries: Stubs for HPT resizing 2017-07-17 15:07:05 +10:00
machine.c ppc: Rework CPU compatibility testing across migration 2017-06-30 14:03:31 +10:00
Makefile.objs target/ppc: Implement ISA V3.00 radix page fault handler 2017-05-11 09:45:15 +10:00
mem_helper.c target-ppc: implement stxvll instructions 2017-01-31 10:10:13 +11:00
mfrom_table.c
mfrom_table_gen.c
misc_helper.c target/ppc: Flush TLB on write to PIDR 2017-04-26 12:41:56 +10:00
mmu-book3s-v3.c target/ppc: Implement ISA V3.00 radix page fault handler 2017-05-11 09:45:15 +10:00
mmu-book3s-v3.h target/ppc: Implement ISA V3.00 radix page fault handler 2017-05-11 09:45:15 +10:00
mmu-hash32.c target/ppc: Eliminate htab_base and htab_mask variables 2017-03-01 11:23:39 +11:00
mmu-hash32.h target/ppc: Manage external HPT via virtual hypervisor 2017-03-01 11:23:39 +11:00
mmu-hash64.c spapr: Small cleanup of PPC MMU enums 2017-03-03 11:30:59 +11:00
mmu-hash64.h pseries: Implement HPT resizing 2017-07-17 15:07:05 +10:00
mmu-radix64.c target/ppc: Add debug function for radix mmu translation 2017-07-11 11:04:02 +10:00
mmu-radix64.h target/ppc: Add debug function for radix mmu translation 2017-07-11 11:04:02 +10:00
mmu_helper.c target/ppc: Add debug function for radix mmu translation 2017-07-11 11:04:02 +10:00
monitor.c monitor: Fix crashes when using HMP commands without CPU 2017-02-21 18:29:01 +00:00
STATUS
timebase_helper.c
trace-events
translate.c target/ppc: Change tlbie invalid fields for POWER9 support 2017-05-11 09:45:15 +10:00
translate_init.c qdev: Add const qualifier to PropertyInfo definitions 2017-07-14 12:04:42 +02:00
user_only_helper.c