Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: PPC: booke: Get/set guest EPCR register using ONE_REG interface

Implement ONE_REG interface for EPCR register adding KVM_REG_PPC_EPCR to
the list of ONE_REG PPC supported registers.

Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
[agraf: remove HV dependency, use get/put_user]
Signed-off-by: Alexander Graf <agraf@suse.de>

authored by

Mihai Caraman and committed by
Alexander Graf
352df1de 38f98824

+17
+1
Documentation/virtual/kvm/api.txt
··· 1773 1773 PPC | KVM_REG_PPC_VPA_ADDR | 64 1774 1774 PPC | KVM_REG_PPC_VPA_SLB | 128 1775 1775 PPC | KVM_REG_PPC_VPA_DTL | 128 1776 + PPC | KVM_REG_PPC_EPCR | 32 1776 1777 1777 1778 4.69 KVM_GET_ONE_REG 1778 1779
+2
arch/powerpc/include/uapi/asm/kvm.h
··· 411 411 #define KVM_REG_PPC_VPA_SLB (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x83) 412 412 #define KVM_REG_PPC_VPA_DTL (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x84) 413 413 414 + #define KVM_REG_PPC_EPCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x85) 415 + 414 416 #endif /* __LINUX_KVM_POWERPC_H */
+14
arch/powerpc/kvm/booke.c
··· 1388 1388 &vcpu->arch.dbg_reg.dac[dac], sizeof(u64)); 1389 1389 break; 1390 1390 } 1391 + #if defined(CONFIG_64BIT) 1392 + case KVM_REG_PPC_EPCR: 1393 + r = put_user(vcpu->arch.epcr, (u32 __user *)(long)reg->addr); 1394 + break; 1395 + #endif 1391 1396 default: 1392 1397 break; 1393 1398 } ··· 1420 1415 (u64 __user *)(long)reg->addr, sizeof(u64)); 1421 1416 break; 1422 1417 } 1418 + #if defined(CONFIG_64BIT) 1419 + case KVM_REG_PPC_EPCR: { 1420 + u32 new_epcr; 1421 + r = get_user(new_epcr, (u32 __user *)(long)reg->addr); 1422 + if (r == 0) 1423 + kvmppc_set_epcr(vcpu, new_epcr); 1424 + break; 1425 + } 1426 + #endif 1423 1427 default: 1424 1428 break; 1425 1429 }