Re: [PATCH/RFC] KVM: ARM: VFP userspace interface.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11 September 2012 07:10, Rusty Russell <rusty.russell@xxxxxxxxxx> wrote:
> We use space #18 for floating point regs.

Userspace ABI looks fine to me.

> +static unsigned int num_vfp_regs(void)
> +{
> +       /* FP regs, FPEXC, FPSCR, FPINST, FPINST2, MVFR0, MVFR1, FPSID. */
> +       return num_fp_regs() + 7;
> +}
> +
> +static int copy_vfp_regids(u64 __user *uindices)
> +{
> +       unsigned int i;
> +       const u64 u32reg = KVM_REG_ARM | KVM_REG_SIZE_U32 | KVM_REG_ARM_VFP;
> +       const u64 u64reg = KVM_REG_ARM | KVM_REG_SIZE_U64 | KVM_REG_ARM_VFP;
> +
> +       for (i = 0; i < num_fp_regs(); i++) {
> +               if (put_user((u64reg | KVM_REG_ARM_VFP_ID_BASE_REG) + i,
> +                            uindices))
> +                       return -EFAULT;
> +               uindices++;
> +       }
> +
> +       if (put_user(u32reg | KVM_REG_ARM_VFP_ID_FPEXC, uindices))
> +               return -EFAULT;
> +       uindices++, i++;
> +       if (put_user(u32reg | KVM_REG_ARM_VFP_ID_FPSCR, uindices))
> +               return -EFAULT;
> +       uindices++, i++;
> +       if (put_user(u32reg | KVM_REG_ARM_VFP_ID_FPINST, uindices))
> +               return -EFAULT;
> +       uindices++, i++;
> +       if (put_user(u32reg | KVM_REG_ARM_VFP_ID_FPINST2, uindices))
> +               return -EFAULT;
> +       uindices++, i++;
> +       if (put_user(u32reg | KVM_REG_ARM_VFP_ID_MVFR0, uindices))
> +               return -EFAULT;
> +       uindices++, i++;
> +       if (put_user(u32reg | KVM_REG_ARM_VFP_ID_MVFR1, uindices))
> +               return -EFAULT;
> +       uindices++, i++;
> +       if (put_user(u32reg | KVM_REG_ARM_VFP_ID_FPSID, uindices))
> +               return -EFAULT;
> +       uindices++, i++;
> +
> +       return i;
> +}

If you had an array:
static const int vfp_sysregs[] = { KVM_REG_ARM_VFP_ID_FPEXC,
    KVM_REG_ARM_VFP_ID_FPSCR, etc etc etc };

then you could get rid of the hardcoded 7 in num_vfp_regs()
and have a loop in copy_vfp_regids() rather than the repeated
put_user() stanzas. That seems to me like it would be slightly
cleaner-looking code.

-- PMM
_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux