kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates
@ 2014-10-01 10:34 Anup Patel
  2014-10-01 10:34 ` [PATCH v5 1/4] kvmtool: ARM: Use KVM_ARM_PREFERRED_TARGET vm ioctl to determine target cpu Anup Patel
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Anup Patel @ 2014-10-01 10:34 UTC (permalink / raw)
  To: kvmarm
  Cc: kvm, patches, will.deacon, marc.zyngier, penberg,
	christoffer.dall, pranavkumar, andre.przywara, Anup Patel

This patchset updates KVMTOOL to use some of the features
supported by Linux-3.16 KVM ARM/ARM64, such as:

1. Target CPU == Host using KVM_ARM_PREFERRED_TARGET vm ioctl
2. Target CPU type Potenza for using KVMTOOL on X-Gene
3. PSCI v0.2 support for Aarch32 and Aarch64 guest
4. System event exit reason

Changes since v4:
- Avoid using magic '0' target for kvm arm generic target
- Added comment for why we need Potenza target in KVMTOOL

Changes since v3:
- Add generic targets for aarch32 and aarch64 which are used
  by KVMTOOL when target type returned by KVM_ARM_PREFERRED_TARGET
  vm ioctl is not known to KVMTOOL
- Print more info when handling system reset event

Changes since v2:
- Use target type returned by KVM_ARM_PREFERRED_TARGET vm ioctl
  for VCPU init such that we don't need to update KVMTOOL for
  every new host hardware
- Simplify DTB generation for PSCI node

Changes since v1:
- Drop the patch to fix compile error for aarch64
- Fallback to old method of trying all target types if
KVM_ARM_PREFERRED_TARGET vm ioctl fails
- Print more info when handling KVM_EXIT_SYSTEM_EVENT

Anup Patel (4):
  kvmtool: ARM: Use KVM_ARM_PREFERRED_TARGET vm ioctl to determine
    target cpu
  kvmtool: ARM64: Add target type potenza for aarch64
  kvmtool: Handle exit reason KVM_EXIT_SYSTEM_EVENT
  kvmtool: ARM/ARM64: Provide PSCI-0.2 to guest when KVM supports it

 tools/kvm/arm/aarch32/arm-cpu.c                 |    8 +++
 tools/kvm/arm/aarch64/arm-cpu.c                 |   23 ++++++++-
 tools/kvm/arm/fdt.c                             |   51 +++++++++++++++++--
 tools/kvm/arm/include/arm-common/kvm-cpu-arch.h |    2 +
 tools/kvm/arm/kvm-cpu.c                         |   61 +++++++++++++++++++----
 tools/kvm/kvm-cpu.c                             |   21 ++++++++
 6 files changed, 149 insertions(+), 17 deletions(-)

-- 
1.7.9.5


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

* [PATCH v5 1/4] kvmtool: ARM: Use KVM_ARM_PREFERRED_TARGET vm ioctl to determine target cpu
  2014-10-01 10:34 [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates Anup Patel
@ 2014-10-01 10:34 ` Anup Patel
  2014-10-01 10:34 ` [PATCH v5 2/4] kvmtool: ARM64: Add target type potenza for aarch64 Anup Patel
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Anup Patel @ 2014-10-01 10:34 UTC (permalink / raw)
  To: kvmarm
  Cc: kvm, patches, will.deacon, marc.zyngier, penberg,
	christoffer.dall, pranavkumar, andre.przywara, Anup Patel

Instead, of trying out each and every target type we should
use KVM_ARM_PREFERRED_TARGET vm ioctl to determine target type
for KVM ARM/ARM64.

If KVM_ARM_PREFERRED_TARGET vm ioctl fails then we fallback to
old method of trying all known target types.

If KVM_ARM_PREFERRED_TARGET vm ioctl succeeds but the returned
target type is not known to KVMTOOL then we forcefully init
VCPU with target type returned by KVM_ARM_PREFERRED_TARGET vm ioctl.

Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
Signed-off-by: Anup Patel <anup.patel@linaro.org>
---
 tools/kvm/arm/aarch32/arm-cpu.c                 |    8 ++++
 tools/kvm/arm/aarch64/arm-cpu.c                 |    9 +++-
 tools/kvm/arm/include/arm-common/kvm-cpu-arch.h |    2 +
 tools/kvm/arm/kvm-cpu.c                         |   56 +++++++++++++++++++----
 4 files changed, 64 insertions(+), 11 deletions(-)

diff --git a/tools/kvm/arm/aarch32/arm-cpu.c b/tools/kvm/arm/aarch32/arm-cpu.c
index 71b98fe..946e443 100644
--- a/tools/kvm/arm/aarch32/arm-cpu.c
+++ b/tools/kvm/arm/aarch32/arm-cpu.c
@@ -22,6 +22,12 @@ static int arm_cpu__vcpu_init(struct kvm_cpu *vcpu)
 	return 0;
 }
 
+static struct kvm_arm_target target_generic_v7 = {
+	.id		= UINT_MAX,
+	.compatible	= "arm,arm-v7",
+	.init		= arm_cpu__vcpu_init,
+};
+
 static struct kvm_arm_target target_cortex_a15 = {
 	.id		= KVM_ARM_TARGET_CORTEX_A15,
 	.compatible	= "arm,cortex-a15",
@@ -36,6 +42,8 @@ static struct kvm_arm_target target_cortex_a7 = {
 
 static int arm_cpu__core_init(struct kvm *kvm)
 {
+	kvm_cpu__set_kvm_arm_generic_target(&target_generic_v7);
+
 	return (kvm_cpu__register_kvm_arm_target(&target_cortex_a15) ||
 		kvm_cpu__register_kvm_arm_target(&target_cortex_a7));
 }
diff --git a/tools/kvm/arm/aarch64/arm-cpu.c b/tools/kvm/arm/aarch64/arm-cpu.c
index ce5ea2f..88970de 100644
--- a/tools/kvm/arm/aarch64/arm-cpu.c
+++ b/tools/kvm/arm/aarch64/arm-cpu.c
@@ -16,13 +16,18 @@ static void generate_fdt_nodes(void *fdt, struct kvm *kvm, u32 gic_phandle)
 	timer__generate_fdt_nodes(fdt, kvm, timer_interrupts);
 }
 
-
 static int arm_cpu__vcpu_init(struct kvm_cpu *vcpu)
 {
 	vcpu->generate_fdt_nodes = generate_fdt_nodes;
 	return 0;
 }
 
+static struct kvm_arm_target target_generic_v8 = {
+	.id		= UINT_MAX,
+	.compatible	= "arm,arm-v8",
+	.init		= arm_cpu__vcpu_init,
+};
+
 static struct kvm_arm_target target_aem_v8 = {
 	.id		= KVM_ARM_TARGET_AEM_V8,
 	.compatible	= "arm,arm-v8",
@@ -43,6 +48,8 @@ static struct kvm_arm_target target_cortex_a57 = {
 
 static int arm_cpu__core_init(struct kvm *kvm)
 {
+	kvm_cpu__set_kvm_arm_generic_target(&target_generic_v8);
+
 	return (kvm_cpu__register_kvm_arm_target(&target_aem_v8) ||
 		kvm_cpu__register_kvm_arm_target(&target_foundation_v8) ||
 		kvm_cpu__register_kvm_arm_target(&target_cortex_a57));
diff --git a/tools/kvm/arm/include/arm-common/kvm-cpu-arch.h b/tools/kvm/arm/include/arm-common/kvm-cpu-arch.h
index 83cd8b8..36c7872 100644
--- a/tools/kvm/arm/include/arm-common/kvm-cpu-arch.h
+++ b/tools/kvm/arm/include/arm-common/kvm-cpu-arch.h
@@ -34,6 +34,8 @@ struct kvm_arm_target {
 	int		(*init)(struct kvm_cpu *vcpu);
 };
 
+void kvm_cpu__set_kvm_arm_generic_target(struct kvm_arm_target *target);
+
 int kvm_cpu__register_kvm_arm_target(struct kvm_arm_target *target);
 
 static inline bool kvm_cpu__emulate_io(struct kvm_cpu *vcpu, u16 port, void *data,
diff --git a/tools/kvm/arm/kvm-cpu.c b/tools/kvm/arm/kvm-cpu.c
index aeaa4cf..f165373 100644
--- a/tools/kvm/arm/kvm-cpu.c
+++ b/tools/kvm/arm/kvm-cpu.c
@@ -13,7 +13,14 @@ int kvm_cpu__get_debug_fd(void)
 	return debug_fd;
 }
 
+static struct kvm_arm_target *kvm_arm_generic_target;
 static struct kvm_arm_target *kvm_arm_targets[KVM_ARM_NUM_TARGETS];
+
+void kvm_cpu__set_kvm_arm_generic_target(struct kvm_arm_target *target)
+{
+	kvm_arm_generic_target = target;
+}
+
 int kvm_cpu__register_kvm_arm_target(struct kvm_arm_target *target)
 {
 	unsigned int i = 0;
@@ -34,6 +41,7 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
 	struct kvm_cpu *vcpu;
 	int coalesced_offset, mmap_size, err = -1;
 	unsigned int i;
+	struct kvm_vcpu_init preferred_init;
 	struct kvm_vcpu_init vcpu_init = {
 		.features = ARM_VCPU_FEATURE_FLAGS(kvm, cpu_id)
 	};
@@ -55,19 +63,46 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
 	if (vcpu->kvm_run == MAP_FAILED)
 		die("unable to mmap vcpu fd");
 
-	/* Find an appropriate target CPU type. */
-	for (i = 0; i < ARRAY_SIZE(kvm_arm_targets); ++i) {
-		if (!kvm_arm_targets[i])
-			continue;
-		target = kvm_arm_targets[i];
-		vcpu_init.target = target->id;
+	/*
+	 * If the preferred target ioctl is successful then
+	 * use preferred target else try each and every target type
+	 */
+	err = ioctl(kvm->vm_fd, KVM_ARM_PREFERRED_TARGET, &preferred_init);
+	if (!err) {
+		/* Match preferred target CPU type. */
+		target = NULL;
+		for (i = 0; i < ARRAY_SIZE(kvm_arm_targets); ++i) {
+			if (!kvm_arm_targets[i])
+				continue;
+			if (kvm_arm_targets[i]->id == preferred_init.target) {
+				target = kvm_arm_targets[i];
+				break;
+			}
+		}
+		if (!target) {
+			target = kvm_arm_generic_target;
+			vcpu_init.target = preferred_init.target;
+		} else {
+			vcpu_init.target = target->id;
+		}
 		err = ioctl(vcpu->vcpu_fd, KVM_ARM_VCPU_INIT, &vcpu_init);
-		if (!err)
-			break;
+	} else {
+		/* Find an appropriate target CPU type. */
+		for (i = 0; i < ARRAY_SIZE(kvm_arm_targets); ++i) {
+			if (!kvm_arm_targets[i])
+				continue;
+			target = kvm_arm_targets[i];
+			vcpu_init.target = target->id;
+			err = ioctl(vcpu->vcpu_fd, KVM_ARM_VCPU_INIT, &vcpu_init);
+			if (!err)
+				break;
+		}
+		if (err)
+			die("Unable to find matching target");
 	}
 
 	if (err || target->init(vcpu))
-		die("Unable to initialise ARM vcpu");
+		die("Unable to initialise vcpu");
 
 	coalesced_offset = ioctl(kvm->sys_fd, KVM_CHECK_EXTENSION,
 				 KVM_CAP_COALESCED_MMIO);
@@ -78,9 +113,10 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
 	/* Populate the vcpu structure. */
 	vcpu->kvm		= kvm;
 	vcpu->cpu_id		= cpu_id;
-	vcpu->cpu_type		= target->id;
+	vcpu->cpu_type		= vcpu_init.target;
 	vcpu->cpu_compatible	= target->compatible;
 	vcpu->is_running	= true;
+
 	return vcpu;
 }
 
-- 
1.7.9.5


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

* [PATCH v5 2/4] kvmtool: ARM64: Add target type potenza for aarch64
  2014-10-01 10:34 [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates Anup Patel
  2014-10-01 10:34 ` [PATCH v5 1/4] kvmtool: ARM: Use KVM_ARM_PREFERRED_TARGET vm ioctl to determine target cpu Anup Patel
