[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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.