On 05.09.2013, at 22:18, Paul Mackerras wrote: > The VRSAVE register value for a vcpu is accessible through the > GET/SET_SREGS interface for Book E processors, but not for Book 3S > processors. In order to make this accessible for Book 3S processors, > this adds a new register identifier for GET/SET_ONE_REG, and adds > the code to implement it. > > Signed-off-by: Paul Mackerras <paulus@xxxxxxxxx> > --- > Documentation/virtual/kvm/api.txt | 1 + > arch/powerpc/include/uapi/asm/kvm.h | 2 ++ > arch/powerpc/kvm/book3s.c | 10 ++++++++++ > 3 files changed, 13 insertions(+) > > diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt > index 9486e5a..c36ff9af 100644 > --- a/Documentation/virtual/kvm/api.txt > +++ b/Documentation/virtual/kvm/api.txt > @@ -1834,6 +1834,7 @@ registers, find a list below: > PPC | KVM_REG_PPC_TCSCR | 64 > PPC | KVM_REG_PPC_PID | 64 > PPC | KVM_REG_PPC_ACOP | 64 > + PPC | KVM_REG_PPC_VRSAVE | 32 > PPC | KVM_REG_PPC_TM_GPR0 | 64 > ... > PPC | KVM_REG_PPC_TM_GPR31 | 64 > diff --git a/arch/powerpc/include/uapi/asm/kvm.h b/arch/powerpc/include/uapi/asm/kvm.h > index a8124fe..b98bf3f 100644 > --- a/arch/powerpc/include/uapi/asm/kvm.h > +++ b/arch/powerpc/include/uapi/asm/kvm.h > @@ -532,6 +532,8 @@ struct kvm_get_htab_header { > #define KVM_REG_PPC_PID (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb2) > #define KVM_REG_PPC_ACOP (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb3) > > +#define KVM_REG_PPC_VRSAVE (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb4) > + > /* Transactional Memory checkpointed state: > * This is all GPRs, all VSX regs and a subset of SPRs > */ > diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c > index 700df6f..f97369d 100644 > --- a/arch/powerpc/kvm/book3s.c > +++ b/arch/powerpc/kvm/book3s.c I don't like how this is available for book3s, but not for booke. In the long run it might make sense to create a generic one_reg handler for shared fields. But in the meantime, could you please just add handling for booke as well? I'll apply the patch in the meantime, but please send another one doing this for booke as well. Alex > @@ -528,6 +528,9 @@ int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg) > } > val = get_reg_val(reg->id, vcpu->arch.vscr.u[3]); > break; > + case KVM_REG_PPC_VRSAVE: > + val = get_reg_val(reg->id, vcpu->arch.vrsave); > + break; > #endif /* CONFIG_ALTIVEC */ > case KVM_REG_PPC_DEBUG_INST: { > u32 opcode = INS_TW; > @@ -605,6 +608,13 @@ int kvm_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg) > } > vcpu->arch.vscr.u[3] = set_reg_val(reg->id, val); > break; > + case KVM_REG_PPC_VRSAVE: > + if (!cpu_has_feature(CPU_FTR_ALTIVEC)) { > + r = -ENXIO; > + break; > + } > + vcpu->arch.vrsave = set_reg_val(reg->id, val); > + break; > #endif /* CONFIG_ALTIVEC */ > #ifdef CONFIG_KVM_XICS > case KVM_REG_PPC_ICP_STATE: > -- > 1.8.4.rc3 > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html