Adds ALIGN and PAGE_ALIGN (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 10 Feb 2015 17:24:04 +0000 (12:24 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sun, 1 Mar 2015 14:36:17 +0000 (09:36 -0500)
Slightly modified versions of Linux's macros, to minimize pointer issues.

ALIGN can't be exposed to userspace.  There is another one of those floating
around.  The reason we had things in common.h was that we wanted to use them in
user/ without writing them down twice.  As we add items, we're more likely to
run into a conflict with glibc.  Maybe the whole thing needs reworked.

Technically, this changed a kernel header, though it should only affect the
kernel.

kern/include/ros/common.h
kern/include/sys/types.h

index 23ad913..35e1ccd 100644 (file)
@@ -34,13 +34,6 @@ typedef unsigned long uintreg_t;
 #define PiB    1125899906842624ull
 #define EiB    1152921504606846976ull
 
-/* Test for alignment, e.g. 2^6 */
-#define ALIGNED(p, a)  (!(((uintptr_t)(p)) & ((a)-1)))
-/* Aligns x up to the mask, e.g. (2^6 - 1) */
-#define __ALIGN_MASK(x, mask)       (((x) + (mask)) & ~(mask))
-/* Will return false for 0.  Debatable, based on what you want. */
-#define IS_PWR2(x) ((x) && !((x) & (x - 1)))
-
 #define ARRAY_SIZE(x) (sizeof((x))/sizeof((x)[0]))
 
 #define CHECK_FLAG(flags,bit)   ((flags) & (1 << (bit)))
@@ -73,6 +66,18 @@ typedef unsigned long uintreg_t;
        typeof(_b) __b = (_b);                                  \
        __a >= __b ? __a : __b;                                 \
 })
+
+/* Other kernel-only includes */
+
+/* Test for alignment, e.g. 2^6 */
+#define ALIGNED(p, a)  (!(((uintptr_t)(p)) & ((a)-1)))
+/* Aligns x up to the mask, e.g. (2^6 - 1) (round up if any mask bits are set)*/
+#define __ALIGN_MASK(x, mask) (((uintptr_t)(x) + (mask)) & ~(mask))
+/* Aligns x up to the alignment, e.g. 2^6. */
+#define ALIGN(x, a) ((typeof(x)) __ALIGN_MASK(x, (a) - 1))
+/* Will return false for 0.  Debatable, based on what you want. */
+#define IS_PWR2(x) ((x) && !((x) & (x - 1)))
+
 #endif
 
 /* Rounding operations (efficient when n is a power of 2)
index feab432..271ab83 100644 (file)
@@ -7,6 +7,8 @@
 #include <ros/common.h>
 #include <arch/types.h>
 
+#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE)
+
 typedef uint64_t __dev_t;
 typedef uint64_t __ino64_t;
 typedef uint32_t __mode_t;