@ 2014-10-01 10:34 ` Anup Patel
  2014-10-01 10:34 ` [PATCH v5 3/4] kvmtool: Handle exit reason KVM_EXIT_SYSTEM_EVENT Anup Patel
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Anup Patel @ 2014-10-01 10:34 UTC (permalink / raw)
  To: kvmarm
  Cc: kvm, patches, will.deacon, marc.zyngier, penberg,
	christoffer.dall, pranavkumar, andre.przywara, Anup Patel

The VCPU target type KVM_ARM_TARGET_XGENE_POTENZA is available
in latest Linux-3.16-rcX or higher hence register aarch64 target
type for it.

This patch enables us to run KVMTOOL on X-Gene Potenza host.

Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
Signed-off-by: Anup Patel <anup.patel@linaro.org>
---
 tools/kvm/arm/aarch64/arm-cpu.c |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/tools/kvm/arm/aarch64/arm-cpu.c b/tools/kvm/arm/aarch64/arm-cpu.c
index 88970de..e237cf9 100644
--- a/tools/kvm/arm/aarch64/arm-cpu.c
+++ b/tools/kvm/arm/aarch64/arm-cpu.c
@@ -46,12 +46,24 @@ static struct kvm_arm_target target_cortex_a57 = {
 	.init		= arm_cpu__vcpu_init,
 };
 
