lkml.org 
[lkml]   [2008]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: [PATCH 2/4] Hypervisor detection and get tsc_freq from hypervisor
From
Date
Hi, 

The patch below fixes a problem with the implementation of
vmware_get_tsc_khz.

Please pick this patch too.

Thanks,
Alok

--

x86-VMware: Fix vmware_get_tsc code

From: Alok N Kataria <akataria@vmware.com>

The current version of the code to get the tsc frequency from
the VMware hypervisor, will be broken on processor with frequency
(4G-1) HZ, because on such processors eax will have UINT_MAX
and that would be legitimate.
We instead check that EBX did change to decide if we were able to
read the frequency from the hypervisor.

Signed-off-by: Alok N Kataria <akataria@vmware.com>
---

arch/x86/kernel/cpu/vmware.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)


diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
index 89bc346..b781e50 100644
--- a/arch/x86/kernel/cpu/vmware.c
+++ b/arch/x86/kernel/cpu/vmware.c
@@ -36,7 +36,7 @@
"=a"(eax), "=c"(ecx), "=d"(edx), "=b"(ebx) : \
"0"(VMWARE_HYPERVISOR_MAGIC), \
"1"(VMWARE_PORT_CMD_##cmd), \
- "2"(VMWARE_HYPERVISOR_PORT), "3"(0) : \
+ "2"(VMWARE_HYPERVISOR_PORT), "3"(UINT_MAX) : \
"memory");

static inline int __vmware_platform(void)
@@ -53,7 +53,7 @@ static unsigned long __vmware_get_tsc_khz(void)

VMWARE_PORT(GETHZ, eax, ebx, ecx, edx);

- if (eax == (uint32_t)-1)
+ if (ebx == UINT_MAX)
return 0;
tsc_hz = eax | (((uint64_t)ebx) << 32);
do_div(tsc_hz, 1000);



\
 
 \ /
  Last update: 2008-11-03 20:35    [W:0.049 / U:0.160 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site