Showing with 2,142 additions and 1,786 deletions.
  1. +1 −40 arch/x86/include/asm/pvclock-abi.h
  2. +1 −184 arch/x86/include/asm/xen/interface.h
  3. +1 −97 arch/x86/include/asm/xen/interface_32.h
  4. +1 −143 arch/x86/include/asm/xen/interface_64.h
  5. +2 −0 arch/x86/include/uapi/asm/Kbuild
  6. +47 −0 arch/x86/include/uapi/asm/pvclock-abi.h
  7. +3 −0 arch/x86/include/uapi/asm/sembuf.h
  8. +0 −1 arch/x86/include/uapi/asm/sigcontext32.h
  9. +1 −1 arch/x86/include/uapi/asm/signal.h
  10. +5 −0 arch/x86/include/uapi/asm/xen/Kbuild
  11. +198 −0 arch/x86/include/uapi/asm/xen/interface.h
  12. +103 −0 arch/x86/include/uapi/asm/xen/interface_32.h
  13. +150 −0 arch/x86/include/uapi/asm/xen/interface_64.h
  14. +2 −0 include/uapi/asm-generic/ipcbuf.h
  15. +2 −0 include/uapi/asm-generic/msgbuf.h
  16. +2 −0 include/uapi/asm-generic/sembuf.h
  17. +3 −1 include/uapi/asm-generic/shmbuf.h
  18. +1 −1 include/uapi/asm-generic/signal.h
  19. +3 −0 include/uapi/asm-generic/ucontext.h
  20. +4 −4 include/uapi/drm/drm.h
  21. +8 −8 include/uapi/drm/drm_mode.h
  22. +4 −3 include/uapi/drm/exynos_drm.h
  23. +2 −0 include/uapi/drm/i810_drm.h
  24. +38 −38 include/uapi/drm/msm_drm.h
  25. +44 −42 include/uapi/drm/nouveau_drm.h
  26. +37 −37 include/uapi/drm/qxl_drm.h
  27. +2 −0 include/uapi/drm/r128_drm.h
  28. +65 −64 include/uapi/drm/radeon_drm.h
  29. +2 −0 include/uapi/drm/savage_drm.h
  30. +2 −0 include/uapi/drm/sis_drm.h
  31. +3 −3 include/uapi/drm/via_drm.h
  32. +130 −130 include/uapi/drm/vmwgfx_drm.h
  33. +1 −0 include/uapi/linux/agpgart.h
  34. +2 −2 include/uapi/linux/android/binder.h
  35. +1 −0 include/uapi/linux/atm_zatm.h
  36. +1 −0 include/uapi/linux/auto_fs.h
  37. +6 −0 include/uapi/linux/btrfs.h
  38. +9 −2 include/uapi/linux/coda.h
  39. +9 −4 include/uapi/linux/coda_psdev.h
  40. +1 −0 include/uapi/linux/dlm_netlink.h
  41. +22 −21 include/uapi/linux/dm-log-userspace.h
  42. +9 −5 include/uapi/linux/elfcore.h
  43. +6 −0 include/uapi/linux/errqueue.h
  44. +4 −0 include/uapi/linux/hdlc/ioctl.h
  45. +1 −0 include/uapi/linux/hsi/cs-protocol.h
  46. +9 −8 include/uapi/linux/hsi/hsi_char.h
  47. +4 −0 include/uapi/linux/if.h
  48. +2 −1 include/uapi/linux/if_pppol2tp.h
  49. +3 −0 include/uapi/linux/if_pppox.h
  50. +3 −0 include/uapi/linux/if_tunnel.h
  51. +2 −0 include/uapi/linux/ip6_tunnel.h
  52. +1 −0 include/uapi/linux/ipv6_route.h
  53. +2 −2 include/uapi/linux/kexec.h
  54. +1 −0 include/uapi/linux/llc.h
  55. +2 −0 include/uapi/linux/mqueue.h
  56. +1 −0 include/uapi/linux/mroute.h
  57. +1 −0 include/uapi/linux/mroute6.h
  58. +2 −1 include/uapi/linux/netfilter.h
  59. +2 −0 include/uapi/linux/netfilter/ipset/ip_set_bitmap.h
  60. +2 −0 include/uapi/linux/netfilter/ipset/ip_set_hash.h
  61. +2 −0 include/uapi/linux/netfilter/ipset/ip_set_list.h
  62. +3 −0 include/uapi/linux/netfilter/nf_conntrack_tuple_common.h
  63. +1 −0 include/uapi/linux/netfilter/xt_HMARK.h
  64. +1 −0 include/uapi/linux/netfilter/xt_RATEEST.h
  65. +2 −0 include/uapi/linux/netfilter/xt_TEE.h
  66. +1 −0 include/uapi/linux/netfilter/xt_TPROXY.h
  67. +1 −0 include/uapi/linux/netfilter/xt_hashlimit.h
  68. +1 −0 include/uapi/linux/netfilter/xt_ipvs.h
  69. +2 −0 include/uapi/linux/netfilter/xt_mac.h
  70. +2 −0 include/uapi/linux/netfilter/xt_osf.h
  71. +1 −1 include/uapi/linux/netfilter/xt_physdev.h
  72. +2 −0 include/uapi/linux/netfilter/xt_policy.h
  73. +1 −0 include/uapi/linux/netfilter/xt_rateest.h
  74. +1 −0 include/uapi/linux/netfilter/xt_recent.h
  75. +6 −6 include/uapi/linux/netfilter/xt_sctp.h
  76. +1 −0 include/uapi/linux/netfilter_arp/arp_tables.h
  77. +1 −0 include/uapi/linux/netfilter_bridge.h
  78. +1 −0 include/uapi/linux/netfilter_bridge/ebt_arp.h
  79. +2 −0 include/uapi/linux/netfilter_bridge/ebt_arpreply.h
  80. +1 −0 include/uapi/linux/netfilter_bridge/ebt_ip6.h
  81. +2 −0 include/uapi/linux/netfilter_bridge/ebt_nat.h
  82. +4 −2 include/uapi/linux/netfilter_bridge/ebtables.h
  83. +1 −0 include/uapi/linux/netfilter_ipv4/ip_tables.h
  84. +1 −0 include/uapi/linux/netfilter_ipv6/ip6_tables.h
  85. +1 −1 include/uapi/linux/netfilter_ipv6/ip6t_rt.h
  86. +8 −6 include/uapi/linux/nfsd/cld.h
  87. +1 −1 include/uapi/linux/omapfb.h
  88. +2 −2 include/uapi/linux/openvswitch.h
  89. +1 −0 include/uapi/linux/packet_diag.h
  90. +1 −1 include/uapi/linux/patchkey.h
  91. +52 −51 include/uapi/linux/rds.h
  92. +1 −1 include/uapi/linux/reiserfs_xattr.h
  93. +1 −0 include/uapi/linux/scc.h
  94. +4 −4 include/uapi/linux/sctp.h
  95. +4 −0 include/uapi/linux/socket.h
  96. +2 −2 include/uapi/linux/sysctl.h
  97. +11 −11 include/uapi/linux/target_core_user.h
  98. +1 −0 include/uapi/linux/virtio_balloon.h
  99. +28 −26 include/uapi/scsi/scsi_bsg_fc.h
  100. +11 −11 include/uapi/scsi/scsi_netlink.h
  101. +13 −8 include/uapi/scsi/scsi_netlink_fc.h
  102. +20 −3 include/uapi/sound/emu10k1.h
  103. +18 −22 include/uapi/sound/hdspm.h
  104. +1 −0 include/uapi/xen/Kbuild
  105. +12 −10 include/uapi/xen/gntalloc.h
  106. +18 −16 include/uapi/xen/gntdev.h
  107. +2 −0 include/uapi/xen/interface/Kbuild
  108. +759 −0 include/uapi/xen/interface/xen.h
  109. +1 −753 include/xen/interface/xen.h
  110. +143 −0 scripts/headers_compile_test.sh
  111. +9 −5 scripts/headers_install.sh
41 changes: 1 addition & 40 deletions arch/x86/include/asm/pvclock-abi.h
Original file line number Diff line number Diff line change
@@ -1,45 +1,6 @@
#ifndef _ASM_X86_PVCLOCK_ABI_H
#define _ASM_X86_PVCLOCK_ABI_H
#ifndef __ASSEMBLY__

/*
* These structs MUST NOT be changed.
* They are the ABI between hypervisor and guest OS.
* Both Xen and KVM are using this.
*
* pvclock_vcpu_time_info holds the system time and the tsc timestamp
* of the last update. So the guest can use the tsc delta to get a
* more precise system time. There is one per virtual cpu.
*
* pvclock_wall_clock references the point in time when the system
* time was zero (usually boot time), thus the guest calculates the
* current wall clock by adding the system time.
*
* Protocol for the "version" fields is: hypervisor raises it (making
* it uneven) before it starts updating the fields and raises it again
* (making it even) when it is done. Thus the guest can make sure the
* time values it got are consistent by checking the version before
* and after reading them.
*/
#include <uapi/asm/pvclock-abi.h>

struct pvclock_vcpu_time_info {
u32 version;
u32 pad0;
u64 tsc_timestamp;
u64 system_time;
u32 tsc_to_system_mul;
s8 tsc_shift;
u8 flags;
u8 pad[2];
} __attribute__((__packed__)); /* 32 bytes */

struct pvclock_wall_clock {
u32 version;
u32 sec;
u32 nsec;
} __attribute__((__packed__));

#define PVCLOCK_TSC_STABLE_BIT (1 << 0)
#define PVCLOCK_GUEST_STOPPED (1 << 1)
#endif /* __ASSEMBLY__ */
#endif /* _ASM_X86_PVCLOCK_ABI_H */
185 changes: 1 addition & 184 deletions arch/x86/include/asm/xen/interface.h
Original file line number Diff line number Diff line change
@@ -1,189 +1,6 @@
/******************************************************************************
* arch-x86_32.h
*
* Guest OS interface to x86 Xen.
*
* Copyright (c) 2004, K A Fraser
*/

#ifndef _ASM_X86_XEN_INTERFACE_H
#define _ASM_X86_XEN_INTERFACE_H

#ifdef __XEN__
#define __DEFINE_GUEST_HANDLE(name, type) \
typedef struct { type *p; } __guest_handle_ ## name
#else
#define __DEFINE_GUEST_HANDLE(name, type) \
typedef type * __guest_handle_ ## name
#endif

#define DEFINE_GUEST_HANDLE_STRUCT(name) \
__DEFINE_GUEST_HANDLE(name, struct name)
#define DEFINE_GUEST_HANDLE(name) __DEFINE_GUEST_HANDLE(name, name)
#define GUEST_HANDLE(name) __guest_handle_ ## name

#ifdef __XEN__
#if defined(__i386__)
#define set_xen_guest_handle(hnd, val) \
do { \
if (sizeof(hnd) == 8) \
*(uint64_t *)&(hnd) = 0; \
(hnd).p = val; \
} while (0)
#elif defined(__x86_64__)
#define set_xen_guest_handle(hnd, val) do { (hnd).p = val; } while (0)
#endif
#else
#if defined(__i386__)
#define set_xen_guest_handle(hnd, val) \
do { \
if (sizeof(hnd) == 8) \
*(uint64_t *)&(hnd) = 0; \
(hnd) = val; \
} while (0)
#elif defined(__x86_64__)
#define set_xen_guest_handle(hnd, val) do { (hnd) = val; } while (0)
#endif
#endif

#ifndef __ASSEMBLY__
/* Explicitly size integers that represent pfns in the public interface
* with Xen so that on ARM we can have one ABI that works for 32 and 64
* bit guests. */
typedef unsigned long xen_pfn_t;
#define PRI_xen_pfn "lx"
typedef unsigned long xen_ulong_t;
#define PRI_xen_ulong "lx"
typedef long xen_long_t;
#define PRI_xen_long "lx"

/* Guest handles for primitive C types. */
__DEFINE_GUEST_HANDLE(uchar, unsigned char);
__DEFINE_GUEST_HANDLE(uint, unsigned int);
DEFINE_GUEST_HANDLE(char);
DEFINE_GUEST_HANDLE(int);
DEFINE_GUEST_HANDLE(void);
DEFINE_GUEST_HANDLE(uint64_t);
DEFINE_GUEST_HANDLE(uint32_t);
DEFINE_GUEST_HANDLE(xen_pfn_t);
DEFINE_GUEST_HANDLE(xen_ulong_t);
#endif

#ifndef HYPERVISOR_VIRT_START
#define HYPERVISOR_VIRT_START mk_unsigned_long(__HYPERVISOR_VIRT_START)
#endif

#define MACH2PHYS_VIRT_START mk_unsigned_long(__MACH2PHYS_VIRT_START)
#define MACH2PHYS_VIRT_END mk_unsigned_long(__MACH2PHYS_VIRT_END)
#define MACH2PHYS_NR_ENTRIES ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>>__MACH2PHYS_SHIFT)

/* Maximum number of virtual CPUs in multi-processor guests. */
#define MAX_VIRT_CPUS 32

/*
* SEGMENT DESCRIPTOR TABLES
*/
/*
* A number of GDT entries are reserved by Xen. These are not situated at the
* start of the GDT because some stupid OSes export hard-coded selector values
* in their ABI. These hard-coded values are always near the start of the GDT,
* so Xen places itself out of the way, at the far end of the GDT.
*/
#define FIRST_RESERVED_GDT_PAGE 14
#define FIRST_RESERVED_GDT_BYTE (FIRST_RESERVED_GDT_PAGE * 4096)
#define FIRST_RESERVED_GDT_ENTRY (FIRST_RESERVED_GDT_BYTE / 8)

/*
* Send an array of these to HYPERVISOR_set_trap_table()
* The privilege level specifies which modes may enter a trap via a software
* interrupt. On x86/64, since rings 1 and 2 are unavailable, we allocate
* privilege levels as follows:
* Level == 0: No one may enter
* Level == 1: Kernel may enter
* Level == 2: Kernel may enter
* Level == 3: Everyone may enter
*/
#define TI_GET_DPL(_ti) ((_ti)->flags & 3)
#define TI_GET_IF(_ti) ((_ti)->flags & 4)
#define TI_SET_DPL(_ti, _dpl) ((_ti)->flags |= (_dpl))
#define TI_SET_IF(_ti, _if) ((_ti)->flags |= ((!!(_if))<<2))

#ifndef __ASSEMBLY__
struct trap_info {
uint8_t vector; /* exception vector */
uint8_t flags; /* 0-3: privilege level; 4: clear event enable? */
uint16_t cs; /* code selector */
unsigned long address; /* code offset */
};
DEFINE_GUEST_HANDLE_STRUCT(trap_info);

struct arch_shared_info {
unsigned long max_pfn; /* max pfn that appears in table */
/* Frame containing list of mfns containing list of mfns containing p2m. */
unsigned long pfn_to_mfn_frame_list_list;
unsigned long nmi_reason;
};
#endif /* !__ASSEMBLY__ */

#ifdef CONFIG_X86_32
#include <asm/xen/interface_32.h>
#else
#include <asm/xen/interface_64.h>
#endif

#include <asm/pvclock-abi.h>

#ifndef __ASSEMBLY__
/*
* The following is all CPU context. Note that the fpu_ctxt block is filled
* in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used.
*/
struct vcpu_guest_context {
/* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR. */
struct { char x[512]; } fpu_ctxt; /* User-level FPU registers */
#define VGCF_I387_VALID (1<<0)
#define VGCF_HVM_GUEST (1<<1)
#define VGCF_IN_KERNEL (1<<2)
unsigned long flags; /* VGCF_* flags */
struct cpu_user_regs user_regs; /* User-level CPU registers */
struct trap_info trap_ctxt[256]; /* Virtual IDT */
unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */
/* NB. User pagetable on x86/64 is placed in ctrlreg[1]. */
unsigned long ctrlreg[8]; /* CR0-CR7 (control registers) */
unsigned long debugreg[8]; /* DB0-DB7 (debug registers) */
#ifdef __i386__
unsigned long event_callback_cs; /* CS:EIP of event callback */
unsigned long event_callback_eip;
unsigned long failsafe_callback_cs; /* CS:EIP of failsafe callback */
unsigned long failsafe_callback_eip;
#else
unsigned long event_callback_eip;
unsigned long failsafe_callback_eip;
unsigned long syscall_callback_eip;
#endif
unsigned long vm_assist; /* VMASST_TYPE_* bitmap */
#ifdef __x86_64__
/* Segment base addresses. */
uint64_t fs_base;
uint64_t gs_base_kernel;
uint64_t gs_base_user;
#endif
};
DEFINE_GUEST_HANDLE_STRUCT(vcpu_guest_context);
#endif /* !__ASSEMBLY__ */

