Skip to content

Commit

Permalink
Introduce compat_u64 and compat_s64 types
Browse files Browse the repository at this point in the history
One common problem with 32 bit system call and ioctl emulation is the
different alignment rules between i386 and 64 bit machines.  A number of
drivers work around this by marking the compat structures as
'attribute((packed))', which is not the right solution because it breaks
all the non-x86 architectures that want to use the same compat code.

Hopefully, this patch improves the situation, it introduces two new types,
compat_u64 and compat_s64.  These are defined on all architectures to have
the same size and alignment as the 32 bit version of u64 and s64.

Signed-off-by: Arnd Bergmann <[email protected]>
Acked-by: David S. Miller <[email protected]>
Cc: David Woodhouse <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Benjamin Herrenschmidt <[email protected]>
Cc: Vasily Tarasov <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
arndb authored and Linus Torvalds committed Jul 16, 2007
1 parent 6d9525b commit 4b77758
Show file tree
Hide file tree
Showing 7 changed files with 14 additions and 0 deletions.
2 changes: 2 additions & 0 deletions include/asm-ia64/compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@ typedef s32 compat_timer_t;

typedef s32 compat_int_t;
typedef s32 compat_long_t;
typedef s64 __attribute__((aligned(4))) compat_s64;
typedef u32 compat_uint_t;
typedef u32 compat_ulong_t;
typedef u64 __attribute__((aligned(4))) compat_u64;

struct compat_timespec {
compat_time_t tv_sec;
Expand Down
2 changes: 2 additions & 0 deletions include/asm-mips/compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@ typedef s32 compat_key_t;

typedef s32 compat_int_t;
typedef s32 compat_long_t;
typedef s64 compat_s64;
typedef u32 compat_uint_t;
typedef u32 compat_ulong_t;
typedef u64 compat_u64;

struct compat_timespec {
compat_time_t tv_sec;
Expand Down
2 changes: 2 additions & 0 deletions include/asm-parisc/compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@ typedef s32 compat_timer_t;

typedef s32 compat_int_t;
typedef s32 compat_long_t;
typedef s64 compat_s64;
typedef u32 compat_uint_t;
typedef u32 compat_ulong_t;
typedef u64 compat_u64;

struct compat_timespec {
compat_time_t tv_sec;
Expand Down
2 changes: 2 additions & 0 deletions include/asm-powerpc/compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@ typedef s32 compat_timer_t;

typedef s32 compat_int_t;
typedef s32 compat_long_t;
typedef s64 compat_s64;
typedef u32 compat_uint_t;
typedef u32 compat_ulong_t;
typedef u64 compat_u64;

struct compat_timespec {
compat_time_t tv_sec;
Expand Down
2 changes: 2 additions & 0 deletions include/asm-s390/compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,10 @@ typedef s32 compat_timer_t;

typedef s32 compat_int_t;
typedef s32 compat_long_t;
typedef s64 compat_s64;
typedef u32 compat_uint_t;
typedef u32 compat_ulong_t;
typedef u64 compat_u64;

struct compat_timespec {
compat_time_t tv_sec;
Expand Down
2 changes: 2 additions & 0 deletions include/asm-sparc64/compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@ typedef s32 compat_timer_t;

typedef s32 compat_int_t;
typedef s32 compat_long_t;
typedef s64 compat_s64;
typedef u32 compat_uint_t;
typedef u32 compat_ulong_t;
typedef u64 compat_u64;

struct compat_timespec {
compat_time_t tv_sec;
Expand Down
2 changes: 2 additions & 0 deletions include/asm-x86_64/compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@ typedef s32 compat_key_t;

typedef s32 compat_int_t;
typedef s32 compat_long_t;
typedef s64 __attribute__((aligned(4))) compat_s64;
typedef u32 compat_uint_t;
typedef u32 compat_ulong_t;
typedef u64 __attribute__((aligned(4))) compat_u64;

struct compat_timespec {
compat_time_t tv_sec;
Expand Down

0 comments on commit 4b77758

Please sign in to comment.