diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-06-25 06:27:05 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-06-25 06:27:05 -0400 |
| commit | 773dc8eacaedb2e8c8d0defb5de2c66ea7dc4a08 (patch) | |
| tree | 1bfa945dcfbcc4a60e31714f768ef38155c621d3 /include | |
| parent | 961ccddd59d627b89bd3dc284b6517833bbdf25d (diff) | |
| parent | 543cf4cb3fe6f6cae3651ba918b9c56200b257d0 (diff) | |
Merge branch 'linus' into sched/new-API-sched_setscheduler
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-alpha/percpu.h | 2 | ||||
| -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/pvclock-abi.h | 42 | ||||
| -rw-r--r-- | include/asm-x86/pvclock.h | 13 | ||||
| -rw-r--r-- | include/asm-x86/xen/page.h | 4 | ||||
| -rw-r--r-- | include/linux/kvm_host.h | 1 | ||||
| -rw-r--r-- | include/linux/tty_driver.h | 5 | ||||
| -rw-r--r-- | include/xen/interface/xen.h | 7 |
9 files changed, 66 insertions, 30 deletions
diff --git a/include/asm-alpha/percpu.h b/include/asm-alpha/percpu.h index 82e8a94b4b2f..3495e8e00d70 100644 --- a/include/asm-alpha/percpu.h +++ b/include/asm-alpha/percpu.h | |||
| @@ -69,6 +69,8 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; | |||
| 69 | #define __get_cpu_var(var) per_cpu_var(var) | 69 | #define __get_cpu_var(var) per_cpu_var(var) |
| 70 | #define __raw_get_cpu_var(var) per_cpu_var(var) | 70 | #define __raw_get_cpu_var(var) per_cpu_var(var) |
| 71 | 71 | ||
| 72 | #define PER_CPU_ATTRIBUTES | ||
| 73 | |||
| 72 | #endif /* SMP */ | 74 | #endif /* SMP */ |
| 73 | 75 | ||
| 74 | #define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu_var(name) | 76 | #define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu_var(name) |
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/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 | ||
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 092b1b25291d..de9d1df4bba2 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -33,6 +33,7 @@ | |||
| 33 | #define KVM_REQ_REPORT_TPR_ACCESS 2 | 33 | #define KVM_REQ_REPORT_TPR_ACCESS 2 |
| 34 | #define KVM_REQ_MMU_RELOAD 3 | 34 | #define KVM_REQ_MMU_RELOAD 3 |
| 35 | #define KVM_REQ_TRIPLE_FAULT 4 | 35 | #define KVM_REQ_TRIPLE_FAULT 4 |
| 36 | #define KVM_REQ_PENDING_TIMER 5 | ||
| 36 | 37 | ||
| 37 | struct kvm_vcpu; | 38 | struct kvm_vcpu; |
| 38 | extern struct kmem_cache *kvm_vcpu_cache; | 39 | extern struct kmem_cache *kvm_vcpu_cache; |
diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h index 59f1c0bd8f9c..d2a003586761 100644 --- a/include/linux/tty_driver.h +++ b/include/linux/tty_driver.h | |||
| @@ -27,8 +27,7 @@ | |||
| 27 | * This routine is called by the kernel to write a series of | 27 | * This routine is called by the kernel to write a series of |
| 28 | * characters to the tty device. The characters may come from | 28 | * characters to the tty device. The characters may come from |
| 29 | * user space or kernel space. This routine will return the | 29 | * user space or kernel space. This routine will return the |
| 30 | * number of characters actually accepted for writing. This | 30 | * number of characters actually accepted for writing. |
| 31 | * routine is mandatory. | ||
| 32 | * | 31 | * |
| 33 | * Optional: Required for writable devices. | 32 | * Optional: Required for writable devices. |
| 34 | * | 33 | * |
| @@ -134,7 +133,7 @@ | |||
| 134 | * This routine notifies the tty driver that it should hangup the | 133 | * This routine notifies the tty driver that it should hangup the |
| 135 | * tty device. | 134 | * tty device. |
| 136 | * | 135 | * |
| 137 | * Required: | 136 | * Optional: |
| 138 | * | 137 | * |
| 139 | * void (*break_ctl)(struct tty_stuct *tty, int state); | 138 | * void (*break_ctl)(struct tty_stuct *tty, int state); |
| 140 | * | 139 | * |
diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h index 9b018da48cf3..819a0331cda9 100644 --- a/include/xen/interface/xen.h +++ b/include/xen/interface/xen.h | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #define __XEN_PUBLIC_XEN_H__ | 10 | #define __XEN_PUBLIC_XEN_H__ |
| 11 | 11 | ||
| 12 | #include <asm/xen/interface.h> | 12 | #include <asm/xen/interface.h> |
| 13 | #include <asm/pvclock-abi.h> | ||
| 13 | 14 | ||
| 14 | /* | 15 | /* |
| 15 | * XEN "SYSTEM CALLS" (a.k.a. HYPERCALLS). | 16 | * XEN "SYSTEM CALLS" (a.k.a. HYPERCALLS). |
| @@ -336,7 +337,7 @@ struct vcpu_info { | |||
| 336 | uint8_t evtchn_upcall_mask; | 337 | uint8_t evtchn_upcall_mask; |
| 337 | unsigned long evtchn_pending_sel; | 338 | unsigned long evtchn_pending_sel; |
| 338 | struct arch_vcpu_info arch; | 339 | struct arch_vcpu_info arch; |
| 339 | struct vcpu_time_info time; | 340 | struct pvclock_vcpu_time_info time; |
| 340 | }; /* 64 bytes (x86) */ | 341 | }; /* 64 bytes (x86) */ |
| 341 | 342 | ||
| 342 | /* | 343 | /* |
| @@ -384,9 +385,7 @@ struct shared_info { | |||
| 384 | * Wallclock time: updated only by control software. Guests should base | 385 | * Wallclock time: updated only by control software. Guests should base |
| 385 | * their gettimeofday() syscall on this wallclock-base value. | 386 | * their gettimeofday() syscall on this wallclock-base value. |
| 386 | */ | 387 | */ |
| 387 | uint32_t wc_version; /* Version counter: see vcpu_time_info_t. */ | 388 | struct pvclock_wall_clock wc; |
| 388 | uint32_t wc_sec; /* Secs 00:00:00 UTC, Jan 1, 1970. */ | ||
| 389 | uint32_t wc_nsec; /* Nsecs 00:00:00 UTC, Jan 1, 1970. */ | ||
| 390 | 389 | ||
| 391 | struct arch_shared_info arch; | 390 | struct arch_shared_info arch; |
| 392 | 391 | ||