+/*
+ * We really don't require to register target for every
+ * new CPU. The target for Potenza CPU is only registered
+ * to enable use of KVMTOOL with older host kernels.
+ */
+static struct kvm_arm_target target_potenza = {
+	.id		= KVM_ARM_TARGET_XGENE_POTENZA,
+	.compatible	= "arm,arm-v8",
+	.init		= arm_cpu__vcpu_init,
+};
+
 static int arm_cpu__core_init(struct kvm *kvm)
 {
 	kvm_cpu__set_kvm_arm_generic_target(&target_generic_v8);
 
 	return (kvm_cpu__register_kvm_arm_target(&target_aem_v8) ||
 		kvm_cpu__register_kvm_arm_target(&target_foundation_v8) ||
-		kvm_cpu__register_kvm_arm_target(&target_cortex_a57));
+		kvm_cpu__register_kvm_arm_target(&target_cortex_a57) ||
+		kvm_cpu__register_kvm_arm_target(&target_potenza));
 }
 core_init(arm_cpu__core_init);
-- 
1.7.9.5


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

* [PATCH v5 3/4] kvmtool: Handle exit reason KVM_EXIT_SYSTEM_EVENT
  2014-10-01 10:34 [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates Anup Patel
  2014-10-01 10:34 ` [PATCH v5 1/4] kvmtool: ARM: Use KVM_ARM_PREFERRED_TARGET vm ioctl to determine target cpu Anup Patel
  2014-10-01 10:34 ` [PATCH v5 2/4] kvmtool: ARM64: Add target type potenza for aarch64 Anup Patel
@ 2014-10-01 10:34 ` Anup Patel
  2014-10-03 16:16   ` Will Deacon
  2014-10-01 10:34 ` [PATCH v5 4/4] kvmtool: ARM/ARM64: Provide PSCI-0.2 to guest when KVM supports it Anup Patel
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 9+ messages in thread
From: Anup Patel @ 2014-10-01 10:34 UTC (permalink / raw)
  To: kvmarm
  Cc: kvm, patches, will.deacon, marc.zyngier, penberg,
	christoffer.dall, pranavkumar, andre.przywara, Anup Patel

The KVM_EXIT_SYSTEM_EVENT exit reason was added to define
architecture independent system-wide events for a Guest.

Currently, it is used by in-kernel PSCI-0.2 emulation of
KVM ARM/ARM64 to inform user space about PSCI SYSTEM_OFF
or PSCI SYSTEM_RESET request.

For now, we simply treat all system-wide guest events as
shutdown request in KVMTOOL.

Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
Signed-off-by: Anup Patel <anup.patel@linaro.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
---
 tools/kvm/kvm-cpu.c |   21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/tools/kvm/kvm-cpu.c b/tools/kvm/kvm-cpu.c
index ee0a8ec..5180039 100644
--- a/tools/kvm/kvm-cpu.c
+++ b/tools/kvm/kvm-cpu.c
@@ -160,6 +160,27 @@ int kvm_cpu__start(struct kvm_cpu *cpu)
 			goto exit_kvm;
 		case KVM_EXIT_SHUTDOWN:
 			goto exit_kvm;
+		case KVM_EXIT_SYSTEM_EVENT:
+			/*
+			 * Print the type of system event and
+			 * treat all system events as shutdown request.
+			 */
+			switch (cpu->kvm_run->system_event.type) {
+			case KVM_SYSTEM_EVENT_SHUTDOWN:
+				printf("  # Info: shutdown system event\n");
+				goto exit_kvm;
+			case KVM_SYSTEM_EVENT_RESET:
+				printf("  # Info: reset system event\n");
+				printf("  # Info: KVMTOOL does not support VM reset\n");
+				printf("  # Info: please re-launch the VM manually\n");
+				goto exit_kvm;
+			default:
+				printf("  # Warning: unknown system event type=%d\n",
+				       cpu->kvm_run->system_event.type);
+				printf("  # Info: exiting KVMTOOL\n");
+				goto exit_kvm;
+			};
+			break;
 		default: {
 			bool ret;
 
-- 
1.7.9.5


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

* [PATCH v5 4/4] kvmtool: ARM/ARM64: Provide PSCI-0.2 to guest when KVM supports it
  2014-10-01 10:34 [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates Anup Patel
                   ` (2 preceding siblings ...)
  2014-10-01 10:34 ` [PATCH v5 3/4] kvmtool: Handle exit reason KVM_EXIT_SYSTEM_EVENT Anup Patel
@ 2014-10-01 10:34 ` Anup Patel
  2014-10-01 12:58 ` [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates Andre Przywara
  2014-10-03 16:17 ` Will Deacon
  5 siblings, 0 replies; 9+ messages in thread
From: Anup Patel @ 2014-10-01 10:34 UTC (permalink / raw)
  To: kvmarm
  Cc: kvm, patches, will.deacon, marc.zyngier, penberg,
	christoffer.dall, pranavkumar, andre.przywara, Anup Patel

If in-kernel KVM support PSCI-0.2 emulation then we should set
KVM_ARM_VCPU_PSCI_0_2 feature for each guest VCPU and also
provide "arm,psci-0.2","arm,psci" as PSCI compatible string.

This patch updates kvm_cpu__arch_init() and setup_fdt() as
per above.

Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
Signed-off-by: Anup Patel <anup.patel@linaro.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
---
 tools/kvm/arm/fdt.c     |   51 ++++++++++++++++++++++++++++++++++++++++++-----
 tools/kvm/arm/kvm-cpu.c |    5 +++++
 2 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/tools/kvm/arm/fdt.c b/tools/kvm/arm/fdt.c
index 186a718..5626931 100644
--- a/tools/kvm/arm/fdt.c
+++ b/tools/kvm/arm/fdt.c
@@ -13,6 +13,7 @@
 #include <linux/byteorder.h>
 #include <linux/kernel.h>
 #include <linux/sizes.h>
+#include <linux/psci.h>
 
 static char kern_cmdline[COMMAND_LINE_SIZE];
 
@@ -84,6 +85,34 @@ static void generate_irq_prop(void *fdt, u8 irq)
 	_FDT(fdt_property(fdt, "interrupts", irq_prop, sizeof(irq_prop)));
 }
 
+struct psci_fns {
+	u32 cpu_suspend;
+	u32 cpu_off;
+	u32 cpu_on;
+	u32 migrate;
+};
+
+static struct psci_fns psci_0_1_fns = {
+	.cpu_suspend = KVM_PSCI_FN_CPU_SUSPEND,
+	.cpu_off = KVM_PSCI_FN_CPU_OFF,
+	.cpu_on = KVM_PSCI_FN_CPU_ON,
+	.migrate = KVM_PSCI_FN_MIGRATE,
+};
+
+static struct psci_fns psci_0_2_aarch32_fns = {
+	.cpu_suspend = PSCI_0_2_FN_CPU_SUSPEND,
+	.cpu_off = PSCI_0_2_FN_CPU_OFF,
+	.cpu_on = PSCI_0_2_FN_CPU_ON,
+	.migrate = PSCI_0_2_FN_MIGRATE,
+};
+
+static struct psci_fns psci_0_2_aarch64_fns = {
+	.cpu_suspend = PSCI_0_2_FN64_CPU_SUSPEND,
+	.cpu_off = PSCI_0_2_FN_CPU_OFF,
+	.cpu_on = PSCI_0_2_FN64_CPU_ON,
+	.migrate = PSCI_0_2_FN64_MIGRATE,
+};
+
 static int setup_fdt(struct kvm *kvm)
 {
 	struct device_header *dev_hdr;
@@ -93,6 +122,7 @@ static int setup_fdt(struct kvm *kvm)
 		cpu_to_fdt64(kvm->arch.memory_guest_start),
 		cpu_to_fdt64(kvm->ram_size),
 	};
