diff options
Diffstat (limited to 'arch/x86/include')
| -rw-r--r-- | arch/x86/include/asm/amd_iommu_types.h | 3 | ||||
| -rw-r--r-- | arch/x86/include/asm/fixmap.h | 6 | ||||
| -rw-r--r-- | arch/x86/include/asm/hw_irq.h | 1 | ||||
| -rw-r--r-- | arch/x86/include/asm/io.h | 1 | ||||
| -rw-r--r-- | arch/x86/include/asm/lguest_hcall.h | 29 | ||||
| -rw-r--r-- | arch/x86/include/asm/msr-index.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/pgtable_32.h | 1 | 
7 files changed, 33 insertions, 10 deletions
diff --git a/arch/x86/include/asm/amd_iommu_types.h b/arch/x86/include/asm/amd_iommu_types.h index ba19ad4c47d..86a0ff0aeac 100644 --- a/arch/x86/include/asm/amd_iommu_types.h +++ b/arch/x86/include/asm/amd_iommu_types.h @@ -21,6 +21,7 @@  #define _ASM_X86_AMD_IOMMU_TYPES_H  #include <linux/types.h> +#include <linux/mutex.h>  #include <linux/list.h>  #include <linux/spinlock.h> @@ -140,6 +141,7 @@  /* constants to configure the command buffer */  #define CMD_BUFFER_SIZE    8192 +#define CMD_BUFFER_UNINITIALIZED 1  #define CMD_BUFFER_ENTRIES 512  #define MMIO_CMD_SIZE_SHIFT 56  #define MMIO_CMD_SIZE_512 (0x9ULL << MMIO_CMD_SIZE_SHIFT) @@ -237,6 +239,7 @@ struct protection_domain {  	struct list_head list;  /* for list of all protection domains */  	struct list_head dev_list; /* List of all devices in this domain */  	spinlock_t lock;	/* mostly used to lock the page table*/ +	struct mutex api_lock;	/* protect page tables in the iommu-api path */  	u16 id;			/* the domain id written to the device table */  	int mode;		/* paging mode (0-6 levels) */  	u64 *pt_root;		/* page table root pointer */ diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h index 635f03bb499..d07b44f7d1d 100644 --- a/arch/x86/include/asm/fixmap.h +++ b/arch/x86/include/asm/fixmap.h @@ -82,6 +82,9 @@ enum fixed_addresses {  #endif  	FIX_DBGP_BASE,  	FIX_EARLYCON_MEM_BASE, +#ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT +	FIX_OHCI1394_BASE, +#endif  #ifdef CONFIG_X86_LOCAL_APIC  	FIX_APIC_BASE,	/* local (CPU) APIC) -- required for SMP or not */  #endif @@ -132,9 +135,6 @@ enum fixed_addresses {  	   (__end_of_permanent_fixed_addresses & (TOTAL_FIX_BTMAPS - 1))  	 : __end_of_permanent_fixed_addresses,  	FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1, -#ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT -	FIX_OHCI1394_BASE, -#endif  #ifdef CONFIG_X86_32  	FIX_WP_TEST,  #endif diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h index a929c9ede33..46c0fe05f23 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h @@ -133,6 +133,7 @@ extern void (*__initconst interrupt[NR_VECTORS-FIRST_EXTERNAL_VECTOR])(void);  typedef int vector_irq_t[NR_VECTORS];  DECLARE_PER_CPU(vector_irq_t, vector_irq); +extern void setup_vector_irq(int cpu);  #ifdef CONFIG_X86_IO_APIC  extern void lock_vector_lock(void); diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h index a1dcfa3ab17..30a3e977612 100644 --- a/arch/x86/include/asm/io.h +++ b/arch/x86/include/asm/io.h @@ -347,6 +347,7 @@ extern void __iomem *early_ioremap(resource_size_t phys_addr,  extern void __iomem *early_memremap(resource_size_t phys_addr,  				    unsigned long size);  extern void early_iounmap(void __iomem *addr, unsigned long size); +extern void fixup_early_ioremap(void);  #define IO_SPACE_LIMIT 0xffff diff --git a/arch/x86/include/asm/lguest_hcall.h b/arch/x86/include/asm/lguest_hcall.h index ba0eed8aa1a..b60f2924c41 100644 --- a/arch/x86/include/asm/lguest_hcall.h +++ b/arch/x86/include/asm/lguest_hcall.h @@ -28,22 +28,39 @@  #ifndef __ASSEMBLY__  #include <asm/hw_irq.h> -#include <asm/kvm_para.h>  /*G:030   * But first, how does our Guest contact the Host to ask for privileged   * operations?  There are two ways: the direct way is to make a "hypercall",   * to make requests of the Host Itself.   * - * We use the KVM hypercall mechanism, though completely different hypercall - * numbers. Seventeen hypercalls are available: the hypercall number is put in - * the %eax register, and the arguments (when required) are placed in %ebx, - * %ecx, %edx and %esi.  If a return value makes sense, it's returned in %eax. + * Our hypercall mechanism uses the highest unused trap code (traps 32 and + * above are used by real hardware interrupts).  Seventeen hypercalls are + * available: the hypercall number is put in the %eax register, and the + * arguments (when required) are placed in %ebx, %ecx, %edx and %esi. + * If a return value makes sense, it's returned in %eax.   *   * Grossly invalid calls result in Sudden Death at the hands of the vengeful   * Host, rather than returning failure.  This reflects Winston Churchill's   * definition of a gentleman: "someone who is only rude intentionally". -:*/ + */ +static inline unsigned long +hcall(unsigned long call, +      unsigned long arg1, unsigned long arg2, unsigned long arg3, +      unsigned long arg4) +{ +	/* "int" is the Intel instruction to trigger a trap. */ +	asm volatile("int $" __stringify(LGUEST_TRAP_ENTRY) +		     /* The call in %eax (aka "a") might be overwritten */ +		     : "=a"(call) +		       /* The arguments are in %eax, %ebx, %ecx, %edx & %esi */ +		     : "a"(call), "b"(arg1), "c"(arg2), "d"(arg3), "S"(arg4) +		       /* "memory" means this might write somewhere in memory. +			* This isn't true for all calls, but it's safe to tell +			* gcc that it might happen so it doesn't get clever. */ +		     : "memory"); +	return call; +}  /* Can't use our min() macro here: needs to be a constant */  #define LGUEST_IRQS (NR_IRQS < 32 ? NR_IRQS: 32) diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h index 1cd58cdbc03..4604e6a54d3 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h @@ -105,6 +105,8 @@  #define MSR_AMD64_PATCH_LEVEL		0x0000008b  #define MSR_AMD64_NB_CFG		0xc001001f  #define MSR_AMD64_PATCH_LOADER		0xc0010020 +#define MSR_AMD64_OSVW_ID_LENGTH	0xc0010140 +#define MSR_AMD64_OSVW_STATUS		0xc0010141  #define MSR_AMD64_IBSFETCHCTL		0xc0011030  #define MSR_AMD64_IBSFETCHLINAD		0xc0011031  #define MSR_AMD64_IBSFETCHPHYSAD	0xc0011032 diff --git a/arch/x86/include/asm/pgtable_32.h b/arch/x86/include/asm/pgtable_32.h index 47339a1ac7b..2984a25ff38 100644 --- a/arch/x86/include/asm/pgtable_32.h +++ b/arch/x86/include/asm/pgtable_32.h @@ -19,7 +19,6 @@  #include <asm/paravirt.h>  #include <linux/bitops.h> -#include <linux/slab.h>  #include <linux/list.h>  #include <linux/spinlock.h>  |