From f02d2ccf01e8671d2da517f14a908d1df1cc42ad Mon Sep 17 00:00:00 2001
From: Sheng Yang <[EMAIL PROTECTED]>
Date: Thu, 19 Jun 2008 18:41:26 +0800
Subject: [PATCH] KVM: Report hardware virtualization features
The hardware virtualization technology evolves very fast. But currently it's
hard to tell if your CPU support certain kind of HW technology without dig
into the source code.
The patch introduced a virtual file called "kvm_hw_feature_report" under
/sys/devices/system/kvm/kvm0 to show the mainly important current hardware
virtualization feature, then it's pretty easy to tell if your CPU support
some advanced virtualization technology now.
Signed-off-by: Sheng Yang <[EMAIL PROTECTED]>
---
include/linux/kvm_host.h | 3 +++
virt/kvm/kvm_main.c | 26 ++++++++++++++++++++++++++
2 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index d220b49..654dba6 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -278,6 +278,9 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *v);
int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu);
void kvm_vcpu_kick(struct kvm_vcpu *vcpu);
+int kvm_register_hw_feature_report(int (*show)(char *page));
+void kvm_unregister_hw_feature_report(void);
+
static inline void kvm_guest_enter(void)
{
account_system_vtime(current);
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 4f38f5c..8eb74e5 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1518,6 +1518,32 @@ static struct sys_device kvm_sysdev = {
.cls = &kvm_sysdev_class,
};
+static int (*kvm_hw_fea_show_func)(char *);
+
+static ssize_t kvm_hw_feature_show(struct sys_device *dev, char *page)
+{
+ if (!kvm_hw_fea_show_func)
+ return 0;
+ return kvm_hw_fea_show_func(page);
+}
+
+static SYSDEV_ATTR(kvm_hw_feature_report, 0444, kvm_hw_feature_show, 0)
+
+int kvm_register_hw_feature_report(int (*show)(char *page))
+{
+ if (kvm_hw_fea_show_func)
+ sysdev_remove_file(&kvm_sysdev, &attr_kvm_hw_feature_report);
+ kvm_hw_fea_show_func = show;
+ return sysdev_create_file(&kvm_sysdev, &attr_kvm_hw_feature_report);
+}
+EXPORT_SYMBOL_GPL(kvm_register_hw_feature_report);
+
+void kvm_unregister_hw_feature_report(void)
+{
+ kvm_hw_fea_show_func = NULL;
+}
+EXPORT_SYMBOL_GPL(kvm_unregister_hw_feature_report);
+
struct page *bad_page;
pfn_t bad_pfn;
--
1.5.5
From f02d2ccf01e8671d2da517f14a908d1df1cc42ad Mon Sep 17 00:00:00 2001
From: Sheng Yang <[EMAIL PROTECTED]>
Date: Thu, 19 Jun 2008 18:41:26 +0800
Subject: [PATCH] KVM: Report hardware virtualization features
The hardware virtualization technology evolves very fast. But currently it's
hard to tell if your CPU support certain kind of HW technology without dig into
the source code.
The patch introduced a virtual file called "kvm_hw_feature_report" under
/sys/devices/system/kvm/kvm0 to show the mainly important current hardware
virtualization feature, then it's pretty easy to tell if your CPU support
some advanced virtualization technology now.
Signed-off-by: Sheng Yang <[EMAIL PROTECTED]>
---
include/linux/kvm_host.h | 3 +++
virt/kvm/kvm_main.c | 26 ++++++++++++++++++++++++++
2 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index d220b49..654dba6 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -278,6 +278,9 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *v);
int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu);
void kvm_vcpu_kick(struct kvm_vcpu *vcpu);
+int kvm_register_hw_feature_report(int (*show)(char *page));
+void kvm_unregister_hw_feature_report(void);
+
static inline void kvm_guest_enter(void)
{
account_system_vtime(current);
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 4f38f5c..8eb74e5 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1518,6 +1518,32 @@ static struct sys_device kvm_sysdev = {
.cls = &kvm_sysdev_class,
};
+static int (*kvm_hw_fea_show_func)(char *);
+
+static ssize_t kvm_hw_feature_show(struct sys_device *dev, char *page)
+{
+ if (!kvm_hw_fea_show_func)
+ return 0;
+ return kvm_hw_fea_show_func(page);
+}
+
+static SYSDEV_ATTR(kvm_hw_feature_report, 0444, kvm_hw_feature_show, 0)
+
+int kvm_register_hw_feature_report(int (*show)(char *page))
+{
+ if (kvm_hw_fea_show_func)
+ sysdev_remove_file(&kvm_sysdev, &attr_kvm_hw_feature_report);
+ kvm_hw_fea_show_func = show;
+ return sysdev_create_file(&kvm_sysdev, &attr_kvm_hw_feature_report);
+}
+EXPORT_SYMBOL_GPL(kvm_register_hw_feature_report);
+
+void kvm_unregister_hw_feature_report(void)
+{
+ kvm_hw_fea_show_func = NULL;
+}
+EXPORT_SYMBOL_GPL(kvm_unregister_hw_feature_report);
+
struct page *bad_page;
pfn_t bad_pfn;
--
1.5.5