+	struct psci_fns *fns;
 	void *fdt		= staging_fdt;
 	void *fdt_dest		= guest_flat_to_host(kvm,
 						     kvm->arch.dtb_guest_start);
@@ -162,12 +192,23 @@ static int setup_fdt(struct kvm *kvm)
 
 	/* PSCI firmware */
 	_FDT(fdt_begin_node(fdt, "psci"));
-	_FDT(fdt_property_string(fdt, "compatible", "arm,psci"));
+	if (kvm__supports_extension(kvm, KVM_CAP_ARM_PSCI_0_2)) {
+		const char compatible[] = "arm,psci-0.2\0arm,psci";
+		_FDT(fdt_property(fdt, "compatible",
+				  compatible, sizeof(compatible)));
+		if (kvm->cfg.arch.aarch32_guest)
+			fns = &psci_0_2_aarch32_fns;
+		else
+			fns = &psci_0_2_aarch64_fns;
+	} else {
+		_FDT(fdt_property_string(fdt, "compatible", "arm,psci"));
+		fns = &psci_0_1_fns;
+	}
 	_FDT(fdt_property_string(fdt, "method", "hvc"));
-	_FDT(fdt_property_cell(fdt, "cpu_suspend", KVM_PSCI_FN_CPU_SUSPEND));
-	_FDT(fdt_property_cell(fdt, "cpu_off", KVM_PSCI_FN_CPU_OFF));
-	_FDT(fdt_property_cell(fdt, "cpu_on", KVM_PSCI_FN_CPU_ON));
-	_FDT(fdt_property_cell(fdt, "migrate", KVM_PSCI_FN_MIGRATE));
+	_FDT(fdt_property_cell(fdt, "cpu_suspend", fns->cpu_suspend));
+	_FDT(fdt_property_cell(fdt, "cpu_off", fns->cpu_off));
+	_FDT(fdt_property_cell(fdt, "cpu_on", fns->cpu_on));
+	_FDT(fdt_property_cell(fdt, "migrate", fns->migrate));
 	_FDT(fdt_end_node(fdt));
 
 	/* Finalise. */
