* [PATCH 1/1] Drivers: hv: Cleanup the guest ID computation
@ 2012-07-24 23:11 K. Y. Srinivasan
2012-07-24 23:28 ` KY Srinivasan
2012-07-25 14:18 ` KY Srinivasan
0 siblings, 2 replies; 3+ messages in thread
From: K. Y. Srinivasan @ 2012-07-24 23:11 UTC (permalink / raw)
To: gregkh, linux-kernel, devel, virtualization, olaf, apw; +Cc: K. Y. Srinivasan
The current guest ID string in use in vmbus driver does not conform
to the MSFT guidelines on guest ID. MSFT currently does not specify
Linux specific guidelines. MSFT however has plans to publish Linux
specific guidelines. This implementation conforms to the yet unpublished
Linux specific guidelines for guest ID. This implementation also broadly
conforms to the current guidelines as well.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
---
drivers/hv/hv.c | 9 +++++--
drivers/hv/hyperv_vmbus.h | 48 +++++++++++++++++++++++++++++++++++++++++---
2 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index 86f8885..771e24f 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -26,6 +26,7 @@
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/hyperv.h>
+#include <linux/version.h>
#include <asm/hyperv.h>
#include "hyperv_vmbus.h"
@@ -164,9 +165,11 @@ int hv_init(void)
max_leaf = query_hypervisor_info();
- /* Write our OS info */
- wrmsrl(HV_X64_MSR_GUEST_OS_ID, HV_LINUX_GUEST_ID);
- hv_context.guestid = HV_LINUX_GUEST_ID;
+ /*
+ * Write our OS ID.
+ */
+ hv_context.guestid = generate_guest_id(0, LINUX_VERSION_CODE, 0);
+ wrmsrl(HV_X64_MSR_GUEST_OS_ID, hv_context.guestid);
/* See if the hypercall page is already set */
rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 0614ff3..108a441 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -410,10 +410,50 @@ enum {
#define HV_PRESENT_BIT 0x80000000
-#define HV_LINUX_GUEST_ID_LO 0x00000000
-#define HV_LINUX_GUEST_ID_HI 2976579765
-#define HV_LINUX_GUEST_ID (((u64)HV_LINUX_GUEST_ID_HI << 32) | \
- HV_LINUX_GUEST_ID_LO)
+/*
+ * The guest OS needs to register the guest ID with the hypervisor.
+ * The guest ID is a 64 bit entity and the structure of this ID is
+ * specified in the Hyper-V specification:
+ *
+ * http://msdn.microsoft.com/en-us/library/windows/
+ * hardware/ff542653%28v=vs.85%29.aspx
+ *
+ * While the current guideline does not specify how Linux guest ID(s)
+ * need to be generated, our plan is to publish the guidelines for
+ * Linux and other guest operating systems that currently are hosted
+ * on Hyper-V. The implementation here conforms to this yet
+ * unpublished guidelines.
+ *
+ *
+ * Bit(s)
+ * 63 - Indicates if the OS is Open Source or not; 1 is Open Source
+ * 62:56 - Os Type; Linux is 0x100
+ * 55:48 - Distro specific identification
+ * 47:16 - Linux kernel version number
+ * 15:0 - Distro specific identification
+ *
+ *
+ */
+
+#define HV_LINUX_VENDOR_ID 0x8100
+
+/*
+ * Generate the guest ID based on the guideline described above.
+ */
+
+static inline __u64 generate_guest_id(__u8 d_info1, __u32 kernel_version,
+ __u16 d_info2)
+{
+ __u64 guest_id = 0;
+
+ guest_id = (((__u64)HV_LINUX_VENDOR_ID) << 48);
+ guest_id |= (((__u64)(d_info1)) << 48);
+ guest_id |= (((__u64)(kernel_version)) << 16);
+ guest_id |= ((__u64)(d_info2));
+
+ return guest_id;
+}
+
#define HV_CPU_POWER_MANAGEMENT (1 << 0)
#define HV_RECOMMENDATIONS_MAX 4
--
1.7.4.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* RE: [PATCH 1/1] Drivers: hv: Cleanup the guest ID computation
2012-07-24 23:11 [PATCH 1/1] Drivers: hv: Cleanup the guest ID computation K. Y. Srinivasan
@ 2012-07-24 23:28 ` KY Srinivasan
2012-07-25 14:18 ` KY Srinivasan
1 sibling, 0 replies; 3+ messages in thread
From: KY Srinivasan @ 2012-07-24 23:28 UTC (permalink / raw)
To: KY Srinivasan, gregkh@linuxfoundation.org,
linux-kernel@vger.kernel.org, devel@linuxdriverproject.org,
virtualization@lists.osdl.org, olaf@aepfle.de, apw@canonical.com
Cc: Haiyang Zhang
> -----Original Message-----
> From: K. Y. Srinivasan [mailto:kys@microsoft.com]
> Sent: Tuesday, July 24, 2012 7:12 PM
> To: gregkh@linuxfoundation.org; linux-kernel@vger.kernel.org;
> devel@linuxdriverproject.org; virtualization@lists.osdl.org; olaf@aepfle.de;
> apw@canonical.com
> Cc: KY Srinivasan
> Subject: [PATCH 1/1] Drivers: hv: Cleanup the guest ID computation
>
> The current guest ID string in use in vmbus driver does not conform
> to the MSFT guidelines on guest ID. MSFT currently does not specify
> Linux specific guidelines. MSFT however has plans to publish Linux
> specific guidelines. This implementation conforms to the yet unpublished
> Linux specific guidelines for guest ID. This implementation also broadly
> conforms to the current guidelines as well.
>
>
> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Haiyang reviewed this code but I forgot include the
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
line. Greg, do you want me to resend this patch with that addition.
Regards,
K. Y
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [PATCH 1/1] Drivers: hv: Cleanup the guest ID computation
2012-07-24 23:11 [PATCH 1/1] Drivers: hv: Cleanup the guest ID computation K. Y. Srinivasan
2012-07-24 23:28 ` KY Srinivasan
@ 2012-07-25 14:18 ` KY Srinivasan
1 sibling, 0 replies; 3+ messages in thread
From: KY Srinivasan @ 2012-07-25 14:18 UTC (permalink / raw)
To: KY Srinivasan, gregkh@linuxfoundation.org,
linux-kernel@vger.kernel.org, devel@linuxdriverproject.org,
virtualization@lists.osdl.org, olaf@aepfle.de, apw@canonical.com
This is the patch I sent out yesterday for Linux to clean up the guest ID mess. For FreeBSD, you can use the following constant:
HV_FREEBSD_VENDOR_ID 0x8200
and use the function to generate the ID appropriately. Larry, I will forward you the proposal for guest ID in a separate email.
Regards.
K. Y
> -----Original Message-----
> From: K. Y. Srinivasan [mailto:kys@microsoft.com]
> Sent: Tuesday, July 24, 2012 7:12 PM
> To: gregkh@linuxfoundation.org; linux-kernel@vger.kernel.org;
> devel@linuxdriverproject.org; virtualization@lists.osdl.org; olaf@aepfle.de;
> apw@canonical.com
> Cc: KY Srinivasan
> Subject: [PATCH 1/1] Drivers: hv: Cleanup the guest ID computation
>
> The current guest ID string in use in vmbus driver does not conform
> to the MSFT guidelines on guest ID. MSFT currently does not specify
> Linux specific guidelines. MSFT however has plans to publish Linux
> specific guidelines. This implementation conforms to the yet unpublished
> Linux specific guidelines for guest ID. This implementation also broadly
> conforms to the current guidelines as well.
>
>
> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
> ---
> drivers/hv/hv.c | 9 +++++--
> drivers/hv/hyperv_vmbus.h | 48
> +++++++++++++++++++++++++++++++++++++++++---
> 2 files changed, 50 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
> index 86f8885..771e24f 100644
> --- a/drivers/hv/hv.c
> +++ b/drivers/hv/hv.c
> @@ -26,6 +26,7 @@
> #include <linux/slab.h>
> #include <linux/vmalloc.h>
> #include <linux/hyperv.h>
> +#include <linux/version.h>
> #include <asm/hyperv.h>
> #include "hyperv_vmbus.h"
>
> @@ -164,9 +165,11 @@ int hv_init(void)
>
> max_leaf = query_hypervisor_info();
>
> - /* Write our OS info */
> - wrmsrl(HV_X64_MSR_GUEST_OS_ID, HV_LINUX_GUEST_ID);
> - hv_context.guestid = HV_LINUX_GUEST_ID;
> + /*
> + * Write our OS ID.
> + */
> + hv_context.guestid = generate_guest_id(0, LINUX_VERSION_CODE, 0);
> + wrmsrl(HV_X64_MSR_GUEST_OS_ID, hv_context.guestid);
>
> /* See if the hypercall page is already set */
> rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
> diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
> index 0614ff3..108a441 100644
> --- a/drivers/hv/hyperv_vmbus.h
> +++ b/drivers/hv/hyperv_vmbus.h
> @@ -410,10 +410,50 @@ enum {
>
> #define HV_PRESENT_BIT 0x80000000
>
> -#define HV_LINUX_GUEST_ID_LO 0x00000000
> -#define HV_LINUX_GUEST_ID_HI 2976579765
> -#define HV_LINUX_GUEST_ID (((u64)HV_LINUX_GUEST_ID_HI << 32) |
> \
> - HV_LINUX_GUEST_ID_LO)
> +/*
> + * The guest OS needs to register the guest ID with the hypervisor.
> + * The guest ID is a 64 bit entity and the structure of this ID is
> + * specified in the Hyper-V specification:
> + *
> + * http://msdn.microsoft.com/en-us/library/windows/
> + * hardware/ff542653%28v=vs.85%29.aspx
> + *
> + * While the current guideline does not specify how Linux guest ID(s)
> + * need to be generated, our plan is to publish the guidelines for
> + * Linux and other guest operating systems that currently are hosted
> + * on Hyper-V. The implementation here conforms to this yet
> + * unpublished guidelines.
> + *
> + *
> + * Bit(s)
> + * 63 - Indicates if the OS is Open Source or not; 1 is Open Source
> + * 62:56 - Os Type; Linux is 0x100
> + * 55:48 - Distro specific identification
> + * 47:16 - Linux kernel version number
> + * 15:0 - Distro specific identification
> + *
> + *
> + */
> +
> +#define HV_LINUX_VENDOR_ID 0x8100
> +
> +/*
> + * Generate the guest ID based on the guideline described above.
> + */
> +
> +static inline __u64 generate_guest_id(__u8 d_info1, __u32 kernel_version,
> + __u16 d_info2)
> +{
> + __u64 guest_id = 0;
> +
> + guest_id = (((__u64)HV_LINUX_VENDOR_ID) << 48);
> + guest_id |= (((__u64)(d_info1)) << 48);
> + guest_id |= (((__u64)(kernel_version)) << 16);
> + guest_id |= ((__u64)(d_info2));
> +
> + return guest_id;
> +}
> +
>
> #define HV_CPU_POWER_MANAGEMENT (1 << 0)
> #define HV_RECOMMENDATIONS_MAX 4
> --
> 1.7.4.1
>
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-07-25 14:18 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-24 23:11 [PATCH 1/1] Drivers: hv: Cleanup the guest ID computation K. Y. Srinivasan
2012-07-24 23:28 ` KY Srinivasan
2012-07-25 14:18 ` KY Srinivasan
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).