summaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@ozlabs.org>2018-04-20 11:53:22 +0200
committerPaul Mackerras <paulus@ozlabs.org>2018-05-17 08:36:48 +0200
commit7aa15842c15f8a32000372ad2b3195029fde6fd4 (patch)
tree29cb16d194b0f3e3003054901ee850a644ae5735 /init
parentKVM: PPC: Book3S HV: Add 'online' register to ONE_REG interface (diff)
downloadlinux-7aa15842c15f8a32000372ad2b3195029fde6fd4.tar.xz
linux-7aa15842c15f8a32000372ad2b3195029fde6fd4.zip
KVM: PPC: Book3S HV: Set RWMR on POWER8 so PURR/SPURR count correctly
Although Linux doesn't use PURR and SPURR ((Scaled) Processor Utilization of Resources Register), other OSes depend on them. On POWER8 they count at a rate depending on whether the VCPU is idle or running, the activity of the VCPU, and the value in the RWMR (Region-Weighting Mode Register). Hardware expects the hypervisor to update the RWMR when a core is dispatched to reflect the number of online VCPUs in the vcore. This adds code to maintain a count in the vcore struct indicating how many VCPUs are online. In kvmppc_run_core we use that count to set the RWMR register on POWER8. If the core is split because of a static or dynamic micro-threading mode, we use the value for 8 threads. The RWMR value is not relevant when the host is executing because Linux does not use the PURR or SPURR register, so we don't bother saving and restoring the host value. For the sake of old userspace which does not set the KVM_REG_PPC_ONLINE register, we set online to 1 if it was 0 at the time of a KVM_RUN ioctl. Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Diffstat (limited to 'init')
0 files changed, 0 insertions, 0 deletions