diff options
Diffstat (limited to 'include/asm-x86')
| -rw-r--r-- | include/asm-x86/geode.h | 4 | ||||
| -rw-r--r-- | include/asm-x86/kvm_host.h | 4 | ||||
| -rw-r--r-- | include/asm-x86/kvm_para.h | 18 | ||||
| -rw-r--r-- | include/asm-x86/page_32.h | 3 | ||||
| -rw-r--r-- | include/asm-x86/pvclock-abi.h | 42 | ||||
| -rw-r--r-- | include/asm-x86/pvclock.h | 13 | ||||
| -rw-r--r-- | include/asm-x86/xen/page.h | 4 |
7 files changed, 62 insertions, 26 deletions
diff --git a/include/asm-x86/geode.h b/include/asm-x86/geode.h index 6e6458853a36..bb06027fc83e 100644 --- a/include/asm-x86/geode.h +++ b/include/asm-x86/geode.h | |||
| @@ -112,8 +112,8 @@ extern int geode_get_dev_base(unsigned int dev); | |||
| 112 | #define VSA_VR_UNLOCK 0xFC53 /* unlock virtual register */ | 112 | #define VSA_VR_UNLOCK 0xFC53 /* unlock virtual register */ |
| 113 | #define VSA_VR_SIGNATURE 0x0003 | 113 | #define VSA_VR_SIGNATURE 0x0003 |
| 114 | #define VSA_VR_MEM_SIZE 0x0200 | 114 | #define VSA_VR_MEM_SIZE 0x0200 |
| 115 | #define VSA_SIG 0x4132 /* signature is ascii 'VSA2' */ | 115 | #define AMD_VSA_SIG 0x4132 /* signature is ascii 'VSA2' */ |
| 116 | 116 | #define GSW_VSA_SIG 0x534d /* General Software signature */ | |
| 117 | /* GPIO */ | 117 | /* GPIO */ |
| 118 | 118 | ||
| 119 | #define GPIO_OUTPUT_VAL 0x00 | 119 | #define GPIO_OUTPUT_VAL 0x00 |
diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index 1d8cd01fa514..844f2a89afbc 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/kvm_para.h> | 18 | #include <linux/kvm_para.h> |
| 19 | #include <linux/kvm_types.h> | 19 | #include <linux/kvm_types.h> |
| 20 | 20 | ||
| 21 | #include <asm/pvclock-abi.h> | ||
| 21 | #include <asm/desc.h> | 22 | #include <asm/desc.h> |
| 22 | 23 | ||
| 23 | #define KVM_MAX_VCPUS 16 | 24 | #define KVM_MAX_VCPUS 16 |
| @@ -282,7 +283,8 @@ struct kvm_vcpu_arch { | |||
| 282 | struct x86_emulate_ctxt emulate_ctxt; | 283 | struct x86_emulate_ctxt emulate_ctxt; |
| 283 | 284 | ||
| 284 | gpa_t time; | 285 | gpa_t time; |
| 285 | struct kvm_vcpu_time_info hv_clock; | 286 | struct pvclock_vcpu_time_info hv_clock; |
| 287 | unsigned int hv_clock_tsc_khz; | ||
| 286 | unsigned int time_offset; | 288 | unsigned int time_offset; |
| 287 | struct page *time_page; | 289 | struct page *time_page; |
| 288 | }; | 290 | }; |
diff --git a/include/asm-x86/kvm_para.h b/include/asm-x86/kvm_para.h index 509845942070..bfd9900742bf 100644 --- a/include/asm-x86/kvm_para.h +++ b/include/asm-x86/kvm_para.h | |||
| @@ -48,24 +48,6 @@ struct kvm_mmu_op_release_pt { | |||
| 48 | #ifdef __KERNEL__ | 48 | #ifdef __KERNEL__ |
| 49 | #include <asm/processor.h> | 49 | #include <asm/processor.h> |
| 50 | 50 | ||
| 51 | /* xen binary-compatible interface. See xen headers for details */ | ||
| 52 | struct kvm_vcpu_time_info { | ||
| 53 | uint32_t version; | ||
| 54 | uint32_t pad0; | ||
| 55 | uint64_t tsc_timestamp; | ||
| 56 | uint64_t system_time; | ||
| 57 | uint32_t tsc_to_system_mul; | ||
| 58 | int8_t tsc_shift; | ||
| 59 | int8_t pad[3]; | ||
| 60 | } __attribute__((__packed__)); /* 32 bytes */ | ||
| 61 | |||
| 62 | struct kvm_wall_clock { | ||
| 63 | uint32_t wc_version; | ||
| 64 | uint32_t wc_sec; | ||
| 65 | uint32_t wc_nsec; | ||
| 66 | } __attribute__((__packed__)); | ||
| 67 | |||
| 68 | |||
| 69 | extern void kvmclock_init(void); | 51 | extern void kvmclock_init(void); |
| 70 | 52 | ||
| 71 | 53 | ||
diff --git a/include/asm-x86/page_32.h b/include/asm-x86/page_32.h index 424e82f8ae27..ccf0ba3c3aba 100644 --- a/include/asm-x86/page_32.h +++ b/include/asm-x86/page_32.h | |||
| @@ -14,7 +14,8 @@ | |||
| 14 | #define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL) | 14 | #define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL) |
| 15 | 15 | ||
| 16 | #ifdef CONFIG_X86_PAE | 16 | #ifdef CONFIG_X86_PAE |
| 17 | #define __PHYSICAL_MASK_SHIFT 36 | 17 | /* 44=32+12, the limit we can fit into an unsigned long pfn */ |
| 18 | #define __PHYSICAL_MASK_SHIFT 44 | ||
| 18 | #define __VIRTUAL_MASK_SHIFT 32 | 19 | #define __VIRTUAL_MASK_SHIFT 32 |
| 19 | #define PAGETABLE_LEVELS 3 | 20 | #define PAGETABLE_LEVELS 3 |
| 20 | 21 | ||
diff --git a/include/asm-x86/pvclock-abi.h b/include/asm-x86/pvclock-abi.h new file mode 100644 index 000000000000..6857f840b243 --- /dev/null +++ b/include/asm-x86/pvclock-abi.h | |||
| @@ -0,0 +1,42 @@ | |||
| 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 pad[3]; | ||
| 33 | } __attribute__((__packed__)); /* 32 bytes */ | ||
| 34 | |||
| 35 | struct pvclock_wall_clock { | ||
| 36 | u32 version; | ||
| 37 | u32 sec; | ||
| 38 | u32 nsec; | ||
| 39 | } __attribute__((__packed__)); | ||
| 40 | |||
| 41 | #endif /* __ASSEMBLY__ */ | ||
| 42 | #endif /* _ASM_X86_PVCLOCK_ABI_H_ */ | ||
diff --git a/include/asm-x86/pvclock.h b/include/asm-x86/pvclock.h new file mode 100644 index 000000000000..85b1bba8e0a3 --- /dev/null +++ b/include/asm-x86/pvclock.h | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | #ifndef _ASM_X86_PVCLOCK_H_ | ||
| 2 | #define _ASM_X86_PVCLOCK_H_ | ||
| 3 | |||
| 4 | #include <linux/clocksource.h> | ||
| 5 | #include <asm/pvclock-abi.h> | ||
| 6 | |||
| 7 | /* some helper functions for xen and kvm pv clock sources */ | ||
| 8 | cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src); | ||
| 9 | void pvclock_read_wallclock(struct pvclock_wall_clock *wall, | ||
| 10 | struct pvclock_vcpu_time_info *vcpu, | ||
| 11 | struct timespec *ts); | ||
| 12 | |||
| 13 | #endif /* _ASM_X86_PVCLOCK_H_ */ | ||
diff --git a/include/asm-x86/xen/page.h b/include/asm-x86/xen/page.h index baf3a4dce28c..e11f24038b1d 100644 --- a/include/asm-x86/xen/page.h +++ b/include/asm-x86/xen/page.h | |||
| @@ -150,13 +150,9 @@ static inline pte_t __pte_ma(pteval_t x) | |||
| 150 | return (pte_t) { .pte = x }; | 150 | return (pte_t) { .pte = x }; |
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | #ifdef CONFIG_X86_PAE | ||
| 154 | #define pmd_val_ma(v) ((v).pmd) | 153 | #define pmd_val_ma(v) ((v).pmd) |
| 155 | #define pud_val_ma(v) ((v).pgd.pgd) | 154 | #define pud_val_ma(v) ((v).pgd.pgd) |
| 156 | #define __pmd_ma(x) ((pmd_t) { (x) } ) | 155 | #define __pmd_ma(x) ((pmd_t) { (x) } ) |
| 157 | #else /* !X86_PAE */ | ||
| 158 | #define pmd_val_ma(v) ((v).pud.pgd.pgd) | ||
| 159 | #endif /* CONFIG_X86_PAE */ | ||
| 160 | 156 | ||
| 161 | #define pgd_val_ma(x) ((x).pgd) | 157 | #define pgd_val_ma(x) ((x).pgd) |
| 162 | 158 | ||
