From: "Alex Bennée" <alex.bennee@linaro.org> To: Dave Martin <Dave.Martin@arm.com> Cc: Okamoto Takayuki <tokamoto@jp.fujitsu.com>, Christoffer Dall <cdall@kernel.org>, Ard Biesheuvel <ard.biesheuvel@linaro.org>, Marc Zyngier <marc.zyngier@arm.com>, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will.deacon@arm.com>, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org Subject: Re: [RFC PATCH 13/16] KVM: Allow 2048-bit register access via KVM_{GET, SET}_ONE_REG Date: Thu, 26 Jul 2018 14:55:44 +0100 [thread overview] Message-ID: <871sbqt82n.fsf@linaro.org> (raw) In-Reply-To: <20180726125834.GV4240@e103592.cambridge.arm.com> Dave Martin <Dave.Martin@arm.com> writes: > On Wed, Jul 25, 2018 at 04:58:30PM +0100, Alex Bennée wrote: >> >> Dave Martin <Dave.Martin@arm.com> writes: >> >> > The Arm SVE architecture defines registers that are up to 2048 bits >> > in size (with some possibility of further future expansion). >> > >> > In order to avoid the need for an excessively large number of >> > ioctls when saving and restoring a vcpu's registers, this patch >> > adds a #define to make support for individual 2048-bit registers >> > through the KVM_{GET,SET}_ONE_REG ioctl interface official. This >> > will allow each SVE register to be accessed in a single call. >> > >> > There are sufficient spare bits in the register id size field for >> > this change, so there is no ABI impact providing that >> > KVM_GET_REG_LIST does not enumerate any 2048-bit register unless >> > userspace explicitly opts in to the relevant architecture-specific >> > features. >> >> Does it? It's not in this patch and looking at the final tree: >> >> unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu) >> { >> unsigned long res = 0; >> >> res += num_core_regs(); >> res += num_sve_regs(vcpu); >> res += kvm_arm_num_sys_reg_descs(vcpu); >> res += kvm_arm_get_fw_num_regs(vcpu); >> res += NUM_TIMER_REGS; >> >> return res; >> } >> >> >> which leads to: >> >> static int enumerate_sve_regs(const struct kvm_vcpu *vcpu, u64 __user **uind) >> { >> unsigned int n, i; >> int err = 0; >> int total = 0; >> unsigned int slices; >> >> if (!vcpu_has_sve(&vcpu->arch)) >> return 0; >> >> Which enumerates the SVE regs if vcpu_has_sve() which AFAICT is true if >> the host supports it, not if the user has requested it. >> >> I'll have to check what but given the indirection of kvm_one_reg I >> wonder if existing binaries might end up spamming a badly sized array >> when run on a new SVE supporting kernel? > > That shouldn't be the case: vcpu_has_sve() checks for the > KVM_ARM64_GUEST_HAS_SVE flag, which should only be set if userspace asks > for it. > > Give me a shout if this doesn't seem to be the case... Ahh I missed it the first time: if (system_supports_sve() && test_bit(KVM_ARM_VCPU_SVE, vcpu->arch.features)) { vcpu->arch.flags |= KVM_ARM64_GUEST_HAS_SVE; And vcpu->arch.features is set by the user. However it will be set as unless you specify otherwise we use the results of probed: ret = ioctl(vmfd, KVM_ARM_PREFERRED_TARGET, init); so the user will get it by definition when they first run on SVE capable hardware. > > Cheers > ---Dave -- Alex Bennée _______________________________________________ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
WARNING: multiple messages have this Message-ID (diff)
From: alex.bennee@linaro.org (Alex Bennée) To: linux-arm-kernel@lists.infradead.org Subject: [RFC PATCH 13/16] KVM: Allow 2048-bit register access via KVM_{GET, SET}_ONE_REG Date: Thu, 26 Jul 2018 14:55:44 +0100 [thread overview] Message-ID: <871sbqt82n.fsf@linaro.org> (raw) In-Reply-To: <20180726125834.GV4240@e103592.cambridge.arm.com> Dave Martin <Dave.Martin@arm.com> writes: > On Wed, Jul 25, 2018 at 04:58:30PM +0100, Alex Benn?e wrote: >> >> Dave Martin <Dave.Martin@arm.com> writes: >> >> > The Arm SVE architecture defines registers that are up to 2048 bits >> > in size (with some possibility of further future expansion). >> > >> > In order to avoid the need for an excessively large number of >> > ioctls when saving and restoring a vcpu's registers, this patch >> > adds a #define to make support for individual 2048-bit registers >> > through the KVM_{GET,SET}_ONE_REG ioctl interface official. This >> > will allow each SVE register to be accessed in a single call. >> > >> > There are sufficient spare bits in the register id size field for >> > this change, so there is no ABI impact providing that >> > KVM_GET_REG_LIST does not enumerate any 2048-bit register unless >> > userspace explicitly opts in to the relevant architecture-specific >> > features. >> >> Does it? It's not in this patch and looking at the final tree: >> >> unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu) >> { >> unsigned long res = 0; >> >> res += num_core_regs(); >> res += num_sve_regs(vcpu); >> res += kvm_arm_num_sys_reg_descs(vcpu); >> res += kvm_arm_get_fw_num_regs(vcpu); >> res += NUM_TIMER_REGS; >> >> return res; >> } >> >> >> which leads to: >> >> static int enumerate_sve_regs(const struct kvm_vcpu *vcpu, u64 __user **uind) >> { >> unsigned int n, i; >> int err = 0; >> int total = 0; >> unsigned int slices; >> >> if (!vcpu_has_sve(&vcpu->arch)) >> return 0; >> >> Which enumerates the SVE regs if vcpu_has_sve() which AFAICT is true if >> the host supports it, not if the user has requested it. >> >> I'll have to check what but given the indirection of kvm_one_reg I >> wonder if existing binaries might end up spamming a badly sized array >> when run on a new SVE supporting kernel? > > That shouldn't be the case: vcpu_has_sve() checks for the > KVM_ARM64_GUEST_HAS_SVE flag, which should only be set if userspace asks > for it. > > Give me a shout if this doesn't seem to be the case... Ahh I missed it the first time: if (system_supports_sve() && test_bit(KVM_ARM_VCPU_SVE, vcpu->arch.features)) { vcpu->arch.flags |= KVM_ARM64_GUEST_HAS_SVE; And vcpu->arch.features is set by the user. However it will be set as unless you specify otherwise we use the results of probed: ret = ioctl(vmfd, KVM_ARM_PREFERRED_TARGET, init); so the user will get it by definition when they first run on SVE capable hardware. > > Cheers > ---Dave -- Alex Benn?e
next prev parent reply other threads:[~2018-07-26 13:55 UTC|newest] Thread overview: 178+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-06-21 14:57 [RFC PATCH 00/16] KVM: arm64: Initial support for SVE guests Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 01/16] arm64: fpsimd: Always set TIF_FOREIGN_FPSTATE on task state flush Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-06 9:07 ` Alex Bennée 2018-07-06 9:07 ` Alex Bennée 2018-06-21 14:57 ` [RFC PATCH 02/16] KVM: arm64: Delete orphaned declaration for __fpsimd_enabled() Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-06 9:08 ` Alex Bennée 2018-07-06 9:08 ` Alex Bennée 2018-06-21 14:57 ` [RFC PATCH 03/16] KVM: arm64: Refactor kvm_arm_num_regs() for easier maintenance Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-06 9:20 ` Alex Bennée 2018-07-06 9:20 ` Alex Bennée 2018-06-21 14:57 ` [RFC PATCH 04/16] KVM: arm64: Add missing #include of <linux/bitmap.h> to kvm_host.h Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-06 9:21 ` Alex Bennée 2018-07-06 9:21 ` Alex Bennée 2018-06-21 14:57 ` [RFC PATCH 05/16] KVM: arm: Add arch init/uninit hooks Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-06 10:02 ` Alex Bennée 2018-07-06 10:02 ` Alex Bennée 2018-07-09 15:15 ` Dave Martin 2018-07-09 15:15 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 06/16] arm64/sve: Determine virtualisation-friendly vector lengths Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-06 13:20 ` Marc Zyngier 2018-07-06 13:20 ` Marc Zyngier 2018-06-21 14:57 ` [RFC PATCH 07/16] arm64/sve: Enable SVE state tracking for non-task contexts Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-25 13:58 ` Alex Bennée 2018-07-25 13:58 ` Alex Bennée 2018-07-25 14:39 ` Dave Martin 2018-07-25 14:39 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 08/16] KVM: arm64: Support dynamically hideable system registers Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-25 14:12 ` Alex Bennée 2018-07-25 14:12 ` Alex Bennée 2018-07-25 14:36 ` Dave Martin 2018-07-25 14:36 ` Dave Martin 2018-07-25 15:41 ` Alex Bennée 2018-07-25 15:41 ` Alex Bennée 2018-07-26 12:53 ` Dave Martin 2018-07-26 12:53 ` Dave Martin 2018-08-07 19:20 ` Christoffer Dall 2018-08-07 19:20 ` Christoffer Dall 2018-08-08 8:33 ` Dave Martin 2018-08-08 8:33 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 09/16] KVM: arm64: Allow ID registers to by dynamically read-as-zero Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-25 15:46 ` Alex Bennée 2018-07-25 15:46 ` Alex Bennée 2018-08-06 13:03 ` Christoffer Dall 2018-08-06 13:03 ` Christoffer Dall 2018-08-07 11:09 ` Dave Martin 2018-08-07 11:09 ` Dave Martin 2018-08-07 19:35 ` Christoffer Dall 2018-08-07 19:35 ` Christoffer Dall 2018-08-08 9:11 ` Dave Martin 2018-08-08 9:11 ` Dave Martin 2018-08-08 9:58 ` Christoffer Dall 2018-08-08 9:58 ` Christoffer Dall 2018-08-08 14:03 ` Peter Maydell 2018-08-08 14:03 ` Peter Maydell 2018-08-09 10:19 ` Dave Martin 2018-08-09 10:19 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 10/16] KVM: arm64: Add a vcpu flag to control SVE visibility for the guest Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-19 11:08 ` Andrew Jones 2018-07-19 11:08 ` Andrew Jones 2018-07-25 11:41 ` Dave Martin 2018-07-25 11:41 ` Dave Martin 2018-07-25 13:43 ` Andrew Jones 2018-07-25 13:43 ` Andrew Jones 2018-07-25 14:41 ` Dave Martin 2018-07-25 14:41 ` Dave Martin 2018-07-19 15:02 ` Andrew Jones 2018-07-19 15:02 ` Andrew Jones 2018-07-25 11:48 ` Dave Martin 2018-07-25 11:48 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 11/16] KVM: arm64/sve: System register context switch and access support Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-19 11:11 ` Andrew Jones 2018-07-19 11:11 ` Andrew Jones 2018-07-25 11:45 ` Dave Martin 2018-07-25 11:45 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 12/16] KVM: arm64/sve: Context switch the SVE registers Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-19 13:13 ` Andrew Jones 2018-07-19 13:13 ` Andrew Jones 2018-07-25 11:50 ` Dave Martin 2018-07-25 11:50 ` Dave Martin 2018-07-25 13:57 ` Andrew Jones 2018-07-25 13:57 ` Andrew Jones 2018-07-25 14:12 ` Dave Martin 2018-07-25 14:12 ` Dave Martin 2018-08-06 13:19 ` Christoffer Dall 2018-08-06 13:19 ` Christoffer Dall 2018-08-07 11:15 ` Dave Martin 2018-08-07 11:15 ` Dave Martin 2018-08-07 19:43 ` Christoffer Dall 2018-08-07 19:43 ` Christoffer Dall 2018-08-08 8:23 ` Dave Martin 2018-08-08 8:23 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 13/16] KVM: Allow 2048-bit register access via KVM_{GET, SET}_ONE_REG Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-25 15:58 ` Alex Bennée 2018-07-25 15:58 ` Alex Bennée 2018-07-26 12:58 ` Dave Martin 2018-07-26 12:58 ` Dave Martin 2018-07-26 13:55 ` Alex Bennée [this message] 2018-07-26 13:55 ` Alex Bennée 2018-07-27 9:26 ` Dave Martin 2018-07-27 9:26 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 14/16] KVM: arm64/sve: Add SVE support to register access ioctl interface Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-19 13:04 ` Andrew Jones 2018-07-19 13:04 ` Andrew Jones 2018-07-25 14:06 ` Dave Martin 2018-07-25 14:06 ` Dave Martin 2018-07-25 17:20 ` Andrew Jones 2018-07-25 17:20 ` Andrew Jones 2018-07-26 13:10 ` Dave Martin 2018-07-26 13:10 ` Dave Martin 2018-08-03 14:57 ` Dave Martin 2018-08-03 14:57 ` Dave Martin 2018-08-03 15:11 ` Andrew Jones 2018-08-03 15:11 ` Andrew Jones 2018-08-03 15:38 ` Dave Martin 2018-08-03 15:38 ` Dave Martin 2018-08-06 13:25 ` Christoffer Dall 2018-08-06 13:25 ` Christoffer Dall 2018-08-07 11:17 ` Dave Martin 2018-08-07 11:17 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 15/16] KVM: arm64: Enumerate SVE register indices for KVM_GET_REG_LIST Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-19 14:12 ` Andrew Jones 2018-07-19 14:12 ` Andrew Jones 2018-07-25 14:50 ` Dave Martin 2018-07-25 14:50 ` Dave Martin 2018-06-21 14:57 ` [RFC PATCH 16/16] KVM: arm64/sve: Report and enable SVE API extensions for userspace Dave Martin 2018-06-21 14:57 ` Dave Martin 2018-07-19 14:59 ` Andrew Jones 2018-07-19 14:59 ` Andrew Jones 2018-07-25 15:27 ` Dave Martin 2018-07-25 15:27 ` Dave Martin 2018-07-25 16:52 ` Andrew Jones 2018-07-25 16:52 ` Andrew Jones 2018-07-26 13:18 ` Dave Martin 2018-07-26 13:18 ` Dave Martin 2018-08-06 13:41 ` Christoffer Dall 2018-08-06 13:41 ` Christoffer Dall 2018-08-07 11:23 ` Dave Martin 2018-08-07 11:23 ` Dave Martin 2018-08-07 20:08 ` Christoffer Dall 2018-08-07 20:08 ` Christoffer Dall 2018-08-08 8:30 ` Dave Martin 2018-08-08 8:30 ` Dave Martin 2018-07-19 15:24 ` Andrew Jones 2018-07-19 15:24 ` Andrew Jones 2018-07-26 13:23 ` Dave Martin 2018-07-26 13:23 ` Dave Martin 2018-07-06 8:22 ` [RFC PATCH 00/16] KVM: arm64: Initial support for SVE guests Alex Bennée 2018-07-06 8:22 ` Alex Bennée 2018-07-06 9:05 ` Dave Martin 2018-07-06 9:05 ` Dave Martin 2018-07-06 9:20 ` Alex Bennée 2018-07-06 9:20 ` Alex Bennée 2018-07-06 9:23 ` Peter Maydell 2018-07-06 9:23 ` Peter Maydell 2018-07-06 10:11 ` Alex Bennée 2018-07-06 10:11 ` Alex Bennée 2018-07-06 10:14 ` Peter Maydell 2018-07-06 10:14 ` Peter Maydell 2018-08-06 13:05 ` Christoffer Dall 2018-08-06 13:05 ` Christoffer Dall 2018-08-07 11:18 ` Dave Martin 2018-08-07 11:18 ` Dave Martin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=871sbqt82n.fsf@linaro.org \ --to=alex.bennee@linaro.org \ --cc=Dave.Martin@arm.com \ --cc=ard.biesheuvel@linaro.org \ --cc=catalin.marinas@arm.com \ --cc=cdall@kernel.org \ --cc=kvmarm@lists.cs.columbia.edu \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=marc.zyngier@arm.com \ --cc=tokamoto@jp.fujitsu.com \ --cc=will.deacon@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.