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