* [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64
@ 2013-09-30 8:50 Anup Patel
2013-09-30 8:50 ` [PATCH v5 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function Anup Patel
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Anup Patel @ 2013-09-30 8:50 UTC (permalink / raw)
To: linux-arm-kernel
It will be very useful for user space (QEMU/KVMTOOL) if it has a
method of querying VCPU target type matching to underlying Host.
We can use such querying mechanism and implement machine models
in user space where VCPU target type is always same-as/similar-to
underlying Host (i.e. Target CPU=Host).
This patch series implements KVM_ARM_PREFERRED_TARGET vm ioclt for
querying VCPU target type matching underlying host. Using this new
ioctl we can implement VCPU target CPU=Host in user space.
Also, it is not mandatory to call KVM_ARM_PREFERRED_TARGET vm ioctl
and the old method of trying all possible target types using the
KVM_ARM_VCPU_INIT ioctl to initialize VCPU works fine.
V5:
- Update documentation based on review comments
V4:
- Fixed files exchanged between patches
- For now return zeroed features in struct kvm_vcpu_init instance
V3:
- Return -ENODEV if no preferred target available for host
- Make KVM_ARM_PREFERRED_TARGET ioctl as vm ioctl
V2:
- Renamed the ioclt to KVM_ARM_PREFERRED_TARGET
- Return struct kvm_vcpu_init instace instead of just target type
V1:
- Initial patch-set with ioctl named as KVM_ARM_SUITABLE_TARGET
Anup Patel (4):
ARM: KVM: Implement kvm_vcpu_preferred_target() function
ARM64: KVM: Implement kvm_vcpu_preferred_target() function
ARM/ARM64: KVM: Implement KVM_ARM_PREFERRED_TARGET ioctl
KVM: Add documentation for KVM_ARM_PREFERRED_TARGET ioctl
Documentation/virtual/kvm/api.txt | 31 +++++++++++++++++++++++++++----
arch/arm/include/asm/kvm_host.h | 1 +
arch/arm/kvm/arm.c | 13 +++++++++++++
arch/arm/kvm/guest.c | 20 ++++++++++++++++++++
arch/arm64/include/asm/kvm_host.h | 1 +
arch/arm64/kvm/guest.c | 20 ++++++++++++++++++++
include/uapi/linux/kvm.h | 1 +
7 files changed, 83 insertions(+), 4 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v5 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function
2013-09-30 8:50 [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
@ 2013-09-30 8:50 ` Anup Patel
2013-09-30 8:50 ` [PATCH v5 2/4] ARM64: " Anup Patel
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Anup Patel @ 2013-09-30 8:50 UTC (permalink / raw)
To: linux-arm-kernel
This patch implements kvm_vcpu_preferred_target() function for
KVM ARM which will help us implement KVM_ARM_PREFERRED_TARGET ioctl
for user space.
Signed-off-by: Anup Patel <anup.patel@linaro.org>
Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
---
arch/arm/include/asm/kvm_host.h | 1 +
arch/arm/kvm/guest.c | 20 ++++++++++++++++++++
2 files changed, 21 insertions(+)
diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h
index 7d22517..76f3c19 100644
--- a/arch/arm/include/asm/kvm_host.h
+++ b/arch/arm/include/asm/kvm_host.h
@@ -154,6 +154,7 @@ struct kvm_vcpu_stat {
struct kvm_vcpu_init;
int kvm_vcpu_set_target(struct kvm_vcpu *vcpu,
const struct kvm_vcpu_init *init);
+int kvm_vcpu_preferred_target(struct kvm_vcpu_init *init);
unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu);
int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *indices);
struct kvm_one_reg;
diff --git a/arch/arm/kvm/guest.c b/arch/arm/kvm/guest.c
index 152d036..21beea0 100644
--- a/arch/arm/kvm/guest.c
+++ b/arch/arm/kvm/guest.c
@@ -222,6 +222,26 @@ int kvm_vcpu_set_target(struct kvm_vcpu *vcpu,
return kvm_reset_vcpu(vcpu);
}
+int kvm_vcpu_preferred_target(struct kvm_vcpu_init *init)
+{
+ int target = kvm_target_cpu();
+
+ if (target < 0)
+ return -ENODEV;
+
+ memset(init, 0, sizeof(*init));
+
+ /*
+ * For now, we don't return any features.
+ * In future, we might use features to return target
+ * specific features available for the preferred
+ * target type.
+ */
+ init->target = (__u32)target;
+
+ return 0;
+}
+
int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
{
return -EINVAL;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v5 2/4] ARM64: KVM: Implement kvm_vcpu_preferred_target() function
2013-09-30 8:50 [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
2013-09-30 8:50 ` [PATCH v5 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function Anup Patel
@ 2013-09-30 8:50 ` Anup Patel
2013-09-30 8:50 ` [PATCH v5 3/4] ARM/ARM64: KVM: Implement KVM_ARM_PREFERRED_TARGET ioctl Anup Patel
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Anup Patel @ 2013-09-30 8:50 UTC (permalink / raw)
To: linux-arm-kernel
This patch implements kvm_vcpu_preferred_target() function for
KVM ARM64 which will help us implement KVM_ARM_PREFERRED_TARGET
ioctl for user space.
Signed-off-by: Anup Patel <anup.patel@linaro.org>
Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
---
arch/arm64/include/asm/kvm_host.h | 1 +
arch/arm64/kvm/guest.c | 20 ++++++++++++++++++++
2 files changed, 21 insertions(+)
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index f318c43..b609db3 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -156,6 +156,7 @@ struct kvm_vcpu_stat {
struct kvm_vcpu_init;
int kvm_vcpu_set_target(struct kvm_vcpu *vcpu,
const struct kvm_vcpu_init *init);
+int kvm_vcpu_preferred_target(struct kvm_vcpu_init *init);
unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu);
int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *indices);
struct kvm_one_reg;
diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
index d7bf7d6..94e4b7a 100644
--- a/arch/arm64/kvm/guest.c
+++ b/arch/arm64/kvm/guest.c
@@ -254,6 +254,26 @@ int kvm_vcpu_set_target(struct kvm_vcpu *vcpu,
return kvm_reset_vcpu(vcpu);
}
+int kvm_vcpu_preferred_target(struct kvm_vcpu_init *init)
+{
+ int target = kvm_target_cpu();
+
+ if (target < 0)
+ return -ENODEV;
+
+ memset(init, 0, sizeof(*init));
+
+ /*
+ * For now, we don't return any features.
+ * In future, we might use features to return target
+ * specific features available for the preferred
+ * target type.
+ */
+ init->target = (__u32)target;
+
+ return 0;
+}
+
int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
{
return -EINVAL;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v5 3/4] ARM/ARM64: KVM: Implement KVM_ARM_PREFERRED_TARGET ioctl
2013-09-30 8:50 [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
2013-09-30 8:50 ` [PATCH v5 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function Anup Patel
2013-09-30 8:50 ` [PATCH v5 2/4] ARM64: " Anup Patel
@ 2013-09-30 8:50 ` Anup Patel
2013-09-30 8:50 ` [PATCH v5 4/4] KVM: Add documentation for " Anup Patel
2013-10-02 16:04 ` [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Christoffer Dall
4 siblings, 0 replies; 8+ messages in thread
From: Anup Patel @ 2013-09-30 8:50 UTC (permalink / raw)
To: linux-arm-kernel
For implementing CPU=host, we need a mechanism for querying
preferred VCPU target type on underlying Host.
This patch implements KVM_ARM_PREFERRED_TARGET vm ioctl which
returns struct kvm_vcpu_init instance containing information
about preferred VCPU target type and target specific features
available for it.
Signed-off-by: Anup Patel <anup.patel@linaro.org>
Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
---
arch/arm/kvm/arm.c | 13 +++++++++++++
include/uapi/linux/kvm.h | 1 +
2 files changed, 14 insertions(+)
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
index 9c697db..cc5adb9 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -797,6 +797,19 @@ long kvm_arch_vm_ioctl(struct file *filp,
return -EFAULT;
return kvm_vm_ioctl_set_device_addr(kvm, &dev_addr);
}
+ case KVM_ARM_PREFERRED_TARGET: {
+ int err;
+ struct kvm_vcpu_init init;
+
+ err = kvm_vcpu_preferred_target(&init);
+ if (err)
+ return err;
+
+ if (copy_to_user(argp, &init, sizeof(init)))
+ return -EFAULT;
+
+ return 0;
+ }
default:
return -EINVAL;
}
diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
index 99c2533..e32e776 100644
--- a/include/uapi/linux/kvm.h
+++ b/include/uapi/linux/kvm.h
@@ -1012,6 +1012,7 @@ struct kvm_s390_ucas_mapping {
/* VM is being stopped by host */
#define KVM_KVMCLOCK_CTRL _IO(KVMIO, 0xad)
#define KVM_ARM_VCPU_INIT _IOW(KVMIO, 0xae, struct kvm_vcpu_init)
+#define KVM_ARM_PREFERRED_TARGET _IOR(KVMIO, 0xaf, struct kvm_vcpu_init)
#define KVM_GET_REG_LIST _IOWR(KVMIO, 0xb0, struct kvm_reg_list)
#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v5 4/4] KVM: Add documentation for KVM_ARM_PREFERRED_TARGET ioctl
2013-09-30 8:50 [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
` (2 preceding siblings ...)
2013-09-30 8:50 ` [PATCH v5 3/4] ARM/ARM64: KVM: Implement KVM_ARM_PREFERRED_TARGET ioctl Anup Patel
@ 2013-09-30 8:50 ` Anup Patel
2013-10-02 16:04 ` [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Christoffer Dall
4 siblings, 0 replies; 8+ messages in thread
From: Anup Patel @ 2013-09-30 8:50 UTC (permalink / raw)
To: linux-arm-kernel
To implement CPU=Host we have added KVM_ARM_PREFERRED_TARGET
vm ioctl which provides information to user space required for
creating VCPU matching underlying Host.
This patch adds info related to this new KVM_ARM_PREFERRED_TARGET
vm ioctl in the KVM API documentation.
Signed-off-by: Anup Patel <anup.patel@linaro.org>
Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
---
Documentation/virtual/kvm/api.txt | 31 +++++++++++++++++++++++++++----
1 file changed, 27 insertions(+), 4 deletions(-)
diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
index 858aecf..076b849 100644
--- a/Documentation/virtual/kvm/api.txt
+++ b/Documentation/virtual/kvm/api.txt
@@ -2304,7 +2304,31 @@ Possible features:
Depends on KVM_CAP_ARM_EL1_32BIT (arm64 only).
-4.83 KVM_GET_REG_LIST
+4.83 KVM_ARM_PREFERRED_TARGET
+
+Capability: basic
+Architectures: arm, arm64
+Type: vm ioctl
+Parameters: struct struct kvm_vcpu_init (out)
+Returns: 0 on success; -1 on error
+Errors:
+ ?ENODEV: ???no preferred target available for the host
+
+This queries KVM for preferred CPU target type which can be emulated
+by KVM on underlying host.
+
+The ioctl returns struct kvm_vcpu_init instance containing information
+about preferred CPU target type and recommended features for it. The
+kvm_vcpu_init->features bitmap returned will have feature bits set if
+the preferred target recommends setting these features, but this is
+not mandatory.
+
+The information returned by this ioctl can be used to prepare an instance
+of struct kvm_vcpu_init for KVM_ARM_VCPU_INIT ioctl which will result in
+in VCPU matching underlying host.
+
+
+4.84 KVM_GET_REG_LIST
Capability: basic
Architectures: arm, arm64
@@ -2323,8 +2347,7 @@ struct kvm_reg_list {
This ioctl returns the guest registers that are supported for the
KVM_GET_ONE_REG/KVM_SET_ONE_REG calls.
-
-4.84 KVM_ARM_SET_DEVICE_ADDR
+4.85 KVM_ARM_SET_DEVICE_ADDR
Capability: KVM_CAP_ARM_SET_DEVICE_ADDR
Architectures: arm, arm64
@@ -2362,7 +2385,7 @@ must be called after calling KVM_CREATE_IRQCHIP, but before calling
KVM_RUN on any of the VCPUs. Calling this ioctl twice for any of the
base addresses will return -EEXIST.
-4.85 KVM_PPC_RTAS_DEFINE_TOKEN
+4.86 KVM_PPC_RTAS_DEFINE_TOKEN
Capability: KVM_CAP_PPC_RTAS
Architectures: ppc
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64
2013-09-30 8:50 [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
` (3 preceding siblings ...)
2013-09-30 8:50 ` [PATCH v5 4/4] KVM: Add documentation for " Anup Patel
@ 2013-10-02 16:04 ` Christoffer Dall
2013-10-02 16:17 ` Marc Zyngier
4 siblings, 1 reply; 8+ messages in thread
From: Christoffer Dall @ 2013-10-02 16:04 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Sep 30, 2013 at 02:20:04PM +0530, Anup Patel wrote:
> It will be very useful for user space (QEMU/KVMTOOL) if it has a
> method of querying VCPU target type matching to underlying Host.
> We can use such querying mechanism and implement machine models
> in user space where VCPU target type is always same-as/similar-to
> underlying Host (i.e. Target CPU=Host).
>
> This patch series implements KVM_ARM_PREFERRED_TARGET vm ioclt for
> querying VCPU target type matching underlying host. Using this new
> ioctl we can implement VCPU target CPU=Host in user space.
>
> Also, it is not mandatory to call KVM_ARM_PREFERRED_TARGET vm ioctl
> and the old method of trying all possible target types using the
> KVM_ARM_VCPU_INIT ioctl to initialize VCPU works fine.
>
Looks good to me, as soon as Marc acks this one, I'll merge it.
-Christoffer
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64
2013-10-02 16:04 ` [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Christoffer Dall
@ 2013-10-02 16:17 ` Marc Zyngier
2013-10-02 18:32 ` Christoffer Dall
0 siblings, 1 reply; 8+ messages in thread
From: Marc Zyngier @ 2013-10-02 16:17 UTC (permalink / raw)
To: linux-arm-kernel
On 02/10/13 17:04, Christoffer Dall wrote:
> On Mon, Sep 30, 2013 at 02:20:04PM +0530, Anup Patel wrote:
>> It will be very useful for user space (QEMU/KVMTOOL) if it has a
>> method of querying VCPU target type matching to underlying Host.
>> We can use such querying mechanism and implement machine models
>> in user space where VCPU target type is always same-as/similar-to
>> underlying Host (i.e. Target CPU=Host).
>>
>> This patch series implements KVM_ARM_PREFERRED_TARGET vm ioclt for
>> querying VCPU target type matching underlying host. Using this new
>> ioctl we can implement VCPU target CPU=Host in user space.
>>
>> Also, it is not mandatory to call KVM_ARM_PREFERRED_TARGET vm ioctl
>> and the old method of trying all possible target types using the
>> KVM_ARM_VCPU_INIT ioctl to initialize VCPU works fine.
>>
> Looks good to me, as soon as Marc acks this one, I'll merge it.
Yup, go for it:
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
M.
--
Jazz is not dead. It just smells funny...
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64
2013-10-02 16:17 ` Marc Zyngier
@ 2013-10-02 18:32 ` Christoffer Dall
0 siblings, 0 replies; 8+ messages in thread
From: Christoffer Dall @ 2013-10-02 18:32 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Oct 02, 2013 at 05:17:41PM +0100, Marc Zyngier wrote:
> On 02/10/13 17:04, Christoffer Dall wrote:
> > On Mon, Sep 30, 2013 at 02:20:04PM +0530, Anup Patel wrote:
> >> It will be very useful for user space (QEMU/KVMTOOL) if it has a
> >> method of querying VCPU target type matching to underlying Host.
> >> We can use such querying mechanism and implement machine models
> >> in user space where VCPU target type is always same-as/similar-to
> >> underlying Host (i.e. Target CPU=Host).
> >>
> >> This patch series implements KVM_ARM_PREFERRED_TARGET vm ioclt for
> >> querying VCPU target type matching underlying host. Using this new
> >> ioctl we can implement VCPU target CPU=Host in user space.
> >>
> >> Also, it is not mandatory to call KVM_ARM_PREFERRED_TARGET vm ioctl
> >> and the old method of trying all possible target types using the
> >> KVM_ARM_VCPU_INIT ioctl to initialize VCPU works fine.
> >>
> > Looks good to me, as soon as Marc acks this one, I'll merge it.
>
> Yup, go for it:
>
> Acked-by: Marc Zyngier <marc.zyngier@arm.com>
>
Cool, merged in kvm-arm-next, tested with changes to experimental qemu
mach-virt patches on vexpress TC2.
-Christoffer
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-10-02 18:32 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-30 8:50 [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
2013-09-30 8:50 ` [PATCH v5 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function Anup Patel
2013-09-30 8:50 ` [PATCH v5 2/4] ARM64: " Anup Patel
2013-09-30 8:50 ` [PATCH v5 3/4] ARM/ARM64: KVM: Implement KVM_ARM_PREFERRED_TARGET ioctl Anup Patel
2013-09-30 8:50 ` [PATCH v5 4/4] KVM: Add documentation for " Anup Patel
2013-10-02 16:04 ` [PATCH v5 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Christoffer Dall
2013-10-02 16:17 ` Marc Zyngier
2013-10-02 18:32 ` Christoffer Dall
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).