File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/pvclock-abi.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: #ifndef _ASM_X86_PVCLOCK_ABI_H
       2: #define _ASM_X86_PVCLOCK_ABI_H
       3: #ifndef __ASSEMBLY__
       4: 
       5: /*
       6:  * These structs MUST NOT be changed.
       7:  * They are the ABI between hypervisor and guest OS.
       8:  * Both Xen and KVM are using this.
       9:  *
      10:  * pvclock_vcpu_time_info holds the system time and the tsc timestamp
      11:  * of the last update. So the guest can use the tsc delta to get a
      12:  * more precise system time.  There is one per virtual cpu.
      13:  *
      14:  * pvclock_wall_clock references the point in time when the system
      15:  * time was zero (usually boot time), thus the guest calculates the
      16:  * current wall clock by adding the system time.
      17:  *
      18:  * Protocol for the "version" fields is: hypervisor raises it (making
      19:  * it uneven) before it starts updating the fields and raises it again
      20:  * (making it even) when it is done.  Thus the guest can make sure the
      21:  * time values it got are consistent by checking the version before
      22:  * and after reading them.
      23:  */
      24: 
      25: struct pvclock_vcpu_time_info {
      26:     u32   version;
      27:     u32   pad0;
      28:     u64   tsc_timestamp;
      29:     u64   system_time;
      30:     u32   tsc_to_system_mul;
      31:     s8    tsc_shift;
      32:     u8    flags;
      33:     u8    pad[2];
      34: } __attribute__((__packed__)); /* 32 bytes */
      35: 
      36: struct pvclock_wall_clock {
      37:     u32   version;
      38:     u32   sec;
      39:     u32   nsec;
      40: } __attribute__((__packed__));
      41: 
      42: #define PVCLOCK_TSC_STABLE_BIT    (1 << 0)
      43: #define PVCLOCK_GUEST_STOPPED    (1 << 1)
      44: #endif /* __ASSEMBLY__ */
      45: #endif /* _ASM_X86_PVCLOCK_ABI_H */
      46: