|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] Define and use UINT64_C and INT64_C
Makes code and constants work on both 32 and 64 bit.
Signed-off-by: Frediano Ziglio <frediano.ziglio@xxxxxxxxx>
---
xen/arch/x86/include/asm/config.h | 6 +++---
xen/arch/x86/include/asm/mm.h | 12 ++++++------
xen/arch/x86/include/asm/x86_64/page.h | 4 ++--
xen/arch/x86/setup.c | 4 ++--
xen/common/efi/boot.c | 2 +-
xen/crypto/vmac.c | 2 ++
xen/include/crypto/vmac.h | 4 ++++
xen/include/xen/const.h | 9 +++++++++
xen/include/xen/stdint.h | 2 ++
9 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/xen/arch/x86/include/asm/config.h
b/xen/arch/x86/include/asm/config.h
index 1f828bfd52..7f91a478f5 100644
--- a/xen/arch/x86/include/asm/config.h
+++ b/xen/arch/x86/include/asm/config.h
@@ -86,10 +86,10 @@
#include <xen/const.h>
#define PML4_ENTRY_BITS 39
-#define PML4_ENTRY_BYTES (_AC(1,UL) << PML4_ENTRY_BITS)
+#define PML4_ENTRY_BYTES (UINT64_C(1) << PML4_ENTRY_BITS)
#define PML4_ADDR(_slot) \
- (((_AC(_slot, UL) >> 8) * _AC(0xffff000000000000,UL)) | \
- (_AC(_slot, UL) << PML4_ENTRY_BITS))
+ (((UINT64_C(_slot) >> 8) * UINT64_C(0xffff000000000000)) | \
+ (UINT64_C(_slot) << PML4_ENTRY_BITS))
/*
* Memory layout:
diff --git a/xen/arch/x86/include/asm/mm.h b/xen/arch/x86/include/asm/mm.h
index b3853ae734..1077544c76 100644
--- a/xen/arch/x86/include/asm/mm.h
+++ b/xen/arch/x86/include/asm/mm.h
@@ -20,7 +20,7 @@
#define PFN_ORDER(_pfn) ((_pfn)->v.free.order)
#define PG_shift(idx) (BITS_PER_LONG - (idx))
-#define PG_mask(x, idx) (x ## UL << PG_shift(idx))
+#define PG_mask(x, idx) (UINT64_C(x) << PG_shift(idx))
/* The following page types are MUTUALLY EXCLUSIVE. */
#define PGT_none PG_mask(0, 3) /* no special uses of this page */
@@ -59,7 +59,7 @@
/* Count of uses of this frame as its current type. */
#define PGT_count_width PG_shift(9)
-#define PGT_count_mask ((1UL<<PGT_count_width)-1)
+#define PGT_count_mask ((UINT64_C(1)<<PGT_count_width)-1)
/* Are the 'type mask' bits identical? */
#define PGT_type_equal(x, y) (!(((x) ^ (y)) & PGT_type_mask))
@@ -97,7 +97,7 @@
#else
#define PGC_count_width PG_shift(6)
#endif
-#define PGC_count_mask ((1UL<<PGC_count_width)-1)
+#define PGC_count_mask ((UINT64_C(1)<<PGC_count_width)-1)
/*
* Page needs to be scrubbed. Since this bit can only be set on a page that is
@@ -499,9 +499,9 @@ static inline int get_page_and_type(struct page_info *page,
*/
#undef machine_to_phys_mapping
#define machine_to_phys_mapping ((unsigned long *)RDWR_MPT_VIRT_START)
-#define INVALID_M2P_ENTRY (~0UL)
-#define VALID_M2P(_e) (!((_e) & (1UL<<(BITS_PER_LONG-1))))
-#define SHARED_M2P_ENTRY (~0UL - 1UL)
+#define INVALID_M2P_ENTRY (~UINT64_C(0))
+#define VALID_M2P(_e) (!((_e) & (UINT64_C(1)<<(BITS_PER_LONG-1))))
+#define SHARED_M2P_ENTRY (~UINT64_C(0) - UINT64_C(1))
#define SHARED_M2P(_e) ((_e) == SHARED_M2P_ENTRY)
/*
diff --git a/xen/arch/x86/include/asm/x86_64/page.h
b/xen/arch/x86/include/asm/x86_64/page.h
index 201b79f99e..dbf2fd061c 100644
--- a/xen/arch/x86/include/asm/x86_64/page.h
+++ b/xen/arch/x86/include/asm/x86_64/page.h
@@ -4,8 +4,8 @@
#define __XEN_VIRT_START XEN_VIRT_START
-#define VADDR_TOP_BIT (1UL << (VADDR_BITS - 1))
-#define CANONICAL_MASK (~0UL & ~VADDR_MASK)
+#define VADDR_TOP_BIT (UINT64_C(1) << (VADDR_BITS - 1))
+#define CANONICAL_MASK (~UINT64_C(0) & ~VADDR_MASK)
#define is_canonical_address(x) (((long)(x) >> 47) == ((long)(x) >> 63))
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index a6e77c9ed9..6330549e8f 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -1384,9 +1384,9 @@ void asmlinkage __init noreturn __start_xen(unsigned long
mbi_p)
}
if ( e > min(HYPERVISOR_VIRT_END - DIRECTMAP_VIRT_START,
- 1UL << (PAGE_SHIFT + 32)) )
+ UINT64_C(1) << (PAGE_SHIFT + 32)) )
e = min(HYPERVISOR_VIRT_END - DIRECTMAP_VIRT_START,
- 1UL << (PAGE_SHIFT + 32));
+ UINT64_C(1) << (PAGE_SHIFT + 32));
#define reloc_size ((__pa(__2M_rwdata_end) + mask) & ~mask)
/* Is the region suitable for relocating Xen? */
if ( !xen_phys_start && e <= limit )
diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c
index efbec00af9..185a471a04 100644
--- a/xen/common/efi/boot.c
+++ b/xen/common/efi/boot.c
@@ -770,7 +770,7 @@ static bool __init read_file(EFI_FILE_HANDLE dir_handle,
CHAR16 *name,
what = what ?: L"Seek";
else
{
- file->addr = min(1UL << (32 + PAGE_SHIFT),
+ file->addr = min(UINT64_C(1) << (32 + PAGE_SHIFT),
HYPERVISOR_VIRT_END - DIRECTMAP_VIRT_START);
ret = efi_bs->AllocatePages(AllocateMaxAddress, EfiLoaderData,
PFN_UP(size), &file->addr);
diff --git a/xen/crypto/vmac.c b/xen/crypto/vmac.c
index 294dd16a52..d831114f9c 100644
--- a/xen/crypto/vmac.c
+++ b/xen/crypto/vmac.c
@@ -11,7 +11,9 @@
#include <xen/types.h>
#include <xen/lib.h>
#include <crypto/vmac.h>
+#ifndef UINT64_C
#define UINT64_C(x) x##ULL
+#endif
/* end for Xen */
/* Enable code tuned for 64-bit registers; otherwise tuned for 32-bit */
diff --git a/xen/include/crypto/vmac.h b/xen/include/crypto/vmac.h
index 457f3f5dd6..ab8c644e70 100644
--- a/xen/include/crypto/vmac.h
+++ b/xen/include/crypto/vmac.h
@@ -51,12 +51,16 @@
#elif (_MSC_VER) /* Microsoft C does not have stdint.h */
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
+#ifndef UINT64_C
#define UINT64_C(v) v ## UI64
+#endif
#else /* Guess sensibly - may need adaptation */
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
+#ifndef UINT64_C
#define UINT64_C(v) v ## ULL
#endif
+#endif
/* --------------------------------------------------------------------------
* This implementation supports two free AES implementations: OpenSSL's and
diff --git a/xen/include/xen/const.h b/xen/include/xen/const.h
index baf28ef144..e2fb0fd3a4 100644
--- a/xen/include/xen/const.h
+++ b/xen/include/xen/const.h
@@ -15,10 +15,19 @@
#ifdef __ASSEMBLY__
#define _AC(X,Y) X
#define _AT(T,X) X
+#define UINT64_C(X) X
+#define INT64_C(X) X
#else
#define __AC(X,Y) (X##Y)
#define _AC(X,Y) __AC(X,Y)
#define _AT(T,X) ((T)(X))
+#if __SIZEOF_LONG__ >= 8
+#define UINT64_C(X) X ## UL
+#define INT64_C(X) X ## L
+#else
+#define UINT64_C(X) X ## ULL
+#define INT64_C(X) X ## LL
+#endif
#endif
#define BIT(pos, sfx) (_AC(1, sfx) << (pos))
diff --git a/xen/include/xen/stdint.h b/xen/include/xen/stdint.h
index a40165c6ae..e80756c4a4 100644
--- a/xen/include/xen/stdint.h
+++ b/xen/include/xen/stdint.h
@@ -30,4 +30,6 @@ typedef __UINT64_TYPE__ uint64_t;
#endif
+#include <xen/const.h>
+
#endif /* __XEN_STDINT_H__ */
--
2.34.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |