It's documented to return 0 on success, not the number of msrs in the list. Signed-off-by: Rusty Russell <rusty.russell@xxxxxxxxxx> diff --git a/arch/arm/kvm/coproc.c b/arch/arm/kvm/coproc.c index e39b601..23b699f 100644 --- a/arch/arm/kvm/coproc.c +++ b/arch/arm/kvm/coproc.c @@ -954,6 +959,7 @@ unsigned long kvm_arm_num_guest_msrs(struct kvm_vcpu *vcpu) int kvm_arm_copy_msrindices(struct kvm_vcpu *vcpu, u32 __user *uindices) { unsigned int i; + int err; /* First give them all the invariant registers' indices. */ for (i = 0; i < ARRAY_SIZE(invariant_cp15); i++) { @@ -962,7 +968,10 @@ int kvm_arm_copy_msrindices(struct kvm_vcpu *vcpu, u32 __user *uindices) uindices++; } - return walk_msrs(vcpu, uindices); + err = walk_msrs(vcpu, uindices); + if (err > 0) + err = 0; + return err; } void kvm_coproc_table_init(void) _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm