Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

types.h: define __aligned_u64 and expose to userspace

We currently have a kernel internal type called aligned_u64 which aligns
__u64's on 8 bytes boundaries even on systems which would normally align
them on 4 byte boundaries. This patch creates a new type __aligned_u64
which does the same thing but which is exposed to userspace rather than
being kernel internal.

[akpm: merge early as both the net and audit trees want this]

[akpm@linux-foundation.org: enhance the comment describing the reasons for using aligned_u64. Via Andreas and Andi.]
Based-on-patch-by: Andreas Gruenbacher <agruen@suse.de>
Signed-off-by: Eric Paris <eparis@redhat.com>
Cc: Jan Engelhardt <jengelh@medozas.de>
Cc: David Miller <davem@davemloft.net>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Eric Paris and committed by
Linus Torvalds
79b5dc0c e3c6cf61

+14 -1
+14 -1
include/linux/types.h
··· 121 121 typedef __s64 int64_t; 122 122 #endif 123 123 124 - /* this is a special 64bit data type that is 8-byte aligned */ 124 + /* 125 + * aligned_u64 should be used in defining kernel<->userspace ABIs to avoid 126 + * common 32/64-bit compat problems. 127 + * 64-bit values align to 4-byte boundaries on x86_32 (and possibly other 128 + * architectures) and to 8-byte boundaries on 64-bit architetures. The new 129 + * aligned_64 type enforces 8-byte alignment so that structs containing 130 + * aligned_64 values have the same alignment on 32-bit and 64-bit architectures. 131 + * No conversions are necessary between 32-bit user-space and a 64-bit kernel. 132 + */ 125 133 #define aligned_u64 __u64 __attribute__((aligned(8))) 126 134 #define aligned_be64 __be64 __attribute__((aligned(8))) 127 135 #define aligned_le64 __le64 __attribute__((aligned(8))) ··· 185 177 186 178 typedef __u16 __bitwise __sum16; 187 179 typedef __u32 __bitwise __wsum; 180 + 181 + /* this is a special 64bit data type that is 8-byte aligned */ 182 + #define __aligned_u64 __u64 __attribute__((aligned(8))) 183 + #define __aligned_be64 __be64 __attribute__((aligned(8))) 184 + #define __aligned_le64 __le64 __attribute__((aligned(8))) 188 185 189 186 #ifdef __KERNEL__ 190 187 typedef unsigned __bitwise__ gfp_t;