diff options
author | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2012-09-14 09:34:43 -0400 |
---|---|---|
committer | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2012-09-14 09:34:43 -0400 |
commit | 256f631f1f7e7bedc882510679ad4473a2274708 (patch) | |
tree | 16deef95ae59e6fdf63fa3707cf07ac4df1d4d27 /arch | |
parent | 2e01f16601d8924b12b1acf1cdc49a0d1cc1cfb2 (diff) |
xen/arm: Introduce xen_ulong_t for unsigned long
All the original Xen headers have xen_ulong_t as unsigned long type, however
when they have been imported in Linux, xen_ulong_t has been replaced with
unsigned long. That might work for x86 and ia64 but it does not for arm.
Bring back xen_ulong_t and let each architecture define xen_ulong_t as they
see fit.
Also explicitly size pointers (__DEFINE_GUEST_HANDLE) to 64 bit.
Changes in v3:
- remove the incorrect changes to multicall_entry;
- remove the change to apic_physbase.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/include/asm/xen/interface.h | 8 | ||||
-rw-r--r-- | arch/ia64/include/asm/xen/interface.h | 1 | ||||
-rw-r--r-- | arch/x86/include/asm/xen/interface.h | 1 |
3 files changed, 8 insertions, 2 deletions
diff --git a/arch/arm/include/asm/xen/interface.h b/arch/arm/include/asm/xen/interface.h index 74c72b5083a6..ae05e56dd17d 100644 --- a/arch/arm/include/asm/xen/interface.h +++ b/arch/arm/include/asm/xen/interface.h | |||
@@ -9,8 +9,11 @@ | |||
9 | 9 | ||
10 | #include <linux/types.h> | 10 | #include <linux/types.h> |
11 | 11 | ||
12 | #define uint64_aligned_t uint64_t __attribute__((aligned(8))) | ||
13 | |||
12 | #define __DEFINE_GUEST_HANDLE(name, type) \ | 14 | #define __DEFINE_GUEST_HANDLE(name, type) \ |
13 | typedef type * __guest_handle_ ## name | 15 | typedef struct { union { type *p; uint64_aligned_t q; }; } \ |
16 | __guest_handle_ ## name | ||
14 | 17 | ||
15 | #define DEFINE_GUEST_HANDLE_STRUCT(name) \ | 18 | #define DEFINE_GUEST_HANDLE_STRUCT(name) \ |
16 | __DEFINE_GUEST_HANDLE(name, struct name) | 19 | __DEFINE_GUEST_HANDLE(name, struct name) |
@@ -21,13 +24,14 @@ | |||
21 | do { \ | 24 | do { \ |
22 | if (sizeof(hnd) == 8) \ | 25 | if (sizeof(hnd) == 8) \ |
23 | *(uint64_t *)&(hnd) = 0; \ | 26 | *(uint64_t *)&(hnd) = 0; \ |
24 | (hnd) = val; \ | 27 | (hnd).p = val; \ |
25 | } while (0) | 28 | } while (0) |
26 | 29 | ||
27 | #ifndef __ASSEMBLY__ | 30 | #ifndef __ASSEMBLY__ |
28 | /* Explicitly size integers that represent pfns in the interface with | 31 | /* Explicitly size integers that represent pfns in the interface with |
29 | * Xen so that we can have one ABI that works for 32 and 64 bit guests. */ | 32 | * Xen so that we can have one ABI that works for 32 and 64 bit guests. */ |
30 | typedef uint64_t xen_pfn_t; | 33 | typedef uint64_t xen_pfn_t; |
34 | typedef uint64_t xen_ulong_t; | ||
31 | /* Guest handles for primitive C types. */ | 35 | /* Guest handles for primitive C types. */ |
32 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); | 36 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); |
33 | __DEFINE_GUEST_HANDLE(uint, unsigned int); | 37 | __DEFINE_GUEST_HANDLE(uint, unsigned int); |
diff --git a/arch/ia64/include/asm/xen/interface.h b/arch/ia64/include/asm/xen/interface.h index 3d52a5bbd857..e88c5de27410 100644 --- a/arch/ia64/include/asm/xen/interface.h +++ b/arch/ia64/include/asm/xen/interface.h | |||
@@ -71,6 +71,7 @@ | |||
71 | * with Xen so that we could have one ABI that works for 32 and 64 bit | 71 | * with Xen so that we could have one ABI that works for 32 and 64 bit |
72 | * guests. */ | 72 | * guests. */ |
73 | typedef unsigned long xen_pfn_t; | 73 | typedef unsigned long xen_pfn_t; |
74 | typedef unsigned long xen_ulong_t; | ||
74 | /* Guest handles for primitive C types. */ | 75 | /* Guest handles for primitive C types. */ |
75 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); | 76 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); |
76 | __DEFINE_GUEST_HANDLE(uint, unsigned int); | 77 | __DEFINE_GUEST_HANDLE(uint, unsigned int); |
diff --git a/arch/x86/include/asm/xen/interface.h b/arch/x86/include/asm/xen/interface.h index 555f94d3637b..28fc6211a79a 100644 --- a/arch/x86/include/asm/xen/interface.h +++ b/arch/x86/include/asm/xen/interface.h | |||
@@ -51,6 +51,7 @@ | |||
51 | * with Xen so that on ARM we can have one ABI that works for 32 and 64 | 51 | * with Xen so that on ARM we can have one ABI that works for 32 and 64 |
52 | * bit guests. */ | 52 | * bit guests. */ |
53 | typedef unsigned long xen_pfn_t; | 53 | typedef unsigned long xen_pfn_t; |
54 | typedef unsigned long xen_ulong_t; | ||
54 | /* Guest handles for primitive C types. */ | 55 | /* Guest handles for primitive C types. */ |
55 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); | 56 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); |
56 | __DEFINE_GUEST_HANDLE(uint, unsigned int); | 57 | __DEFINE_GUEST_HANDLE(uint, unsigned int); |