lkml.org 
[lkml]   [2008]   [Sep]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 1/8] Make <asm-generic/statfs.h> suitable for 64-bit platforms.
    From
    Date
    At the moment, 64-bit platforms (other than Alpha) are all redefining
    things for themselves instead of using <asm-generic/statfs.h>.

    As is ARM, since it has special requirements w.r.t. padding.

    Make <asm-generic/statfs.h> more generic, and they can use it directly.

    Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
    ---
    arch/alpha/include/asm/statfs.h | 4 ++
    include/asm-generic/statfs.h | 65 ++++++++++++++++++++++++++++----------
    2 files changed, 52 insertions(+), 17 deletions(-)

    diff --git a/arch/alpha/include/asm/statfs.h b/arch/alpha/include/asm/statfs.h
    index ad15830..de35cd4 100644
    --- a/arch/alpha/include/asm/statfs.h
    +++ b/arch/alpha/include/asm/statfs.h
    @@ -1,6 +1,10 @@
    #ifndef _ALPHA_STATFS_H
    #define _ALPHA_STATFS_H

    +/* Alpha is the only 64-bit platform with 32-bit statfs. And doesn't
    + even seem to implement statfs64 */
    +#define __statfs_word __u32
    +
    #include <asm-generic/statfs.h>

    #endif
    diff --git a/include/asm-generic/statfs.h b/include/asm-generic/statfs.h
    index 1d01043..6129d68 100644
    --- a/include/asm-generic/statfs.h
    +++ b/include/asm-generic/statfs.h
    @@ -6,33 +6,64 @@
    typedef __kernel_fsid_t fsid_t;
    #endif

    +/*
    + * Most 64-bit platforms use 'long', while most 32-bit platforms use '__u32'.
    + * Yes, they differ in signedness as well as size.
    + * Special cases can override it for themselves -- except for S390x, which
    + * is just a little too special for us. And MIPS, which I'm not touching
    + * with a 10' pole.
    + */
    +#ifndef __statfs_word
    +#if BITS_PER_LONG == 64
    +#define __statfs_word long
    +#else
    +#define __statfs_word __u32
    +#endif
    +#endif
    +
    struct statfs {
    - __u32 f_type;
    - __u32 f_bsize;
    - __u32 f_blocks;
    - __u32 f_bfree;
    - __u32 f_bavail;
    - __u32 f_files;
    - __u32 f_ffree;
    + __statfs_word f_type;
    + __statfs_word f_bsize;
    + __statfs_word f_blocks;
    + __statfs_word f_bfree;
    + __statfs_word f_bavail;
    + __statfs_word f_files;
    + __statfs_word f_ffree;
    __kernel_fsid_t f_fsid;
    - __u32 f_namelen;
    - __u32 f_frsize;
    - __u32 f_spare[5];
    + __statfs_word f_namelen;
    + __statfs_word f_frsize;
    + __statfs_word f_spare[5];
    };

    +/*
    + * ARM needs to avoid the 32-bit padding at the end, for consistency
    + * between EABI and OABI
    + */
    +#ifndef ARCH_PACK_STATFS64
    +#define ARCH_PACK_STATFS64
    +#endif
    +
    struct statfs64 {
    - __u32 f_type;
    - __u32 f_bsize;
    + __statfs_word f_type;
    + __statfs_word f_bsize;
    __u64 f_blocks;
    __u64 f_bfree;
    __u64 f_bavail;
    __u64 f_files;
    __u64 f_ffree;
    __kernel_fsid_t f_fsid;
    - __u32 f_namelen;
    - __u32 f_frsize;
    - __u32 f_spare[5];
    -};
    + __statfs_word f_namelen;
    + __statfs_word f_frsize;
    + __statfs_word f_spare[5];
    +} ARCH_PACK_STATFS64;
    +
    +/*
    + * IA64 and x86_64 need to avoid the 32-bit padding at the end,
    + * to be compatible with the i386 ABI
    + */
    +#ifndef ARCH_PACK_COMPAT_STATFS64
    +#define ARCH_PACK_COMPAT_STATFS64
    +#endif

    struct compat_statfs64 {
    __u32 f_type;
    @@ -46,6 +77,6 @@ struct compat_statfs64 {
    __u32 f_namelen;
    __u32 f_frsize;
    __u32 f_spare[5];
    -};
    +} ARCH_PACK_COMPAT_STATFS64;

    #endif
    --
    1.5.5.1
    --
    David Woodhouse Open Source Technology Centre
    David.Woodhouse@intel.com Intel Corporation




    \
     
     \ /
      Last update: 2008-09-03 11:41    [W:0.038 / U:2.420 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site