cregit-Linux how code gets into the kernel

Release 4.7 include/linux/unaligned/generic.h

#ifndef _LINUX_UNALIGNED_GENERIC_H

#define _LINUX_UNALIGNED_GENERIC_H

/*
 * Cause a link-time error if we try an unaligned access other than
 * 1,2,4 or 8 bytes long
 */
extern void __bad_unaligned_access_size(void);


#define __get_unaligned_le(ptr) ((__force typeof(*(ptr)))({                     \
        __builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr),                      \
        __builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_le16((ptr)),   \
        __builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_le32((ptr)),   \
        __builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_le64((ptr)),   \
        __bad_unaligned_access_size()))));                                      \
        }))


#define __get_unaligned_be(ptr) ((__force typeof(*(ptr)))({                     \
        __builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr),                      \
        __builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_be16((ptr)),   \
        __builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_be32((ptr)),   \
        __builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_be64((ptr)),   \
        __bad_unaligned_access_size()))));                                      \
        }))


#define __put_unaligned_le(val, ptr) ({                                      \
        void *__gu_p = (ptr);                                           \
        switch (sizeof(*(ptr))) {                                       \
        case 1:                                                         \
                *(u8 *)__gu_p = (__force u8)(val);                      \
                break;                                                  \
        case 2:                                                         \
                put_unaligned_le16((__force u16)(val), __gu_p);         \
                break;                                                  \
        case 4:                                                         \
                put_unaligned_le32((__force u32)(val), __gu_p);         \
                break;                                                  \
        case 8:                                                         \
                put_unaligned_le64((__force u64)(val), __gu_p);         \
                break;                                                  \
        default:                                                        \
                __bad_unaligned_access_size();                          \
                break;                                                  \
        }                                                               \
        (void)0; })


#define __put_unaligned_be(val, ptr) ({                                      \
        void *__gu_p = (ptr);                                           \
        switch (sizeof(*(ptr))) {                                       \
        case 1:                                                         \
                *(u8 *)__gu_p = (__force u8)(val);                      \
                break;                                                  \
        case 2:                                                         \
                put_unaligned_be16((__force u16)(val), __gu_p);         \
                break;                                                  \
        case 4:                                                         \
                put_unaligned_be32((__force u32)(val), __gu_p);         \
                break;                                                  \
        case 8:                                                         \
                put_unaligned_be64((__force u64)(val), __gu_p);         \
                break;                                                  \
        default:                                                        \
                __bad_unaligned_access_size();                          \
                break;                                                  \
        }                                                               \
        (void)0; })

#endif /* _LINUX_UNALIGNED_GENERIC_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
harvey harrisonharvey harrison49100.00%1100.00%
Total49100.00%1100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}