/*
* Prefix forces emulation of some non-trapping instructions.
* Currently only CPUID.
*/
#ifdef __ASSEMBLY__
#define XEN_EMULATE_PREFIX .byte 0x0f,0x0b,0x78,0x65,0x6e ;
#define XEN_CPUID XEN_EMULATE_PREFIX cpuid
#else
#define XEN_EMULATE_PREFIX ".byte 0x0f,0x0b,0x78,0x65,0x6e ; "
#define XEN_CPUID XEN_EMULATE_PREFIX "cpuid"
#endif
#include <uapi/asm/xen/interface.h>

#endif /* _ASM_X86_XEN_INTERFACE_H */
98 changes: 1 addition & 97 deletions arch/x86/include/asm/xen/interface_32.h
Original file line number Diff line number Diff line change
@@ -1,102 +1,6 @@
/******************************************************************************
* arch-x86_32.h
*
* Guest OS interface to x86 32-bit Xen.
*
* Copyright (c) 2004, K A Fraser
*/

#ifndef _ASM_X86_XEN_INTERFACE_32_H
#define _ASM_X86_XEN_INTERFACE_32_H


/*
* These flat segments are in the Xen-private section of every GDT. Since these
* are also present in the initial GDT, many OSes will be able to avoid
* installing their own GDT.
*/
#define FLAT_RING1_CS 0xe019 /* GDT index 259 */
#define FLAT_RING1_DS 0xe021 /* GDT index 260 */
#define FLAT_RING1_SS 0xe021 /* GDT index 260 */
#define FLAT_RING3_CS 0xe02b /* GDT index 261 */
#define FLAT_RING3_DS 0xe033 /* GDT index 262 */
#define FLAT_RING3_SS 0xe033 /* GDT index 262 */

#define FLAT_KERNEL_CS FLAT_RING1_CS
#define FLAT_KERNEL_DS FLAT_RING1_DS
#define FLAT_KERNEL_SS FLAT_RING1_SS
#define FLAT_USER_CS FLAT_RING3_CS
#define FLAT_USER_DS FLAT_RING3_DS
#define FLAT_USER_SS FLAT_RING3_SS

/* And the trap vector is... */
#define TRAP_INSTR "int $0x82"

#define __MACH2PHYS_VIRT_START 0xF5800000
#define __MACH2PHYS_VIRT_END 0xF6800000

#define __MACH2PHYS_SHIFT 2

/*
* Virtual addresses beyond this are not modifiable by guest OSes. The
* machine->physical mapping table starts at this address, read-only.
*/
#define __HYPERVISOR_VIRT_START 0xF5800000

#ifndef __ASSEMBLY__

struct cpu_user_regs {
uint32_t ebx;
uint32_t ecx;
uint32_t edx;
uint32_t esi;
uint32_t edi;
uint32_t ebp;
uint32_t eax;
uint16_t error_code; /* private */
uint16_t entry_vector; /* private */
uint32_t eip;
uint16_t cs;
uint8_t saved_upcall_mask;
uint8_t _pad0;
uint32_t eflags; /* eflags.IF == !saved_upcall_mask */
uint32_t esp;
uint16_t ss, _pad1;
uint16_t es, _pad2;
uint16_t ds, _pad3;
uint16_t fs, _pad4;
uint16_t gs, _pad5;
};
DEFINE_GUEST_HANDLE_STRUCT(cpu_user_regs);

typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */

struct arch_vcpu_info {
unsigned long cr2;
unsigned long pad[5]; /* sizeof(struct vcpu_info) == 64 */
};

struct xen_callback {
unsigned long cs;
unsigned long eip;
};
typedef struct xen_callback xen_callback_t;

#define XEN_CALLBACK(__cs, __eip) \
((struct xen_callback){ .cs = (__cs), .eip = (unsigned long)(__eip) })
#endif /* !__ASSEMBLY__ */


/*
* Page-directory addresses above 4GB do not fit into architectural %cr3.
* When accessing %cr3, or equivalent field in vcpu_guest_context, guests
* must use the following accessor macros to pack/unpack valid MFNs.
*
* Note that Xen is using the fact that the pagetable base is always
* page-aligned, and putting the 12 MSB of the address into the 12 LSB
* of cr3.
*/
#define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >> 20))
#define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) << 20))
#include <uapi/asm/xen/interface_32.h>

#endif /* _ASM_X86_XEN_INTERFACE_32_H */
Loading