• Andrey Smetanin's avatar
    drivers/hv: correct tsc page sequence invalid value · c35b82ef
    Andrey Smetanin authored
    Hypervisor Top Level Functional Specification v3/4 says
    that TSC page sequence value = -1(0xFFFFFFFF) is used to
    indicate that TSC page no longer reliable source of reference
    timer. Unfortunately, we found that Windows Hyper-V guest
    side implementation uses sequence value = 0 to indicate
    that Tsc page no longer valid. This is clearly visible
    inside Windows 2012R2 ntoskrnl.exe HvlGetReferenceTime()
    function dissassembly:
    
    HvlGetReferenceTime proc near
                     xchg    ax, ax
    loc_1401C3132:
                     mov     rax, cs:HvlpReferenceTscPage
                     mov     r9d, [rax]
                     test    r9d, r9d
                     jz      short loc_1401C3176
                     rdtsc
                     mov     rcx, cs:HvlpReferenceTscPage
                     shl     rdx, 20h
                     or      rdx, rax
                     mov     rax, [rcx+8]
                     mov     rcx, cs:HvlpReferenceTscPage
                     mov     r8, [rcx+10h]
                     mul     rdx
                     mov     rax, cs:HvlpReferenceTscPage
                     add     rdx, r8
                     mov     ecx, [rax]
                     cmp     ecx, r9d
                     jnz     short loc_1401C3132
                     jmp     short loc_1401C3184
    loc_1401C3176:
                     mov     ecx, 40000020h
                     rdmsr
                     shl     rdx, 20h
                     or      rdx, rax
    loc_1401C3184:
                     mov     rax, rdx
                     retn
    HvlGetReferenceTime endp
    
    This patch aligns Tsc page invalid sequence value with
    Windows Hyper-V guest implementation which is more
    compatible with both Hyper-V hypervisor and KVM hypervisor.
    Signed-off-by: default avatarAndrey Smetanin <asmetanin@virtuozzo.com>
    Signed-off-by: default avatarDenis V. Lunev <den@openvz.org>
    CC: "K. Y. Srinivasan" <kys@microsoft.com>
    CC: Haiyang Zhang <haiyangz@microsoft.com>
    CC: Vitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarDenis V. Lunev <den@openvz.org>
    Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    c35b82ef
hv.c 15.2 KB