From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Sheng" Subject: [PATCH 1/4] KVM: Report hardware virtualization features Date: Thu, 19 Jun 2008 18:42:56 +0800 Message-ID: <200806191842.56275.sheng.yang@intel.com> Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_wgjWID6xdVluAg0" To: kvm@vger.kernel.org Return-path: Received: from mga11.intel.com ([192.55.52.93]:53913 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754671AbYFSKm7 (ORCPT ); Thu, 19 Jun 2008 06:42:59 -0400 Sender: kvm-owner@vger.kernel.org List-ID: --Boundary-00=_wgjWID6xdVluAg0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =46rom f02d2ccf01e8671d2da517f14a908d1df1cc42ad Mon Sep 17 00:00:00 2001 =46rom: Sheng Yang 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= =20 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 =2D-- 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 =2D-- 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 =2D-- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1518,6 +1518,32 @@ static struct sys_device kvm_sysdev =3D { .cls =3D &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 =3D 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 =3D NULL; +} +EXPORT_SYMBOL_GPL(kvm_unregister_hw_feature_report); + struct page *bad_page; pfn_t bad_pfn; =2D- 1.5.5 --Boundary-00=_wgjWID6xdVluAg0 Content-Type: text/x-diff; charset="utf-8"; name="0001-KVM-Report-hardware-virtualization-features.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0001-KVM-Report-hardware-virtualization-features.patch" =46rom f02d2ccf01e8671d2da517f14a908d1df1cc42ad Mon Sep 17 00:00:00 2001 =46rom: Sheng Yang 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 =2D-- 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 =2D-- 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); =20 +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 =2D-- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1518,6 +1518,32 @@ static struct sys_device kvm_sysdev =3D { .cls =3D &kvm_sysdev_class, }; =20 +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 =3D 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 =3D NULL; +} +EXPORT_SYMBOL_GPL(kvm_unregister_hw_feature_report); + struct page *bad_page; pfn_t bad_pfn; =20 =2D-=20 1.5.5 --Boundary-00=_wgjWID6xdVluAg0--