linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64
@ 2013-09-14 11:08 Anup Patel
  2013-09-14 11:08 ` [PATCH v2 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function Anup Patel
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Anup Patel @ 2013-09-14 11:08 UTC (permalink / raw)
  To: linux-arm-kernel

It will be very useful for user space 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 ioclt for querying
VCPU target type matching underlying host. Using this new ioctl we can
implement VCPU target CPU=Host in user space (i.e. QEMU/KVMTOOL).

Also, it is not mandatory to call KVM_ARM_PREFERRED_TARGET ioctl and the
old method of trying all possible target types using KVM_ARM_VCPU_INIT
ioctl to initialize VCPU works fine.

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 |   26 ++++++++++++++++++++++----
 arch/arm/include/asm/kvm_host.h   |    1 +
 arch/arm/kvm/arm.c                |   12 ++++++++++++
 arch/arm/kvm/guest.c              |   19 +++++++++++++++++++
 arch/arm64/include/asm/kvm_host.h |    1 +
 arch/arm64/kvm/guest.c            |   20 ++++++++++++++++++++
 include/uapi/linux/kvm.h          |    1 +
 7 files changed, 76 insertions(+), 4 deletions(-)

-- 
1.7.9.5

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function
  2013-09-14 11:08 [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
@ 2013-09-14 11:08 ` Anup Patel
  2013-09-17 21:05   ` Christoffer Dall
  2013-09-14 11:08 ` [PATCH v2 2/4] ARM64: " Anup Patel
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Anup Patel @ 2013-09-14 11:08 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/kvm/guest.c              |   19 +++++++++++++++++++
 arch/arm64/include/asm/kvm_host.h |    1 +
 2 files changed, 20 insertions(+)

diff --git a/arch/arm/kvm/guest.c b/arch/arm/kvm/guest.c
index 152d036..dae1e9f 100644
--- a/arch/arm/kvm/guest.c
+++ b/arch/arm/kvm/guest.c
@@ -222,6 +222,25 @@ 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 target;
+
+	memset(init, 0, sizeof(*init));
+
+	/* For now, we return all optional features are available
+	 * for preferred target. In future, we might have features
+	 * available based on underlying host.
+	 */
+	init->target = (__u32)target;
+	init->features[0] |= (1 << KVM_ARM_VCPU_POWER_OFF);
+
+	return 0;
+}
+
 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
 {
 	return -EINVAL;
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;
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 2/4] ARM64: KVM: Implement kvm_vcpu_preferred_target() function
  2013-09-14 11:08 [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
  2013-09-14 11:08 ` [PATCH v2 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function Anup Patel
@ 2013-09-14 11:08 ` Anup Patel
  2013-09-17 21:06   ` Christoffer Dall
  2013-09-14 11:08 ` [PATCH v2 3/4] ARM/ARM64: KVM: Implement KVM_ARM_PREFERRED_TARGET ioctl Anup Patel
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Anup Patel @ 2013-09-14 11:08 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/arm/include/asm/kvm_host.h |    1 +
 arch/arm64/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/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
index d7bf7d6..f8eb062 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 target;
+
+	memset(init, 0, sizeof(*init));
+
+	/* For now, we return all optional features are available
+	 * for preferred target. In future, we might have features
+	 * available based on underlying host.
+	 */
+	init->target = (__u32)target;
+	init->features[0] |= (1 << KVM_ARM_VCPU_POWER_OFF);
+	init->features[0] |= (1 << KVM_ARM_VCPU_EL1_32BIT);
+
+	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] 10+ messages in thread

* [PATCH v2 3/4] ARM/ARM64: KVM: Implement KVM_ARM_PREFERRED_TARGET ioctl
  2013-09-14 11:08 [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
  2013-09-14 11:08 ` [PATCH v2 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function Anup Patel
  2013-09-14 11:08 ` [PATCH v2 2/4] ARM64: " Anup Patel
@ 2013-09-14 11:08 ` Anup Patel
  2013-09-14 11:08 ` [PATCH v2 4/4] KVM: Add documentation for " Anup Patel
  2013-09-14 11:37 ` [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
  4 siblings, 0 replies; 10+ messages in thread
From: Anup Patel @ 2013-09-14 11:08 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 ioctl which
return struct kvm_vcpu_init instance to user space for KVM ARM
and KVM ARM64 containing information about preferred VCPU
target type and optional VCPU 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       |   12 ++++++++++++
 include/uapi/linux/kvm.h |    1 +
 2 files changed, 13 insertions(+)

diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
index 9c697db..192212c 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -713,7 +713,19 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
 			return -EFAULT;
 
 		return kvm_vcpu_set_target(vcpu, &init);
+	}
+	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;
 	}
 	case KVM_SET_ONE_REG:
 	case KVM_GET_ONE_REG: {
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] 10+ messages in thread

* [PATCH v2 4/4] KVM: Add documentation for KVM_ARM_PREFERRED_TARGET ioctl
  2013-09-14 11:08 [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
                   ` (2 preceding siblings ...)
  2013-09-14 11:08 ` [PATCH v2 3/4] ARM/ARM64: KVM: Implement KVM_ARM_PREFERRED_TARGET ioctl Anup Patel
@ 2013-09-14 11:08 ` Anup Patel
  2013-09-17 21:08   ` Christoffer Dall
  2013-09-14 11:37 ` [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
  4 siblings, 1 reply; 10+ messages in thread
From: Anup Patel @ 2013-09-14 11:08 UTC (permalink / raw)
  To: linux-arm-kernel

To implement CPU=Host we have added KVM_ARM_PREFERRED_TARGET
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
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 |   26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
index ef925ea..85f8026 100644
--- a/Documentation/virtual/kvm/api.txt
+++ b/Documentation/virtual/kvm/api.txt
@@ -2303,8 +2303,27 @@ Possible features:
 	- KVM_ARM_VCPU_EL1_32BIT: Starts the CPU in a 32bit mode.
 	  Depends on KVM_CAP_ARM_EL1_32BIT (arm64 only).
 
+4.83 KVM_ARM_PREFERRED_TARGET
 
-4.83 KVM_GET_REG_LIST
+Capability: basic
+Architectures: arm, arm64
+Type: vcpu ioctl
+Parameters: struct struct kvm_vcpu_init (out)
+Returns: 0 on success; -1 on error
+Errors:
+ ?EINVAL: ???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 optional features available for it. 
+
+The information returned by this ioctl can be used to prepare instance
+of struct kvm_vcpu_init for KVM_ARM_VCPU_INIT ioctl which will result 
+in VCPU matching underlying host.
+
+4.84 KVM_GET_REG_LIST
 
 Capability: basic
 Architectures: arm, arm64
@@ -2323,8 +2342,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 +2380,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] 10+ messages in thread

* [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64
  2013-09-14 11:08 [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
                   ` (3 preceding siblings ...)
  2013-09-14 11:08 ` [PATCH v2 4/4] KVM: Add documentation for " Anup Patel
@ 2013-09-14 11:37 ` Anup Patel
  2013-09-17 21:10   ` Christoffer Dall
  4 siblings, 1 reply; 10+ messages in thread
From: Anup Patel @ 2013-09-14 11:37 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Sep 14, 2013 at 4:38 PM, Anup Patel <anup.patel@linaro.org> wrote:
> It will be very useful for user space 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 ioclt for querying
> VCPU target type matching underlying host. Using this new ioctl we can
> implement VCPU target CPU=Host in user space (i.e. QEMU/KVMTOOL).
>
> Also, it is not mandatory to call KVM_ARM_PREFERRED_TARGET ioctl and the
> old method of trying all possible target types using KVM_ARM_VCPU_INIT
> ioctl to initialize VCPU works fine.
>
> 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 |   26 ++++++++++++++++++++++----
>  arch/arm/include/asm/kvm_host.h   |    1 +
>  arch/arm/kvm/arm.c                |   12 ++++++++++++
>  arch/arm/kvm/guest.c              |   19 +++++++++++++++++++
>  arch/arm64/include/asm/kvm_host.h |    1 +
>  arch/arm64/kvm/guest.c            |   20 ++++++++++++++++++++
>  include/uapi/linux/kvm.h          |    1 +
>  7 files changed, 76 insertions(+), 4 deletions(-)
>
> --
> 1.7.9.5
>
> _______________________________________________
> kvmarm mailing list
> kvmarm at lists.cs.columbia.edu
> https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm

Hi Christoffer,

I forgot to address two of your comments in this patch-series:
1. Make the IOCTL as VM IOCTL
2. Return ENODEV instead of EINVAL from IOCTL.

I will take care of the above in v3.

Regards,
Anup

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function
  2013-09-14 11:08 ` [PATCH v2 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function Anup Patel
@ 2013-09-17 21:05   ` Christoffer Dall
  0 siblings, 0 replies; 10+ messages in thread
From: Christoffer Dall @ 2013-09-17 21:05 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Sep 14, 2013 at 04:38:34PM +0530, Anup Patel wrote:
> 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/kvm/guest.c              |   19 +++++++++++++++++++
>  arch/arm64/include/asm/kvm_host.h |    1 +
>  2 files changed, 20 insertions(+)
> 
> diff --git a/arch/arm/kvm/guest.c b/arch/arm/kvm/guest.c
> index 152d036..dae1e9f 100644
> --- a/arch/arm/kvm/guest.c
> +++ b/arch/arm/kvm/guest.c
> @@ -222,6 +222,25 @@ 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 target;
> +
> +	memset(init, 0, sizeof(*init));
> +
> +	/* For now, we return all optional features are available

kernel coding style requires wings for comments

> +	 * for preferred target. In future, we might have features
> +	 * available based on underlying host.
> +	 */
> +	init->target = (__u32)target;
> +	init->features[0] |= (1 << KVM_ARM_VCPU_POWER_OFF);
> +
> +	return 0;
> +}
> +
>  int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
>  {
>  	return -EINVAL;
> 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;
> -- 
> 1.7.9.5
> 

-- 
Christoffer

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 2/4] ARM64: KVM: Implement kvm_vcpu_preferred_target() function
  2013-09-14 11:08 ` [PATCH v2 2/4] ARM64: " Anup Patel
@ 2013-09-17 21:06   ` Christoffer Dall
  0 siblings, 0 replies; 10+ messages in thread
From: Christoffer Dall @ 2013-09-17 21:06 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Sep 14, 2013 at 04:38:35PM +0530, Anup Patel wrote:
> 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/arm/include/asm/kvm_host.h |    1 +
>  arch/arm64/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/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
> index d7bf7d6..f8eb062 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 target;
> +
> +	memset(init, 0, sizeof(*init));
> +
> +	/* For now, we return all optional features are available
> +	 * for preferred target. In future, we might have features
> +	 * available based on underlying host.
> +	 */

same here, with comment formatting

> +	init->target = (__u32)target;
> +	init->features[0] |= (1 << KVM_ARM_VCPU_POWER_OFF);
> +	init->features[0] |= (1 << KVM_ARM_VCPU_EL1_32BIT);
> +
> +	return 0;
> +}
> +
>  int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
>  {
>  	return -EINVAL;
> -- 
> 1.7.9.5
> 

-- 
Christoffer

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 4/4] KVM: Add documentation for KVM_ARM_PREFERRED_TARGET ioctl
  2013-09-14 11:08 ` [PATCH v2 4/4] KVM: Add documentation for " Anup Patel
@ 2013-09-17 21:08   ` Christoffer Dall
  0 siblings, 0 replies; 10+ messages in thread
From: Christoffer Dall @ 2013-09-17 21:08 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Sep 14, 2013 at 04:38:37PM +0530, Anup Patel wrote:
> To implement CPU=Host we have added KVM_ARM_PREFERRED_TARGET
> 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
> 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 |   26 ++++++++++++++++++++++----
>  1 file changed, 22 insertions(+), 4 deletions(-)
> 
> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
> index ef925ea..85f8026 100644
> --- a/Documentation/virtual/kvm/api.txt
> +++ b/Documentation/virtual/kvm/api.txt
> @@ -2303,8 +2303,27 @@ Possible features:
>  	- KVM_ARM_VCPU_EL1_32BIT: Starts the CPU in a 32bit mode.
>  	  Depends on KVM_CAP_ARM_EL1_32BIT (arm64 only).
>  
> +4.83 KVM_ARM_PREFERRED_TARGET
>  
> -4.83 KVM_GET_REG_LIST
> +Capability: basic
> +Architectures: arm, arm64
> +Type: vcpu ioctl
> +Parameters: struct struct kvm_vcpu_init (out)
> +Returns: 0 on success; -1 on error
> +Errors:
> + ?EINVAL: ???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 optional features available for it. 
> +
> +The information returned by this ioctl can be used to prepare instance
> +of struct kvm_vcpu_init for KVM_ARM_VCPU_INIT ioctl which will result 
> +in VCPU matching underlying host.

nit: you have some trailing white space here

> +
> +4.84 KVM_GET_REG_LIST
>  
>  Capability: basic
>  Architectures: arm, arm64
> @@ -2323,8 +2342,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 +2380,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
> 

-- 
Christoffer

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64
  2013-09-14 11:37 ` [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
@ 2013-09-17 21:10   ` Christoffer Dall
  0 siblings, 0 replies; 10+ messages in thread
From: Christoffer Dall @ 2013-09-17 21:10 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Sep 14, 2013 at 05:07:17PM +0530, Anup Patel wrote:
> On Sat, Sep 14, 2013 at 4:38 PM, Anup Patel <anup.patel@linaro.org> wrote:
> > It will be very useful for user space 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 ioclt for querying
> > VCPU target type matching underlying host. Using this new ioctl we can
> > implement VCPU target CPU=Host in user space (i.e. QEMU/KVMTOOL).
> >
> > Also, it is not mandatory to call KVM_ARM_PREFERRED_TARGET ioctl and the
> > old method of trying all possible target types using KVM_ARM_VCPU_INIT
> > ioctl to initialize VCPU works fine.
> >
> > 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 |   26 ++++++++++++++++++++++----
> >  arch/arm/include/asm/kvm_host.h   |    1 +
> >  arch/arm/kvm/arm.c                |   12 ++++++++++++
> >  arch/arm/kvm/guest.c              |   19 +++++++++++++++++++
> >  arch/arm64/include/asm/kvm_host.h |    1 +
> >  arch/arm64/kvm/guest.c            |   20 ++++++++++++++++++++
> >  include/uapi/linux/kvm.h          |    1 +
> >  7 files changed, 76 insertions(+), 4 deletions(-)
> >
> > --
> > 1.7.9.5
> >
> > _______________________________________________
> > kvmarm mailing list
> > kvmarm at lists.cs.columbia.edu
> > https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm
> 
> Hi Christoffer,
> 
> I forgot to address two of your comments in this patch-series:
> 1. Make the IOCTL as VM IOCTL
> 2. Return ENODEV instead of EINVAL from IOCTL.
> 
> I will take care of the above in v3.
> 
No worries, sorry for the delay in reviewing.

I'm wondering if we should actually make the ioctl a system ioctl
instead of a kvm ioctl so user space can just query the system about the
preferred target without having to create any KVM data structures.
Unless there's some problem with creating new system ioctls.  Anyone?

Assuming you take care of the above then this looks good!

Thanks,
-Christoffer

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2013-09-17 21:10 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-14 11:08 [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
2013-09-14 11:08 ` [PATCH v2 1/4] ARM: KVM: Implement kvm_vcpu_preferred_target() function Anup Patel
2013-09-17 21:05   ` Christoffer Dall
2013-09-14 11:08 ` [PATCH v2 2/4] ARM64: " Anup Patel
2013-09-17 21:06   ` Christoffer Dall
2013-09-14 11:08 ` [PATCH v2 3/4] ARM/ARM64: KVM: Implement KVM_ARM_PREFERRED_TARGET ioctl Anup Patel
2013-09-14 11:08 ` [PATCH v2 4/4] KVM: Add documentation for " Anup Patel
2013-09-17 21:08   ` Christoffer Dall
2013-09-14 11:37 ` [PATCH v2 0/4] Target CPU=Host implementation for KVM ARM/ARM64 Anup Patel
2013-09-17 21:10   ` 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).