diff options
| author | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2012-08-22 17:20:14 +0100 | 
|---|---|---|
| committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2012-08-23 10:18:17 -0400 | 
| commit | bd3f79b71de0410352ab506496a467fcb0620912 (patch) | |
| tree | 329d52717cb1b04702af154db05eb766c04473cc | |
| parent | a8636c0b2e57d4f31f71aa306b1ee701db3f3c85 (diff) | |
| download | olio-linux-3.10-bd3f79b71de0410352ab506496a467fcb0620912.tar.xz olio-linux-3.10-bd3f79b71de0410352ab506496a467fcb0620912.zip  | |
xen: Introduce xen_pfn_t for pfn and mfn types
All the original Xen headers have xen_pfn_t as mfn and pfn type, however
when they have been imported in Linux, xen_pfn_t has been replaced with
unsigned long. That might work for x86 and ia64 but it does not for arm.
Bring back xen_pfn_t and let each architecture define xen_pfn_t as they
see fit.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
| -rw-r--r-- | arch/ia64/include/asm/xen/interface.h | 5 | ||||
| -rw-r--r-- | arch/x86/include/asm/xen/interface.h | 5 | ||||
| -rw-r--r-- | include/xen/interface/grant_table.h | 4 | ||||
| -rw-r--r-- | include/xen/interface/memory.h | 6 | ||||
| -rw-r--r-- | include/xen/interface/platform.h | 4 | ||||
| -rw-r--r-- | include/xen/interface/xen.h | 6 | ||||
| -rw-r--r-- | include/xen/privcmd.h | 2 | 
7 files changed, 19 insertions, 13 deletions
diff --git a/arch/ia64/include/asm/xen/interface.h b/arch/ia64/include/asm/xen/interface.h index ee9cad6e749..3d52a5bbd85 100644 --- a/arch/ia64/include/asm/xen/interface.h +++ b/arch/ia64/include/asm/xen/interface.h @@ -67,6 +67,10 @@  #define set_xen_guest_handle(hnd, val)	do { (hnd).p = val; } while (0)  #ifndef __ASSEMBLY__ +/* Explicitly size integers that represent pfns in the public interface + * with Xen so that we could have one ABI that works for 32 and 64 bit + * guests. */ +typedef unsigned long xen_pfn_t;  /* Guest handles for primitive C types. */  __DEFINE_GUEST_HANDLE(uchar, unsigned char);  __DEFINE_GUEST_HANDLE(uint, unsigned int); @@ -79,7 +83,6 @@ DEFINE_GUEST_HANDLE(void);  DEFINE_GUEST_HANDLE(uint64_t);  DEFINE_GUEST_HANDLE(uint32_t); -typedef unsigned long xen_pfn_t;  DEFINE_GUEST_HANDLE(xen_pfn_t);  #define PRI_xen_pfn	"lx"  #endif diff --git a/arch/x86/include/asm/xen/interface.h b/arch/x86/include/asm/xen/interface.h index a93db16e958..555f94d3637 100644 --- a/arch/x86/include/asm/xen/interface.h +++ b/arch/x86/include/asm/xen/interface.h @@ -47,6 +47,10 @@  #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;  /* Guest handles for primitive C types. */  __DEFINE_GUEST_HANDLE(uchar, unsigned char);  __DEFINE_GUEST_HANDLE(uint,  unsigned int); @@ -57,6 +61,7 @@ DEFINE_GUEST_HANDLE(long);  DEFINE_GUEST_HANDLE(void);  DEFINE_GUEST_HANDLE(uint64_t);  DEFINE_GUEST_HANDLE(uint32_t); +DEFINE_GUEST_HANDLE(xen_pfn_t);  #endif  #ifndef HYPERVISOR_VIRT_START diff --git a/include/xen/interface/grant_table.h b/include/xen/interface/grant_table.h index a17d84433e6..7da811bdd55 100644 --- a/include/xen/interface/grant_table.h +++ b/include/xen/interface/grant_table.h @@ -338,7 +338,7 @@ DEFINE_GUEST_HANDLE_STRUCT(gnttab_dump_table);  #define GNTTABOP_transfer                4  struct gnttab_transfer {      /* IN parameters. */ -    unsigned long mfn; +    xen_pfn_t mfn;      domid_t       domid;      grant_ref_t   ref;      /* OUT parameters. */ @@ -375,7 +375,7 @@ struct gnttab_copy {  	struct {  		union {  			grant_ref_t ref; -			unsigned long   gmfn; +			xen_pfn_t   gmfn;  		} u;  		domid_t  domid;  		uint16_t offset; diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h index 8d4efc1cc64..d8e33a93ea4 100644 --- a/include/xen/interface/memory.h +++ b/include/xen/interface/memory.h @@ -31,7 +31,7 @@ struct xen_memory_reservation {       *   OUT: GMFN bases of extents that were allocated       *   (NB. This command also updates the mach_to_phys translation table)       */ -    GUEST_HANDLE(ulong) extent_start; +    GUEST_HANDLE(xen_pfn_t) extent_start;      /* Number of extents, and size/alignment of each (2^extent_order pages). */      unsigned long  nr_extents; @@ -130,7 +130,7 @@ struct xen_machphys_mfn_list {       * any large discontiguities in the machine address space, 2MB gaps in       * the machphys table will be represented by an MFN base of zero.       */ -    GUEST_HANDLE(ulong) extent_start; +    GUEST_HANDLE(xen_pfn_t) extent_start;      /*       * Number of extents written to the above array. This will be smaller @@ -175,7 +175,7 @@ struct xen_add_to_physmap {      unsigned long idx;      /* GPFN where the source mapping page should appear. */ -    unsigned long gpfn; +    xen_pfn_t gpfn;  };  DEFINE_GUEST_HANDLE_STRUCT(xen_add_to_physmap); diff --git a/include/xen/interface/platform.h b/include/xen/interface/platform.h index 486653f0dd8..0bea47027fa 100644 --- a/include/xen/interface/platform.h +++ b/include/xen/interface/platform.h @@ -54,7 +54,7 @@ DEFINE_GUEST_HANDLE_STRUCT(xenpf_settime_t);  #define XENPF_add_memtype         31  struct xenpf_add_memtype {  	/* IN variables. */ -	unsigned long mfn; +	xen_pfn_t mfn;  	uint64_t nr_mfns;  	uint32_t type;  	/* OUT variables. */ @@ -84,7 +84,7 @@ struct xenpf_read_memtype {  	/* IN variables. */  	uint32_t reg;  	/* OUT variables. */ -	unsigned long mfn; +	xen_pfn_t mfn;  	uint64_t nr_mfns;  	uint32_t type;  }; diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h index 3871e475368..42834a36d34 100644 --- a/include/xen/interface/xen.h +++ b/include/xen/interface/xen.h @@ -188,7 +188,7 @@ struct mmuext_op {  	unsigned int cmd;  	union {  		/* [UN]PIN_TABLE, NEW_BASEPTR, NEW_USER_BASEPTR */ -		unsigned long mfn; +		xen_pfn_t mfn;  		/* INVLPG_LOCAL, INVLPG_ALL, SET_LDT */  		unsigned long linear_addr;  	} arg1; @@ -428,11 +428,11 @@ struct start_info {  	unsigned long nr_pages;     /* Total pages allocated to this domain.  */  	unsigned long shared_info;  /* MACHINE address of shared info struct. */  	uint32_t flags;             /* SIF_xxx flags.                         */ -	unsigned long store_mfn;    /* MACHINE page number of shared page.    */ +	xen_pfn_t store_mfn;        /* MACHINE page number of shared page.    */  	uint32_t store_evtchn;      /* Event channel for store communication. */  	union {  		struct { -			unsigned long mfn;  /* MACHINE page number of console page.   */ +			xen_pfn_t mfn;      /* MACHINE page number of console page.   */  			uint32_t  evtchn;   /* Event channel for console page.        */  		} domU;  		struct { diff --git a/include/xen/privcmd.h b/include/xen/privcmd.h index 4d588814510..45c1aa14b83 100644 --- a/include/xen/privcmd.h +++ b/include/xen/privcmd.h @@ -37,8 +37,6 @@  #include <linux/compiler.h>  #include <xen/interface/xen.h> -typedef unsigned long xen_pfn_t; -  struct privcmd_hypercall {  	__u64 op;  	__u64 arg[5];  |