diff --git a/tools/kvm/arm/kvm-cpu.c b/tools/kvm/arm/kvm-cpu.c
index f165373..ab08815 100644
--- a/tools/kvm/arm/kvm-cpu.c
+++ b/tools/kvm/arm/kvm-cpu.c
@@ -63,6 +63,11 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
 	if (vcpu->kvm_run == MAP_FAILED)
 		die("unable to mmap vcpu fd");
 
+	/* Set KVM_ARM_VCPU_PSCI_0_2 if available */
+	if (kvm__supports_extension(kvm, KVM_CAP_ARM_PSCI_0_2)) {
+		vcpu_init.features[0] |= (1UL << KVM_ARM_VCPU_PSCI_0_2);
+	}
+
 	/*
 	 * If the preferred target ioctl is successful then
 	 * use preferred target else try each and every target type
-- 
1.7.9.5


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

* Re: [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates
  2014-10-01 10:34 [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates Anup Patel
                   ` (3 preceding siblings ...)
  2014-10-01 10:34 ` [PATCH v5 4/4] kvmtool: ARM/ARM64: Provide PSCI-0.2 to guest when KVM supports it Anup Patel
@ 2014-10-01 12:58 ` Andre Przywara
  2014-10-03 16:17 ` Will Deacon
  5 siblings, 0 replies; 9+ messages in thread
From: Andre Przywara @ 2014-10-01 12:58 UTC (permalink / raw)
  To: Anup Patel, Will Deacon, penberg@kernel.org
  Cc: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
	patches@apm.com, Marc Zyngier, christoffer.dall@linaro.org,
	pranavkumar@linaro.org

Hi Anup,

On 01/10/14 11:34, Anup Patel wrote:
> This patchset updates KVMTOOL to use some of the features
> supported by Linux-3.16 KVM ARM/ARM64, such as:
> 
> 1. Target CPU == Host using KVM_ARM_PREFERRED_TARGET vm ioctl
> 2. Target CPU type Potenza for using KVMTOOL on X-Gene
> 3. PSCI v0.2 support for Aarch32 and Aarch64 guest
> 4. System event exit reason

Thanks for the quick respin. Looks fine now for me.


For the whole v5 series:

Reviewed-by: Andre Przywara <andre.przywara@arm.com>

Cheers,
Andre.

> Changes since v4:
> - Avoid using magic '0' target for kvm arm generic target
> - Added comment for why we need Potenza target in KVMTOOL
> 
> Changes since v3:
> - Add generic targets for aarch32 and aarch64 which are used
>   by KVMTOOL when target type returned by KVM_ARM_PREFERRED_TARGET
>   vm ioctl is not known to KVMTOOL
> - Print more info when handling system reset event
> 
> Changes since v2:
> - Use target type returned by KVM_ARM_PREFERRED_TARGET vm ioctl
>   for VCPU init such that we don't need to update KVMTOOL for
>   every new host hardware
> - Simplify DTB generation for PSCI node
> 
> Changes since v1:
> - Drop the patch to fix compile error for aarch64
> - Fallback to old method of trying all target types if
> KVM_ARM_PREFERRED_TARGET vm ioctl fails
> - Print more info when handling KVM_EXIT_SYSTEM_EVENT
> 
> Anup Patel (4):
>   kvmtool: ARM: Use KVM_ARM_PREFERRED_TARGET vm ioctl to determine
>     target cpu
>   kvmtool: ARM64: Add target type potenza for aarch64
>   kvmtool: Handle exit reason KVM_EXIT_SYSTEM_EVENT
>   kvmtool: ARM/ARM64: Provide PSCI-0.2 to guest when KVM supports it
> 
>  tools/kvm/arm/aarch32/arm-cpu.c                 |    8 +++
>  tools/kvm/arm/aarch64/arm-cpu.c                 |   23 ++++++++-
>  tools/kvm/arm/fdt.c                             |   51 +++++++++++++++++--
>  tools/kvm/arm/include/arm-common/kvm-cpu-arch.h |    2 +
>  tools/kvm/arm/kvm-cpu.c                         |   61 +++++++++++++++++++----
>  tools/kvm/kvm-cpu.c                             |   21 ++++++++
>  6 files changed, 149 insertions(+), 17 deletions(-)
> 

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

* Re: [PATCH v5 3/4] kvmtool: Handle exit reason KVM_EXIT_SYSTEM_EVENT
  2014-10-01 10:34 ` [PATCH v5 3/4] kvmtool: Handle exit reason KVM_EXIT_SYSTEM_EVENT Anup Patel
@ 2014-10-03 16:16   ` Will Deacon
  0 siblings, 0 replies; 9+ messages in thread
From: Will Deacon @ 2014-10-03 16:16 UTC (permalink / raw)
  To: Anup Patel
  Cc: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
	patches@apm.com, Marc Zyngier, penberg@kernel.org,
	christoffer.dall@linaro.org, pranavkumar@linaro.org,
	Andre Przywara

On Wed, Oct 01, 2014 at 11:34:54AM +0100, Anup Patel wrote:
> The KVM_EXIT_SYSTEM_EVENT exit reason was added to define
> architecture independent system-wide events for a Guest.
> 
> Currently, it is used by in-kernel PSCI-0.2 emulation of
> KVM ARM/ARM64 to inform user space about PSCI SYSTEM_OFF
> or PSCI SYSTEM_RESET request.
> 
> For now, we simply treat all system-wide guest events as
> shutdown request in KVMTOOL.
> 
> Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
> Signed-off-by: Anup Patel <anup.patel@linaro.org>
> Reviewed-by: Andre Przywara <andre.przywara@arm.com>
> ---
>  tools/kvm/kvm-cpu.c |   21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff --git a/tools/kvm/kvm-cpu.c b/tools/kvm/kvm-cpu.c
> index ee0a8ec..5180039 100644
> --- a/tools/kvm/kvm-cpu.c
> +++ b/tools/kvm/kvm-cpu.c
> @@ -160,6 +160,27 @@ int kvm_cpu__start(struct kvm_cpu *cpu)
>  			goto exit_kvm;
>  		case KVM_EXIT_SHUTDOWN:
>  			goto exit_kvm;
> +		case KVM_EXIT_SYSTEM_EVENT:
> +			/*
> +			 * Print the type of system event and
> +			 * treat all system events as shutdown request.
> +			 */
> +			switch (cpu->kvm_run->system_event.type) {
> +			case KVM_SYSTEM_EVENT_SHUTDOWN:
> +				printf("  # Info: shutdown system event\n");
> +				goto exit_kvm;
> +			case KVM_SYSTEM_EVENT_RESET:
> +				printf("  # Info: reset system event\n");
> +				printf("  # Info: KVMTOOL does not support VM reset\n");
> +				printf("  # Info: please re-launch the VM manually\n");

Can you use pr_info here instead?

> +				goto exit_kvm;
> +			default:
> +				printf("  # Warning: unknown system event type=%d\n",
> +				       cpu->kvm_run->system_event.type);

and pr_warning here? (be sure to drop the '\n's).

Will

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

* Re: [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates
  2014-10-01 10:34 [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates Anup Patel
                   ` (4 preceding siblings ...)
  2014-10-01 12:58 ` [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates Andre Przywara
@ 2014-10-03 16:17 ` Will Deacon
  2014-10-06  9:15   ` Anup Patel
  5 siblings, 1 reply; 9+ messages in thread
From: Will Deacon @ 2014-10-03 16:17 UTC (permalink / raw)
  To: Anup Patel
  Cc: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
	patches@apm.com, Marc Zyngier, penberg@kernel.org,
	christoffer.dall@linaro.org, pranavkumar@linaro.org,
	Andre Przywara

On Wed, Oct 01, 2014 at 11:34:51AM +0100, Anup Patel wrote:
> This patchset updates KVMTOOL to use some of the features
> supported by Linux-3.16 KVM ARM/ARM64, such as:
> 
> 1. Target CPU == Host using KVM_ARM_PREFERRED_TARGET vm ioctl
> 2. Target CPU type Potenza for using KVMTOOL on X-Gene
> 3. PSCI v0.2 support for Aarch32 and Aarch64 guest
> 4. System event exit reason
> 
> Changes since v4:
> - Avoid using magic '0' target for kvm arm generic target
> - Added comment for why we need Potenza target in KVMTOOL

Please can you send a v5 addressing my minor comment and adding Andre's
reviewed-by tags?

Thanks,

Will

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

* Re: [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates
  2014-10-03 16:17 ` Will Deacon
@ 2014-10-06  9:15   ` Anup Patel
  0 siblings, 0 replies; 9+ messages in thread
From: Anup Patel @ 2014-10-06  9:15 UTC (permalink / raw)
  To: Will Deacon
  Cc: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
	patches@apm.com, Marc Zyngier, penberg@kernel.org,
	christoffer.dall@linaro.org, pranavkumar@linaro.org,
	Andre Przywara

On 3 October 2014 21:47, Will Deacon <will.deacon@arm.com> wrote:
> On Wed, Oct 01, 2014 at 11:34:51AM +0100, Anup Patel wrote:
>> This patchset updates KVMTOOL to use some of the features
>> supported by Linux-3.16 KVM ARM/ARM64, such as:
>>
>> 1. Target CPU == Host using KVM_ARM_PREFERRED_TARGET vm ioctl
>> 2. Target CPU type Potenza for using KVMTOOL on X-Gene
>> 3. PSCI v0.2 support for Aarch32 and Aarch64 guest
>> 4. System event exit reason
>>
>> Changes since v4:
>> - Avoid using magic '0' target for kvm arm generic target
>> - Added comment for why we need Potenza target in KVMTOOL
>
> Please can you send a v5 addressing my minor comment and adding Andre's
> reviewed-by tags?

Sure, will do.

Thanks,
Anup

>
> Thanks,
>
> Will

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

end of thread, other threads:[~2014-10-06  9:15 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-01 10:34 [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates Anup Patel
2014-10-01 10:34 ` [PATCH v5 1/4] kvmtool: ARM: Use KVM_ARM_PREFERRED_TARGET vm ioctl to determine target cpu Anup Patel
2014-10-01 10:34 ` [PATCH v5 2/4] kvmtool: ARM64: Add target type potenza for aarch64 Anup Patel
2014-10-01 10:34 ` [PATCH v5 3/4] kvmtool: Handle exit reason KVM_EXIT_SYSTEM_EVENT Anup Patel
2014-10-03 16:16   ` Will Deacon
2014-10-01 10:34 ` [PATCH v5 4/4] kvmtool: ARM/ARM64: Provide PSCI-0.2 to guest when KVM supports it Anup Patel
2014-10-01 12:58 ` [PATCH v5 0/4] kvmtool: ARM/ARM64: Misc updates Andre Przywara
2014-10-03 16:17 ` Will Deacon
2014-10-06  9:15   ` Anup Patel

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).