1
0
This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
TP-Link_Archer-XR500v/EN7526G_3.18Kernel_SDK/linux-3.18.21/mt7570.i
2024-07-22 01:58:46 -03:00

50930 lines
1.6 MiB
Executable File

# 1 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "././include/linux/kconfig.h" 1
# 1 "include/generated/autoconf.h" 1
# 5 "././include/linux/kconfig.h" 2
# 1 "<command-line>" 2
# 1 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
# 1 "include/linux/kernel.h" 1
# 1 "/opt/trendchip/mips-linux-uclibc-4.9.3/usr/lib/gcc/mips-buildroot-linux-uclibc/4.9.3/include/stdarg.h" 1 3 4
# 40 "/opt/trendchip/mips-linux-uclibc-4.9.3/usr/lib/gcc/mips-buildroot-linux-uclibc/4.9.3/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 98 "/opt/trendchip/mips-linux-uclibc-4.9.3/usr/lib/gcc/mips-buildroot-linux-uclibc/4.9.3/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 6 "include/linux/kernel.h" 2
# 1 "include/linux/linkage.h" 1
# 1 "include/linux/compiler.h" 1
# 54 "include/linux/compiler.h"
# 1 "include/linux/compiler-gcc.h" 1
# 106 "include/linux/compiler-gcc.h"
# 1 "include/linux/compiler-gcc4.h" 1
# 107 "include/linux/compiler-gcc.h" 2
# 55 "include/linux/compiler.h" 2
# 79 "include/linux/compiler.h"
struct ftrace_branch_data {
const char *func;
const char *file;
unsigned line;
union {
struct {
unsigned long correct;
unsigned long incorrect;
};
struct {
unsigned long miss;
unsigned long hit;
};
unsigned long miss_hit[2];
};
};
# 189 "include/linux/compiler.h"
# 1 "include/uapi/linux/types.h" 1
# 1 "./arch/mips/include/asm/types.h" 1
# 14 "./arch/mips/include/asm/types.h"
# 1 "include/asm-generic/int-ll64.h" 1
# 10 "include/asm-generic/int-ll64.h"
# 1 "include/uapi/asm-generic/int-ll64.h" 1
# 11 "include/uapi/asm-generic/int-ll64.h"
# 1 "./arch/mips/include/uapi/asm/bitsperlong.h" 1
# 1 "include/asm-generic/bitsperlong.h" 1
# 1 "include/uapi/asm-generic/bitsperlong.h" 1
# 5 "include/asm-generic/bitsperlong.h" 2
# 7 "./arch/mips/include/uapi/asm/bitsperlong.h" 2
# 12 "include/uapi/asm-generic/int-ll64.h" 2
typedef __signed__ char __s8;
typedef unsigned char __u8;
typedef __signed__ short __s16;
typedef unsigned short __u16;
typedef __signed__ int __s32;
typedef unsigned int __u32;
__extension__ typedef __signed__ long long __s64;
__extension__ typedef unsigned long long __u64;
# 11 "include/asm-generic/int-ll64.h" 2
typedef signed char s8;
typedef unsigned char u8;
typedef signed short s16;
typedef unsigned short u16;
typedef signed int s32;
typedef unsigned int u32;
typedef signed long long s64;
typedef unsigned long long u64;
# 15 "./arch/mips/include/asm/types.h" 2
# 1 "./arch/mips/include/uapi/asm/types.h" 1
# 16 "./arch/mips/include/asm/types.h" 2
# 28 "./arch/mips/include/asm/types.h"
typedef unsigned long phys_t;
# 5 "include/uapi/linux/types.h" 2
# 13 "include/uapi/linux/types.h"
# 1 "./include/uapi/linux/posix_types.h" 1
# 1 "include/linux/stddef.h" 1
# 1 "include/uapi/linux/stddef.h" 1
# 1 "include/linux/compiler.h" 1
# 1 "include/uapi/linux/stddef.h" 2
# 5 "include/linux/stddef.h" 2
enum {
false = 0,
true = 1
};
# 5 "./include/uapi/linux/posix_types.h" 2
# 24 "./include/uapi/linux/posix_types.h"
typedef struct {
unsigned long fds_bits[1024 / (8 * sizeof(long))];
} __kernel_fd_set;
typedef void (*__kernel_sighandler_t)(int);
typedef int __kernel_key_t;
typedef int __kernel_mqd_t;
# 1 "./arch/mips/include/uapi/asm/posix_types.h" 1
# 12 "./arch/mips/include/uapi/asm/posix_types.h"
# 1 "./arch/mips/include/uapi/asm/sgidefs.h" 1
# 13 "./arch/mips/include/uapi/asm/posix_types.h" 2
typedef long __kernel_daddr_t;
typedef struct {
long val[2];
} __kernel_fsid_t;
# 1 "./include/uapi/asm-generic/posix_types.h" 1
# 14 "./include/uapi/asm-generic/posix_types.h"
typedef long __kernel_long_t;
typedef unsigned long __kernel_ulong_t;
typedef __kernel_ulong_t __kernel_ino_t;
typedef unsigned int __kernel_mode_t;
typedef int __kernel_pid_t;
typedef int __kernel_ipc_pid_t;
typedef unsigned int __kernel_uid_t;
typedef unsigned int __kernel_gid_t;
typedef __kernel_long_t __kernel_suseconds_t;
typedef unsigned int __kernel_uid32_t;
typedef unsigned int __kernel_gid32_t;
typedef __kernel_uid_t __kernel_old_uid_t;
typedef __kernel_gid_t __kernel_old_gid_t;
typedef unsigned int __kernel_old_dev_t;
# 67 "./include/uapi/asm-generic/posix_types.h"
typedef unsigned int __kernel_size_t;
typedef int __kernel_ssize_t;
typedef int __kernel_ptrdiff_t;
# 86 "./include/uapi/asm-generic/posix_types.h"
typedef __kernel_long_t __kernel_off_t;
typedef long long __kernel_loff_t;
typedef __kernel_long_t __kernel_time_t;
typedef __kernel_long_t __kernel_clock_t;
typedef int __kernel_timer_t;
typedef int __kernel_clockid_t;
typedef char * __kernel_caddr_t;
typedef unsigned short __kernel_uid16_t;
typedef unsigned short __kernel_gid16_t;
# 31 "./arch/mips/include/uapi/asm/posix_types.h" 2
# 36 "./include/uapi/linux/posix_types.h" 2
# 14 "include/uapi/linux/types.h" 2
# 32 "include/uapi/linux/types.h"
typedef __u16 __le16;
typedef __u16 __be16;
typedef __u32 __le32;
typedef __u32 __be32;
typedef __u64 __le64;
typedef __u64 __be64;
typedef __u16 __sum16;
typedef __u32 __wsum;
# 190 "include/linux/compiler.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void data_access_exceeds_word_size(void)
__attribute__((warning("data access exceeds word size and won't be atomic")))
;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void data_access_exceeds_word_size(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void __read_once_size(const volatile void *p, void *res, int size)
{
switch (size) {
case 1: *(__u8 *)res = *(volatile __u8 *)p; break;
case 2: *(__u16 *)res = *(volatile __u16 *)p; break;
case 4: *(__u32 *)res = *(volatile __u32 *)p; break;
default:
__asm__ __volatile__("": : :"memory");
__builtin_memcpy((void *)res, (const void *)p, size);
data_access_exceeds_word_size();
__asm__ __volatile__("": : :"memory");
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void __write_once_size(volatile void *p, void *res, int size)
{
switch (size) {
case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
case 2: *(volatile __u16 *)p = *(__u16 *)res; break;
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
default:
__asm__ __volatile__("": : :"memory");
__builtin_memcpy((void *)p, (const void *)res, size);
data_access_exceeds_word_size();
__asm__ __volatile__("": : :"memory");
}
}
# 5 "include/linux/linkage.h" 2
# 1 "include/linux/stringify.h" 1
# 6 "include/linux/linkage.h" 2
# 1 "include/linux/export.h" 1
# 26 "include/linux/export.h"
struct kernel_symbol
{
unsigned long value;
const char *name;
};
extern struct module __this_module;
# 7 "include/linux/linkage.h" 2
# 1 "./arch/mips/include/asm/linkage.h" 1
# 8 "include/linux/linkage.h" 2
# 7 "include/linux/kernel.h" 2
# 1 "include/linux/types.h" 1
# 12 "include/linux/types.h"
typedef __u32 __kernel_dev_t;
typedef __kernel_fd_set fd_set;
typedef __kernel_dev_t dev_t;
typedef __kernel_ino_t ino_t;
typedef __kernel_mode_t mode_t;
typedef unsigned short umode_t;
typedef __u32 nlink_t;
typedef __kernel_off_t off_t;
typedef __kernel_pid_t pid_t;
typedef __kernel_daddr_t daddr_t;
typedef __kernel_key_t key_t;
typedef __kernel_suseconds_t suseconds_t;
typedef __kernel_timer_t timer_t;
typedef __kernel_clockid_t clockid_t;
typedef __kernel_mqd_t mqd_t;
typedef _Bool bool;
typedef __kernel_uid32_t uid_t;
typedef __kernel_gid32_t gid_t;
typedef __kernel_uid16_t uid16_t;
typedef __kernel_gid16_t gid16_t;
typedef unsigned long uintptr_t;
# 45 "include/linux/types.h"
typedef __kernel_loff_t loff_t;
# 54 "include/linux/types.h"
typedef __kernel_size_t size_t;
typedef __kernel_ssize_t ssize_t;
typedef __kernel_ptrdiff_t ptrdiff_t;
typedef __kernel_time_t time_t;
typedef __kernel_clock_t clock_t;
typedef __kernel_caddr_t caddr_t;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned char unchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef __u8 u_int8_t;
typedef __s8 int8_t;
typedef __u16 u_int16_t;
typedef __s16 int16_t;
typedef __u32 u_int32_t;
typedef __s32 int32_t;
typedef __u8 uint8_t;
typedef __u16 uint16_t;
typedef __u32 uint32_t;
typedef __u64 uint64_t;
typedef __u64 u_int64_t;
typedef __s64 int64_t;
# 130 "include/linux/types.h"
typedef u64 sector_t;
typedef u64 blkcnt_t;
# 149 "include/linux/types.h"
typedef u32 dma_addr_t;
# 158 "include/linux/types.h"
typedef unsigned gfp_t;
typedef unsigned fmode_t;
typedef unsigned oom_flags_t;
typedef u32 phys_addr_t;
typedef phys_addr_t resource_size_t;
typedef unsigned long irq_hw_number_t;
typedef struct {
int counter;
} atomic_t;
struct list_head {
struct list_head *next, *prev;
};
struct hlist_head {
struct hlist_node *first;
};
struct hlist_node {
struct hlist_node *next, **pprev;
};
struct ustat {
__kernel_daddr_t f_tfree;
__kernel_ino_t f_tinode;
char f_fname[6];
char f_fpack[6];
};
struct callback_head {
struct callback_head *next;
void (*func)(struct callback_head *head);
};
# 9 "include/linux/kernel.h" 2
# 1 "include/linux/bitops.h" 1
# 27 "include/linux/bitops.h"
extern unsigned int __sw_hweight8(unsigned int w);
extern unsigned int __sw_hweight16(unsigned int w);
extern unsigned int __sw_hweight32(unsigned int w);
extern unsigned long __sw_hweight64(__u64 w);
# 1 "./arch/mips/include/asm/bitops.h" 1
# 18 "./arch/mips/include/asm/bitops.h"
# 1 "./arch/mips/include/asm/barrier.h" 1
# 11 "./arch/mips/include/asm/barrier.h"
# 1 "./arch/mips/include/asm/addrspace.h" 1
# 13 "./arch/mips/include/asm/addrspace.h"
# 1 "./arch/mips/include/asm/mach-generic/spaces.h" 1
# 13 "./arch/mips/include/asm/mach-generic/spaces.h"
# 1 "./include/uapi/linux/const.h" 1
# 14 "./arch/mips/include/asm/mach-generic/spaces.h" 2
# 14 "./arch/mips/include/asm/addrspace.h" 2
# 12 "./arch/mips/include/asm/barrier.h" 2
# 19 "./arch/mips/include/asm/bitops.h" 2
# 1 "./arch/mips/include/uapi/asm/byteorder.h" 1
# 12 "./arch/mips/include/uapi/asm/byteorder.h"
# 1 "include/linux/byteorder/big_endian.h" 1
# 1 "include/uapi/linux/byteorder/big_endian.h" 1
# 12 "include/uapi/linux/byteorder/big_endian.h"
# 1 "include/linux/swab.h" 1
# 1 "include/uapi/linux/swab.h" 1
# 1 "./arch/mips/include/uapi/asm/swab.h" 1
# 19 "./arch/mips/include/uapi/asm/swab.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((__const__)) __u16 __arch_swab16(__u16 x)
{
__asm__(
" .set push \n"
" .set arch=mips32r2 \n"
" wsbh %0, %1 \n"
" .set pop \n"
: "=r" (x)
: "r" (x));
return x;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((__const__)) __u32 __arch_swab32(__u32 x)
{
__asm__(
" .set push \n"
" .set arch=mips32r2 \n"
" wsbh %0, %1 \n"
" rotr %0, %0, 16 \n"
" .set pop \n"
: "=r" (x)
: "r" (x));
return x;
}
# 7 "include/uapi/linux/swab.h" 2
# 46 "include/uapi/linux/swab.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((__const__)) __u16 __fswab16(__u16 val)
{
return __arch_swab16(val);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((__const__)) __u32 __fswab32(__u32 val)
{
return __arch_swab32(val);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((__const__)) __u64 __fswab64(__u64 val)
{
__u32 h = val >> 32;
__u32 l = val & ((1ULL << 32) - 1);
return (((__u64)__fswab32(l)) << 32) | ((__u64)(__fswab32(h)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((__const__)) __u32 __fswahw32(__u32 val)
{
return ((__u32)( (((__u32)(val) & (__u32)0x0000ffffUL) << 16) | (((__u32)(val) & (__u32)0xffff0000UL) >> 16)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((__const__)) __u32 __fswahb32(__u32 val)
{
return ((__u32)( (((__u32)(val) & (__u32)0x00ff00ffUL) << 8) | (((__u32)(val) & (__u32)0xff00ff00UL) >> 8)));
}
# 154 "include/uapi/linux/swab.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u16 __swab16p(const __u16 *p)
{
return (__builtin_constant_p((__u16)(*p)) ? ((__u16)( (((__u16)(*p) & (__u16)0x00ffU) << 8) | (((__u16)(*p) & (__u16)0xff00U) >> 8))) : __fswab16(*p));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 __swab32p(const __u32 *p)
{
return (__builtin_constant_p((__u32)(*p)) ? ((__u32)( (((__u32)(*p) & (__u32)0x000000ffUL) << 24) | (((__u32)(*p) & (__u32)0x0000ff00UL) << 8) | (((__u32)(*p) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(*p) & (__u32)0xff000000UL) >> 24))) : __fswab32(*p));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u64 __swab64p(const __u64 *p)
{
return (__builtin_constant_p((__u64)(*p)) ? ((__u64)( (((__u64)(*p) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(*p) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(*p) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(*p) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(*p) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(*p) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(*p) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(*p) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(*p));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 __swahw32p(const __u32 *p)
{
return (__builtin_constant_p((__u32)(*p)) ? ((__u32)( (((__u32)(*p) & (__u32)0x0000ffffUL) << 16) | (((__u32)(*p) & (__u32)0xffff0000UL) >> 16))) : __fswahw32(*p));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 __swahb32p(const __u32 *p)
{
return (__builtin_constant_p((__u32)(*p)) ? ((__u32)( (((__u32)(*p) & (__u32)0x00ff00ffUL) << 8) | (((__u32)(*p) & (__u32)0xff00ff00UL) >> 8))) : __fswahb32(*p));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __swab16s(__u16 *p)
{
*p = __swab16p(p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __swab32s(__u32 *p)
{
*p = __swab32p(p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __swab64s(__u64 *p)
{
*p = __swab64p(p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __swahw32s(__u32 *p)
{
*p = __swahw32p(p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __swahb32s(__u32 *p)
{
*p = __swahb32p(p);
}
# 5 "include/linux/swab.h" 2
# 13 "include/uapi/linux/byteorder/big_endian.h" 2
# 43 "include/uapi/linux/byteorder/big_endian.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __le64 __cpu_to_le64p(const __u64 *p)
{
return ( __le64)__swab64p(p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u64 __le64_to_cpup(const __le64 *p)
{
return __swab64p((__u64 *)p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __le32 __cpu_to_le32p(const __u32 *p)
{
return ( __le32)__swab32p(p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 __le32_to_cpup(const __le32 *p)
{
return __swab32p((__u32 *)p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __le16 __cpu_to_le16p(const __u16 *p)
{
return ( __le16)__swab16p(p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u16 __le16_to_cpup(const __le16 *p)
{
return __swab16p((__u16 *)p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __be64 __cpu_to_be64p(const __u64 *p)
{
return ( __be64)*p;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u64 __be64_to_cpup(const __be64 *p)
{
return ( __u64)*p;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __be32 __cpu_to_be32p(const __u32 *p)
{
return ( __be32)*p;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 __be32_to_cpup(const __be32 *p)
{
return ( __u32)*p;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __be16 __cpu_to_be16p(const __u16 *p)
{
return ( __be16)*p;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u16 __be16_to_cpup(const __be16 *p)
{
return ( __u16)*p;
}
# 5 "include/linux/byteorder/big_endian.h" 2
# 1 "include/linux/byteorder/generic.h" 1
# 143 "include/linux/byteorder/generic.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void le16_add_cpu(__le16 *var, u16 val)
{
*var = (( __le16)(__builtin_constant_p((__u16)(((__builtin_constant_p((__u16)(( __u16)(__le16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__le16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__le16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__le16)(*var))) + val))) ? ((__u16)( (((__u16)(((__builtin_constant_p((__u16)(( __u16)(__le16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__le16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__le16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__le16)(*var))) + val)) & (__u16)0x00ffU) << 8) | (((__u16)(((__builtin_constant_p((__u16)(( __u16)(__le16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__le16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__le16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__le16)(*var))) + val)) & (__u16)0xff00U) >> 8))) : __fswab16(((__builtin_constant_p((__u16)(( __u16)(__le16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__le16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__le16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__le16)(*var))) + val))));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void le32_add_cpu(__le32 *var, u32 val)
{
*var = (( __le32)(__builtin_constant_p((__u32)(((__builtin_constant_p((__u32)(( __u32)(__le32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(*var))) + val))) ? ((__u32)( (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__le32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(*var))) + val)) & (__u32)0x000000ffUL) << 24) | (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__le32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(*var))) + val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__le32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(*var))) + val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__le32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(*var))) + val)) & (__u32)0xff000000UL) >> 24))) : __fswab32(((__builtin_constant_p((__u32)(( __u32)(__le32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(*var))) + val))));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void le64_add_cpu(__le64 *var, u64 val)
{
*var = (( __le64)(__builtin_constant_p((__u64)(((__builtin_constant_p((__u64)(( __u64)(__le64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(*var))) + val))) ? ((__u64)( (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__le64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(*var))) + val)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__le64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(*var))) + val)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__le64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(*var))) + val)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__le64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(*var))) + val)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__le64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(*var))) + val)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__le64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(*var))) + val)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__le64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(*var))) + val)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__le64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(*var))) + val)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(((__builtin_constant_p((__u64)(( __u64)(__le64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(*var))) + val))));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void be16_add_cpu(__be16 *var, u16 val)
{
*var = (( __be16)(__u16)((( __u16)(__be16)(*var)) + val));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void be32_add_cpu(__be32 *var, u32 val)
{
*var = (( __be32)(__u32)((( __u32)(__be32)(*var)) + val));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void be64_add_cpu(__be64 *var, u64 val)
{
*var = (( __be64)(__u64)((( __u64)(__be64)(*var)) + val));
}
# 7 "include/linux/byteorder/big_endian.h" 2
# 13 "./arch/mips/include/uapi/asm/byteorder.h" 2
# 20 "./arch/mips/include/asm/bitops.h" 2
# 1 "./arch/mips/include/asm/cpu-features.h" 1
# 12 "./arch/mips/include/asm/cpu-features.h"
# 1 "./arch/mips/include/asm/cpu.h" 1
# 265 "./arch/mips/include/asm/cpu.h"
enum cpu_type_enum {
CPU_UNKNOWN,
CPU_R2000, CPU_R3000, CPU_R3000A, CPU_R3041, CPU_R3051, CPU_R3052,
CPU_R3081, CPU_R3081E,
CPU_R6000, CPU_R6000A,
CPU_R4000PC, CPU_R4000SC, CPU_R4000MC, CPU_R4200, CPU_R4300, CPU_R4310,
CPU_R4400PC, CPU_R4400SC, CPU_R4400MC, CPU_R4600, CPU_R4640, CPU_R4650,
CPU_R4700, CPU_R5000, CPU_R5500, CPU_NEVADA, CPU_R5432, CPU_R10000,
CPU_R12000, CPU_R14000, CPU_VR41XX, CPU_VR4111, CPU_VR4121, CPU_VR4122,
CPU_VR4131, CPU_VR4133, CPU_VR4181, CPU_VR4181A, CPU_RM7000,
CPU_SR71000, CPU_TX49XX,
CPU_R8000,
CPU_TX3912, CPU_TX3922, CPU_TX3927,
CPU_4KC, CPU_4KEC, CPU_4KSC, CPU_24K, CPU_34K, CPU_1004K, CPU_74K,
CPU_ALCHEMY, CPU_PR4450, CPU_BMIPS32, CPU_BMIPS3300, CPU_BMIPS4350,
CPU_BMIPS4380, CPU_BMIPS5000, CPU_JZRISC, CPU_LOONGSON1, CPU_M14KC,
CPU_M14KEC, CPU_INTERAPTIV, CPU_P5600, CPU_PROAPTIV, CPU_1074K, CPU_M5150,
CPU_5KC, CPU_5KE, CPU_20KC, CPU_25KF, CPU_SB1, CPU_SB1A, CPU_LOONGSON2,
CPU_LOONGSON3, CPU_CAVIUM_OCTEON, CPU_CAVIUM_OCTEON_PLUS,
CPU_CAVIUM_OCTEON2, CPU_CAVIUM_OCTEON3, CPU_XLR, CPU_XLP,
CPU_LAST
};
# 13 "./arch/mips/include/asm/cpu-features.h" 2
# 1 "./arch/mips/include/asm/cpu-info.h" 1
# 17 "./arch/mips/include/asm/cpu-info.h"
# 1 "./arch/mips/include/asm/cache.h" 1
# 12 "./arch/mips/include/asm/cache.h"
# 1 "./arch/mips/include/asm/mach-generic/kmalloc.h" 1
# 13 "./arch/mips/include/asm/cache.h" 2
# 18 "./arch/mips/include/asm/cpu-info.h" 2
struct cache_desc {
unsigned int waysize;
unsigned short sets;
unsigned char ways;
unsigned char linesz;
unsigned char waybit;
unsigned char flags;
};
# 41 "./arch/mips/include/asm/cpu-info.h"
struct cpuinfo_mips {
unsigned long asid_cache;
unsigned long ases;
unsigned long long options;
unsigned int udelay_val;
unsigned int processor_id;
unsigned int fpu_id;
unsigned int msa_id;
unsigned int cputype;
int isa_level;
int tlbsize;
int tlbsizevtlb;
int tlbsizeftlbsets;
int tlbsizeftlbways;
struct cache_desc icache;
struct cache_desc dcache;
struct cache_desc scache;
struct cache_desc tcache;
int srsets;
int package;
int core;
# 74 "./arch/mips/include/asm/cpu-info.h"
int vpe_id;
void *data;
unsigned int watch_reg_count;
unsigned int watch_reg_use_cnt;
u16 watch_reg_masks[4];
unsigned int kscratch_mask;
unsigned int writecombine;
unsigned int htw_seq;
} __attribute__((aligned((1 << 5))));
extern struct cpuinfo_mips cpu_data[];
extern void cpu_probe(void);
extern void cpu_report(void);
extern const char *__cpu_name[];
struct seq_file;
struct notifier_block;
extern int register_proc_cpuinfo_notifier(struct notifier_block *nb);
extern int proc_cpuinfo_notifier_call_chain(unsigned long val, void *v);
# 121 "./arch/mips/include/asm/cpu-info.h"
struct proc_cpuinfo_notifier_args {
struct seq_file *m;
unsigned long n;
};
# 14 "./arch/mips/include/asm/cpu-features.h" 2
# 1 "./arch/mips/include/asm/tc3162/cpu-feature-overrides.h" 1
# 15 "./arch/mips/include/asm/cpu-features.h" 2
# 21 "./arch/mips/include/asm/bitops.h" 2
# 1 "./arch/mips/include/asm/war.h" 1
# 12 "./arch/mips/include/asm/war.h"
# 1 "./arch/mips/include/asm/tc3162/war.h" 1
# 13 "./arch/mips/include/asm/war.h" 2
# 23 "./arch/mips/include/asm/bitops.h" 2
# 44 "./arch/mips/include/asm/bitops.h"
void __mips_set_bit(unsigned long nr, volatile unsigned long *addr);
void __mips_clear_bit(unsigned long nr, volatile unsigned long *addr);
void __mips_change_bit(unsigned long nr, volatile unsigned long *addr);
int __mips_test_and_set_bit(unsigned long nr,
volatile unsigned long *addr);
int __mips_test_and_set_bit_lock(unsigned long nr,
volatile unsigned long *addr);
int __mips_test_and_clear_bit(unsigned long nr,
volatile unsigned long *addr);
int __mips_test_and_change_bit(unsigned long nr,
volatile unsigned long *addr);
# 67 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_bit(unsigned long nr, volatile unsigned long *addr)
{
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
int bit = nr & 31UL;
unsigned long temp;
if (1 && 0) {
__asm__ __volatile__(
" .set arch=r4000 \n"
"1: " "ll " "%0, %1 # set_bit \n"
" or %0, %2 \n"
" " "sc " "%0, %1 \n"
" beqzl %0, 1b \n"
" .set mips0 \n"
: "=&r" (temp), "=m" (*m)
: "ir" (1UL << bit), "m" (*m));
} else if (1 && __builtin_constant_p(bit)) {
do {
__asm__ __volatile__(
" " "ll " "%0, %1 # set_bit \n"
" " "ins " "%0, %3, %2, 1 \n"
" " "sc " "%0, %1 \n"
: "=&r" (temp), "+m" (*m)
: "ir" (bit), "r" (~0));
} while (__builtin_expect(!!(!temp), 0));
} else if (1) {
do {
__asm__ __volatile__(
" .set arch=r4000 \n"
" " "ll " "%0, %1 # set_bit \n"
" or %0, %2 \n"
" " "sc " "%0, %1 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m)
: "ir" (1UL << bit));
} while (__builtin_expect(!!(!temp), 0));
} else
__mips_set_bit(nr, addr);
}
# 119 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clear_bit(unsigned long nr, volatile unsigned long *addr)
{
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
int bit = nr & 31UL;
unsigned long temp;
if (1 && 0) {
__asm__ __volatile__(
" .set arch=r4000 \n"
"1: " "ll " "%0, %1 # clear_bit \n"
" and %0, %2 \n"
" " "sc " "%0, %1 \n"
" beqzl %0, 1b \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m)
: "ir" (~(1UL << bit)));
} else if (1 && __builtin_constant_p(bit)) {
do {
__asm__ __volatile__(
" " "ll " "%0, %1 # clear_bit \n"
" " "ins " "%0, $0, %2, 1 \n"
" " "sc " "%0, %1 \n"
: "=&r" (temp), "+m" (*m)
: "ir" (bit));
} while (__builtin_expect(!!(!temp), 0));
} else if (1) {
do {
__asm__ __volatile__(
" .set arch=r4000 \n"
" " "ll " "%0, %1 # clear_bit \n"
" and %0, %2 \n"
" " "sc " "%0, %1 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m)
: "ir" (~(1UL << bit)));
} while (__builtin_expect(!!(!temp), 0));
} else
__mips_clear_bit(nr, addr);
}
# 169 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clear_bit_unlock(unsigned long nr, volatile unsigned long *addr)
{
__asm__ __volatile__(" \n" : : :"memory");
clear_bit(nr, addr);
}
# 184 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void change_bit(unsigned long nr, volatile unsigned long *addr)
{
int bit = nr & 31UL;
if (1 && 0) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
__asm__ __volatile__(
" .set arch=r4000 \n"
"1: " "ll " "%0, %1 # change_bit \n"
" xor %0, %2 \n"
" " "sc " "%0, %1 \n"
" beqzl %0, 1b \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m)
: "ir" (1UL << bit));
} else if (1) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
do {
__asm__ __volatile__(
" .set arch=r4000 \n"
" " "ll " "%0, %1 # change_bit \n"
" xor %0, %2 \n"
" " "sc " "%0, %1 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m)
: "ir" (1UL << bit));
} while (__builtin_expect(!!(!temp), 0));
} else
__mips_change_bit(nr, addr);
}
# 227 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_and_set_bit(unsigned long nr,
volatile unsigned long *addr)
{
int bit = nr & 31UL;
unsigned long res;
__asm__ __volatile__(" \n" : : :"memory");
if (1 && 0) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
__asm__ __volatile__(
" .set arch=r4000 \n"
"1: " "ll " "%0, %1 # test_and_set_bit \n"
" or %2, %0, %3 \n"
" " "sc " "%2, %1 \n"
" beqzl %2, 1b \n"
" and %2, %0, %3 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m), "=&r" (res)
: "r" (1UL << bit)
: "memory");
} else if (1) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
do {
__asm__ __volatile__(
" .set arch=r4000 \n"
" " "ll " "%0, %1 # test_and_set_bit \n"
" or %2, %0, %3 \n"
" " "sc " "%2, %1 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m), "=&r" (res)
: "r" (1UL << bit)
: "memory");
} while (__builtin_expect(!!(!res), 0));
res = temp & (1UL << bit);
} else
res = __mips_test_and_set_bit(nr, addr);
__asm__ __volatile__(" \n" : : :"memory");
return res != 0;
}
# 283 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_and_set_bit_lock(unsigned long nr,
volatile unsigned long *addr)
{
int bit = nr & 31UL;
unsigned long res;
if (1 && 0) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
__asm__ __volatile__(
" .set arch=r4000 \n"
"1: " "ll " "%0, %1 # test_and_set_bit \n"
" or %2, %0, %3 \n"
" " "sc " "%2, %1 \n"
" beqzl %2, 1b \n"
" and %2, %0, %3 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m), "=&r" (res)
: "r" (1UL << bit)
: "memory");
} else if (1) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
do {
__asm__ __volatile__(
" .set arch=r4000 \n"
" " "ll " "%0, %1 # test_and_set_bit \n"
" or %2, %0, %3 \n"
" " "sc " "%2, %1 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m), "=&r" (res)
: "r" (1UL << bit)
: "memory");
} while (__builtin_expect(!!(!res), 0));
res = temp & (1UL << bit);
} else
res = __mips_test_and_set_bit_lock(nr, addr);
__asm__ __volatile__(" \n" : : :"memory");
return res != 0;
}
# 336 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_and_clear_bit(unsigned long nr,
volatile unsigned long *addr)
{
int bit = nr & 31UL;
unsigned long res;
__asm__ __volatile__(" \n" : : :"memory");
if (1 && 0) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
__asm__ __volatile__(
" .set arch=r4000 \n"
"1: " "ll " "%0, %1 # test_and_clear_bit \n"
" or %2, %0, %3 \n"
" xor %2, %3 \n"
" " "sc " "%2, %1 \n"
" beqzl %2, 1b \n"
" and %2, %0, %3 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m), "=&r" (res)
: "r" (1UL << bit)
: "memory");
} else if (1 && __builtin_constant_p(nr)) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
do {
__asm__ __volatile__(
" " "ll " "%0, %1 # test_and_clear_bit \n"
" " "ext " "%2, %0, %3, 1 \n"
" " "ins " "%0, $0, %3, 1 \n"
" " "sc " "%0, %1 \n"
: "=&r" (temp), "+m" (*m), "=&r" (res)
: "ir" (bit)
: "memory");
} while (__builtin_expect(!!(!temp), 0));
} else if (1) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
do {
__asm__ __volatile__(
" .set arch=r4000 \n"
" " "ll " "%0, %1 # test_and_clear_bit \n"
" or %2, %0, %3 \n"
" xor %2, %3 \n"
" " "sc " "%2, %1 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m), "=&r" (res)
: "r" (1UL << bit)
: "memory");
} while (__builtin_expect(!!(!res), 0));
res = temp & (1UL << bit);
} else
res = __mips_test_and_clear_bit(nr, addr);
__asm__ __volatile__(" \n" : : :"memory");
return res != 0;
}
# 410 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_and_change_bit(unsigned long nr,
volatile unsigned long *addr)
{
int bit = nr & 31UL;
unsigned long res;
__asm__ __volatile__(" \n" : : :"memory");
if (1 && 0) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
__asm__ __volatile__(
" .set arch=r4000 \n"
"1: " "ll " "%0, %1 # test_and_change_bit \n"
" xor %2, %0, %3 \n"
" " "sc " "%2, %1 \n"
" beqzl %2, 1b \n"
" and %2, %0, %3 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m), "=&r" (res)
: "r" (1UL << bit)
: "memory");
} else if (1) {
unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
unsigned long temp;
do {
__asm__ __volatile__(
" .set arch=r4000 \n"
" " "ll " "%0, %1 # test_and_change_bit \n"
" xor %2, %0, %3 \n"
" " "sc " "\t%2, %1 \n"
" .set mips0 \n"
: "=&r" (temp), "+m" (*m), "=&r" (res)
: "r" (1UL << bit)
: "memory");
} while (__builtin_expect(!!(!res), 0));
res = temp & (1UL << bit);
} else
res = __mips_test_and_change_bit(nr, addr);
__asm__ __volatile__(" \n" : : :"memory");
return res != 0;
}
# 1 "include/asm-generic/bitops/non-atomic.h" 1
# 15 "include/asm-generic/bitops/non-atomic.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __set_bit(int nr, volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
*p |= mask;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __clear_bit(int nr, volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
*p &= ~mask;
}
# 40 "include/asm-generic/bitops/non-atomic.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __change_bit(int nr, volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
*p ^= mask;
}
# 57 "include/asm-generic/bitops/non-atomic.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __test_and_set_bit(int nr, volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
unsigned long old = *p;
*p = old | mask;
return (old & mask) != 0;
}
# 76 "include/asm-generic/bitops/non-atomic.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __test_and_clear_bit(int nr, volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
unsigned long old = *p;
*p = old & ~mask;
return (old & mask) != 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __test_and_change_bit(int nr,
volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
unsigned long old = *p;
*p = old ^ mask;
return (old & mask) != 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_bit(int nr, const volatile unsigned long *addr)
{
return 1UL & (addr[((nr) / 32)] >> (nr & (32 -1)));
}
# 459 "./arch/mips/include/asm/bitops.h" 2
# 469 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __clear_bit_unlock(unsigned long nr, volatile unsigned long *addr)
{
__asm__ __volatile__("": : :"memory");
__clear_bit(nr, addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __fls(unsigned long word)
{
int num;
if (32 == 32 &&
__builtin_constant_p(((cpu_data[0].isa_level & 0x00000010) | (cpu_data[0].isa_level & 0x00000020) | (cpu_data[0].isa_level & 0x00000040) | (cpu_data[0].isa_level & 0x00000080))) && ((cpu_data[0].isa_level & 0x00000010) | (cpu_data[0].isa_level & 0x00000020) | (cpu_data[0].isa_level & 0x00000040) | (cpu_data[0].isa_level & 0x00000080))) {
__asm__(
" .set push \n"
" .set mips32 \n"
" clz %0, %1 \n"
" .set pop \n"
: "=r" (num)
: "r" (word));
return 31 - num;
}
if (32 == 64 &&
__builtin_constant_p(((cpu_data[0].isa_level & 0x00000040) | (cpu_data[0].isa_level & 0x00000080))) && ((cpu_data[0].isa_level & 0x00000040) | (cpu_data[0].isa_level & 0x00000080))) {
__asm__(
" .set push \n"
" .set mips64 \n"
" dclz %0, %1 \n"
" .set pop \n"
: "=r" (num)
: "r" (word));
return 63 - num;
}
num = 32 - 1;
if (!(word & (~0ul << (32 -16)))) {
num -= 16;
word <<= 16;
}
if (!(word & (~0ul << (32 -8)))) {
num -= 8;
word <<= 8;
}
if (!(word & (~0ul << (32 -4)))) {
num -= 4;
word <<= 4;
}
if (!(word & (~0ul << (32 -2)))) {
num -= 2;
word <<= 2;
}
if (!(word & (~0ul << (32 -1))))
num -= 1;
return num;
}
# 545 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __ffs(unsigned long word)
{
return __fls(word & -word);
}
# 557 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int fls(int x)
{
int r;
if (__builtin_constant_p(((cpu_data[0].isa_level & 0x00000010) | (cpu_data[0].isa_level & 0x00000020) | (cpu_data[0].isa_level & 0x00000040) | (cpu_data[0].isa_level & 0x00000080))) && ((cpu_data[0].isa_level & 0x00000010) | (cpu_data[0].isa_level & 0x00000020) | (cpu_data[0].isa_level & 0x00000040) | (cpu_data[0].isa_level & 0x00000080))) {
__asm__(
" .set push \n"
" .set mips32 \n"
" clz %0, %1 \n"
" .set pop \n"
: "=r" (x)
: "r" (x));
return 32 - x;
}
r = 32;
if (!x)
return 0;
if (!(x & 0xffff0000u)) {
x <<= 16;
r -= 16;
}
if (!(x & 0xff000000u)) {
x <<= 8;
r -= 8;
}
if (!(x & 0xf0000000u)) {
x <<= 4;
r -= 4;
}
if (!(x & 0xc0000000u)) {
x <<= 2;
r -= 2;
}
if (!(x & 0x80000000u)) {
x <<= 1;
r -= 1;
}
return r;
}
# 1 "include/asm-generic/bitops/fls64.h" 1
# 18 "include/asm-generic/bitops/fls64.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) int fls64(__u64 x)
{
__u32 h = x >> 32;
if (h)
return fls(h) + 32;
return fls(x);
}
# 600 "./arch/mips/include/asm/bitops.h" 2
# 609 "./arch/mips/include/asm/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int ffs(int word)
{
if (!word)
return 0;
return fls(word & -word);
}
# 1 "include/asm-generic/bitops/ffz.h" 1
# 618 "./arch/mips/include/asm/bitops.h" 2
# 1 "include/asm-generic/bitops/find.h" 1
# 14 "include/asm-generic/bitops/find.h"
extern unsigned long find_next_bit(const unsigned long *addr, unsigned long
size, unsigned long offset);
# 28 "include/asm-generic/bitops/find.h"
extern unsigned long find_next_zero_bit(const unsigned long *addr, unsigned
long size, unsigned long offset);
# 619 "./arch/mips/include/asm/bitops.h" 2
# 1 "include/asm-generic/bitops/sched.h" 1
# 12 "include/asm-generic/bitops/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int sched_find_first_bit(const unsigned long *b)
{
if (b[0])
return __ffs(b[0]);
if (b[1])
return __ffs(b[1]) + 32;
if (b[2])
return __ffs(b[2]) + 64;
return __ffs(b[3]) + 96;
}
# 623 "./arch/mips/include/asm/bitops.h" 2
# 1 "./arch/mips/include/asm/arch_hweight.h" 1
# 35 "./arch/mips/include/asm/arch_hweight.h"
# 1 "include/asm-generic/bitops/arch_hweight.h" 1
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int __arch_hweight32(unsigned int w)
{
return __sw_hweight32(w);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int __arch_hweight16(unsigned int w)
{
return __sw_hweight16(w);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int __arch_hweight8(unsigned int w)
{
return __sw_hweight8(w);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __arch_hweight64(__u64 w)
{
return __sw_hweight64(w);
}
# 36 "./arch/mips/include/asm/arch_hweight.h" 2
# 625 "./arch/mips/include/asm/bitops.h" 2
# 1 "include/asm-generic/bitops/const_hweight.h" 1
# 626 "./arch/mips/include/asm/bitops.h" 2
# 1 "include/asm-generic/bitops/le.h" 1
# 34 "include/asm-generic/bitops/le.h"
extern unsigned long find_next_zero_bit_le(const void *addr,
unsigned long size, unsigned long offset);
extern unsigned long find_next_bit_le(const void *addr,
unsigned long size, unsigned long offset);
# 52 "include/asm-generic/bitops/le.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_bit_le(int nr, const void *addr)
{
return test_bit(nr ^ ((32 -1) & ~0x7), addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_bit_le(int nr, void *addr)
{
set_bit(nr ^ ((32 -1) & ~0x7), addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clear_bit_le(int nr, void *addr)
{
clear_bit(nr ^ ((32 -1) & ~0x7), addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __set_bit_le(int nr, void *addr)
{
__set_bit(nr ^ ((32 -1) & ~0x7), addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __clear_bit_le(int nr, void *addr)
{
__clear_bit(nr ^ ((32 -1) & ~0x7), addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_and_set_bit_le(int nr, void *addr)
{
return test_and_set_bit(nr ^ ((32 -1) & ~0x7), addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_and_clear_bit_le(int nr, void *addr)
{
return test_and_clear_bit(nr ^ ((32 -1) & ~0x7), addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __test_and_set_bit_le(int nr, void *addr)
{
return __test_and_set_bit(nr ^ ((32 -1) & ~0x7), addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __test_and_clear_bit_le(int nr, void *addr)
{
return __test_and_clear_bit(nr ^ ((32 -1) & ~0x7), addr);
}
# 628 "./arch/mips/include/asm/bitops.h" 2
# 1 "include/asm-generic/bitops/ext2-atomic.h" 1
# 629 "./arch/mips/include/asm/bitops.h" 2
# 37 "include/linux/bitops.h" 2
# 60 "include/linux/bitops.h"
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) int get_bitmask_order(unsigned int count)
{
int order;
order = fls(count);
return order;
}
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) int get_count_order(unsigned int count)
{
int order;
order = fls(count) - 1;
if (count & (count - 1))
order++;
return order;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long hweight_long(unsigned long w)
{
return sizeof(w) == 4 ? (__builtin_constant_p(w) ? ((((unsigned int) ((!!((w) & (1ULL << 0))) + (!!((w) & (1ULL << 1))) + (!!((w) & (1ULL << 2))) + (!!((w) & (1ULL << 3))) + (!!((w) & (1ULL << 4))) + (!!((w) & (1ULL << 5))) + (!!((w) & (1ULL << 6))) + (!!((w) & (1ULL << 7))))) + ((unsigned int) ((!!(((w) >> 8) & (1ULL << 0))) + (!!(((w) >> 8) & (1ULL << 1))) + (!!(((w) >> 8) & (1ULL << 2))) + (!!(((w) >> 8) & (1ULL << 3))) + (!!(((w) >> 8) & (1ULL << 4))) + (!!(((w) >> 8) & (1ULL << 5))) + (!!(((w) >> 8) & (1ULL << 6))) + (!!(((w) >> 8) & (1ULL << 7)))))) + (((unsigned int) ((!!(((w) >> 16) & (1ULL << 0))) + (!!(((w) >> 16) & (1ULL << 1))) + (!!(((w) >> 16) & (1ULL << 2))) + (!!(((w) >> 16) & (1ULL << 3))) + (!!(((w) >> 16) & (1ULL << 4))) + (!!(((w) >> 16) & (1ULL << 5))) + (!!(((w) >> 16) & (1ULL << 6))) + (!!(((w) >> 16) & (1ULL << 7))))) + ((unsigned int) ((!!((((w) >> 16) >> 8) & (1ULL << 0))) + (!!((((w) >> 16) >> 8) & (1ULL << 1))) + (!!((((w) >> 16) >> 8) & (1ULL << 2))) + (!!((((w) >> 16) >> 8) & (1ULL << 3))) + (!!((((w) >> 16) >> 8) & (1ULL << 4))) + (!!((((w) >> 16) >> 8) & (1ULL << 5))) + (!!((((w) >> 16) >> 8) & (1ULL << 6))) + (!!((((w) >> 16) >> 8) & (1ULL << 7))))))) : __arch_hweight32(w)) : (__builtin_constant_p(w) ? (((((unsigned int) ((!!((w) & (1ULL << 0))) + (!!((w) & (1ULL << 1))) + (!!((w) & (1ULL << 2))) + (!!((w) & (1ULL << 3))) + (!!((w) & (1ULL << 4))) + (!!((w) & (1ULL << 5))) + (!!((w) & (1ULL << 6))) + (!!((w) & (1ULL << 7))))) + ((unsigned int) ((!!(((w) >> 8) & (1ULL << 0))) + (!!(((w) >> 8) & (1ULL << 1))) + (!!(((w) >> 8) & (1ULL << 2))) + (!!(((w) >> 8) & (1ULL << 3))) + (!!(((w) >> 8) & (1ULL << 4))) + (!!(((w) >> 8) & (1ULL << 5))) + (!!(((w) >> 8) & (1ULL << 6))) + (!!(((w) >> 8) & (1ULL << 7)))))) + (((unsigned int) ((!!(((w) >> 16) & (1ULL << 0))) + (!!(((w) >> 16) & (1ULL << 1))) + (!!(((w) >> 16) & (1ULL << 2))) + (!!(((w) >> 16) & (1ULL << 3))) + (!!(((w) >> 16) & (1ULL << 4))) + (!!(((w) >> 16) & (1ULL << 5))) + (!!(((w) >> 16) & (1ULL << 6))) + (!!(((w) >> 16) & (1ULL << 7))))) + ((unsigned int) ((!!((((w) >> 16) >> 8) & (1ULL << 0))) + (!!((((w) >> 16) >> 8) & (1ULL << 1))) + (!!((((w) >> 16) >> 8) & (1ULL << 2))) + (!!((((w) >> 16) >> 8) & (1ULL << 3))) + (!!((((w) >> 16) >> 8) & (1ULL << 4))) + (!!((((w) >> 16) >> 8) & (1ULL << 5))) + (!!((((w) >> 16) >> 8) & (1ULL << 6))) + (!!((((w) >> 16) >> 8) & (1ULL << 7))))))) + ((((unsigned int) ((!!(((w) >> 32) & (1ULL << 0))) + (!!(((w) >> 32) & (1ULL << 1))) + (!!(((w) >> 32) & (1ULL << 2))) + (!!(((w) >> 32) & (1ULL << 3))) + (!!(((w) >> 32) & (1ULL << 4))) + (!!(((w) >> 32) & (1ULL << 5))) + (!!(((w) >> 32) & (1ULL << 6))) + (!!(((w) >> 32) & (1ULL << 7))))) + ((unsigned int) ((!!((((w) >> 32) >> 8) & (1ULL << 0))) + (!!((((w) >> 32) >> 8) & (1ULL << 1))) + (!!((((w) >> 32) >> 8) & (1ULL << 2))) + (!!((((w) >> 32) >> 8) & (1ULL << 3))) + (!!((((w) >> 32) >> 8) & (1ULL << 4))) + (!!((((w) >> 32) >> 8) & (1ULL << 5))) + (!!((((w) >> 32) >> 8) & (1ULL << 6))) + (!!((((w) >> 32) >> 8) & (1ULL << 7)))))) + (((unsigned int) ((!!((((w) >> 32) >> 16) & (1ULL << 0))) + (!!((((w) >> 32) >> 16) & (1ULL << 1))) + (!!((((w) >> 32) >> 16) & (1ULL << 2))) + (!!((((w) >> 32) >> 16) & (1ULL << 3))) + (!!((((w) >> 32) >> 16) & (1ULL << 4))) + (!!((((w) >> 32) >> 16) & (1ULL << 5))) + (!!((((w) >> 32) >> 16) & (1ULL << 6))) + (!!((((w) >> 32) >> 16) & (1ULL << 7))))) + ((unsigned int) ((!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 0))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 1))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 2))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 3))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 4))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 5))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 6))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 7)))))))) : __arch_hweight64(w));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u64 rol64(__u64 word, unsigned int shift)
{
return (word << shift) | (word >> (64 - shift));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u64 ror64(__u64 word, unsigned int shift)
{
return (word >> shift) | (word << (64 - shift));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 rol32(__u32 word, unsigned int shift)
{
return (word << shift) | (word >> (32 - shift));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 ror32(__u32 word, unsigned int shift)
{
return (word >> shift) | (word << (32 - shift));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u16 rol16(__u16 word, unsigned int shift)
{
return (word << shift) | (word >> (16 - shift));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u16 ror16(__u16 word, unsigned int shift)
{
return (word >> shift) | (word << (16 - shift));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u8 rol8(__u8 word, unsigned int shift)
{
return (word << shift) | (word >> (8 - shift));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u8 ror8(__u8 word, unsigned int shift)
{
return (word >> shift) | (word << (8 - shift));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __s32 sign_extend32(__u32 value, int index)
{
__u8 shift = 31 - index;
return (__s32)(value << shift) >> shift;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned fls_long(unsigned long l)
{
if (sizeof(l) == 4)
return fls(l);
return fls64(l);
}
# 189 "include/linux/bitops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __ffs64(u64 word)
{
if (((u32)word) == 0UL)
return __ffs((u32)(word >> 32)) + 32;
return __ffs((unsigned long)word);
}
# 225 "include/linux/bitops.h"
extern unsigned long find_last_bit(const unsigned long *addr,
unsigned long size);
# 11 "include/linux/kernel.h" 2
# 1 "include/linux/log2.h" 1
# 21 "include/linux/log2.h"
extern __attribute__((const, noreturn))
int ____ilog2_NaN(void);
# 31 "include/linux/log2.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((const))
int __ilog2_u32(u32 n)
{
return fls(n) - 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((const))
int __ilog2_u64(u64 n)
{
return fls64(n) - 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((const))
bool is_power_of_2(unsigned long n)
{
return (n != 0 && ((n & (n - 1)) == 0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((const))
unsigned long __roundup_pow_of_two(unsigned long n)
{
return 1UL << fls_long(n - 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((const))
unsigned long __rounddown_pow_of_two(unsigned long n)
{
return 1UL << (fls_long(n) - 1);
}
# 12 "include/linux/kernel.h" 2
# 1 "include/linux/typecheck.h" 1
# 13 "include/linux/kernel.h" 2
# 1 "include/linux/printk.h" 1
# 1 "include/linux/init.h" 1
# 135 "include/linux/init.h"
typedef int (*initcall_t)(void);
typedef void (*exitcall_t)(void);
extern initcall_t __con_initcall_start[], __con_initcall_end[];
extern initcall_t __security_initcall_start[], __security_initcall_end[];
typedef void (*ctor_fn_t)(void);
extern int do_one_initcall(initcall_t fn);
extern char __attribute__ ((__section__(".init.data"))) boot_command_line[];
extern char *saved_command_line;
extern unsigned int reset_devices;
void setup_arch(char **);
void prepare_namespace(void);
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) load_default_modules(void);
int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) init_rootfs(void);
extern void (*late_time_init)(void);
extern bool initcall_debug;
# 6 "include/linux/printk.h" 2
# 1 "include/linux/kern_levels.h" 1
# 7 "include/linux/printk.h" 2
# 1 "include/linux/cache.h" 1
# 1 "include/uapi/linux/kernel.h" 1
# 1 "./include/uapi/linux/sysinfo.h" 1
struct sysinfo {
__kernel_long_t uptime;
__kernel_ulong_t loads[3];
__kernel_ulong_t totalram;
__kernel_ulong_t freeram;
__kernel_ulong_t sharedram;
__kernel_ulong_t bufferram;
__kernel_ulong_t totalswap;
__kernel_ulong_t freeswap;
__u16 procs;
__u16 pad;
__kernel_ulong_t totalhigh;
__kernel_ulong_t freehigh;
__u32 mem_unit;
char _f[20-2*sizeof(__kernel_ulong_t)-sizeof(__u32)];
};
# 5 "include/uapi/linux/kernel.h" 2
# 5 "include/linux/cache.h" 2
# 9 "include/linux/printk.h" 2
extern const char linux_banner[];
extern const char linux_proc_banner[];
extern char *log_buf_addr_get(void);
extern u32 log_buf_len_get(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int printk_get_level(const char *buffer)
{
if (buffer[0] == '\001' && buffer[1]) {
switch (buffer[1]) {
case '0' ... '7':
case 'd':
return buffer[1];
}
}
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const char *printk_skip_level(const char *buffer)
{
if (printk_get_level(buffer))
return buffer + 2;
return buffer;
}
# 47 "include/linux/printk.h"
extern int console_printk[];
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void console_silent(void)
{
(console_printk[0]) = 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void console_verbose(void)
{
if ((console_printk[0]))
(console_printk[0]) = 15;
}
struct va_format {
const char *fmt;
va_list *va;
};
# 112 "include/linux/printk.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((format(printf, 1, 2)))
int no_printk(const char *fmt, ...)
{
return 0;
}
extern __attribute__((format(printf, 1, 2)))
void early_printk(const char *fmt, ...);
void early_vprintk(const char *fmt, va_list ap);
__attribute__((format(printf, 5, 0)))
int vprintk_emit(int facility, int level,
const char *dict, size_t dictlen,
const char *fmt, va_list args);
__attribute__((format(printf, 1, 0)))
int vprintk(const char *fmt, va_list args);
__attribute__((format(printf, 5, 6))) __attribute__((__cold__))
int printk_emit(int facility, int level,
const char *dict, size_t dictlen,
const char *fmt, ...);
__attribute__((format(printf, 1, 2))) __attribute__((__cold__))
int printk(const char *fmt, ...);
__attribute__((format(printf, 1, 2))) __attribute__((__cold__)) int printk_deferred(const char *fmt, ...);
extern int __printk_ratelimit(const char *func);
extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
unsigned int interval_msec);
extern int printk_delay_msec;
extern int dmesg_restrict;
extern int kptr_restrict;
extern void wake_up_klogd(void);
void log_buf_kexec_setup(void);
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) setup_log_buf(int early);
void dump_stack_set_arch_desc(const char *fmt, ...);
void dump_stack_print_info(const char *log_lvl);
void show_regs_print_info(const char *log_lvl);
# 221 "include/linux/printk.h"
extern void dump_stack(void) __attribute__((__cold__));
# 260 "include/linux/printk.h"
# 1 "include/linux/dynamic_debug.h" 1
# 9 "include/linux/dynamic_debug.h"
struct _ddebug {
const char *modname;
const char *function;
const char *filename;
const char *format;
unsigned int lineno:18;
# 35 "include/linux/dynamic_debug.h"
unsigned int flags:8;
} __attribute__((aligned(8)));
int ddebug_add_module(struct _ddebug *tab, unsigned int n,
const char *modname);
# 111 "include/linux/dynamic_debug.h"
# 1 "include/linux/string.h" 1
# 9 "include/linux/string.h"
# 1 "include/uapi/linux/string.h" 1
# 10 "include/linux/string.h" 2
extern char *strndup_user(const char *, long);
extern void *memdup_user(const void *, size_t);
# 1 "./arch/mips/include/asm/string.h" 1
# 23 "./arch/mips/include/asm/string.h"
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) char *strcpy(char *__dest, __const__ char *__src)
{
char *__xdest = __dest;
__asm__ __volatile__(
".set\tnoreorder\n\t"
".set\tnoat\n"
"1:\tlbu\t$1,(%1)\n\t"
"addiu\t%1,1\n\t"
"sb\t$1,(%0)\n\t"
"bnez\t$1,1b\n\t"
"addiu\t%0,1\n\t"
".set\tat\n\t"
".set\treorder"
: "=r" (__dest), "=r" (__src)
: "0" (__dest), "1" (__src)
: "memory");
return __xdest;
}
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) char *strncpy(char *__dest, __const__ char *__src, size_t __n)
{
char *__xdest = __dest;
if (__n == 0)
return __xdest;
__asm__ __volatile__(
".set\tnoreorder\n\t"
".set\tnoat\n"
"1:\tlbu\t$1,(%1)\n\t"
"subu\t%2,1\n\t"
"sb\t$1,(%0)\n\t"
"beqz\t$1,2f\n\t"
"addiu\t%0,1\n\t"
"bnez\t%2,1b\n\t"
"addiu\t%1,1\n"
"2:\n\t"
".set\tat\n\t"
".set\treorder"
: "=r" (__dest), "=r" (__src), "=r" (__n)
: "0" (__dest), "1" (__src), "2" (__n)
: "memory");
return __xdest;
}
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) int strcmp(__const__ char *__cs, __const__ char *__ct)
{
int __res;
__asm__ __volatile__(
".set\tnoreorder\n\t"
".set\tnoat\n\t"
"lbu\t%2,(%0)\n"
"1:\tlbu\t$1,(%1)\n\t"
"addiu\t%0,1\n\t"
"bne\t$1,%2,2f\n\t"
"addiu\t%1,1\n\t"
"bnez\t%2,1b\n\t"
"lbu\t%2,(%0)\n\t"
"move\t%2,$1\n"
"2:\tsubu\t%2,$1\n"
"3:\t.set\tat\n\t"
".set\treorder"
: "=r" (__cs), "=r" (__ct), "=r" (__res)
: "0" (__cs), "1" (__ct));
return __res;
}
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) int
strncmp(__const__ char *__cs, __const__ char *__ct, size_t __count)
{
int __res;
__asm__ __volatile__(
".set\tnoreorder\n\t"
".set\tnoat\n"
"1:\tlbu\t%3,(%0)\n\t"
"beqz\t%2,2f\n\t"
"lbu\t$1,(%1)\n\t"
"subu\t%2,1\n\t"
"bne\t$1,%3,3f\n\t"
"addiu\t%0,1\n\t"
"bnez\t%3,1b\n\t"
"addiu\t%1,1\n"
"2:\n\t"
"move\t%3,$1\n"
"3:\tsubu\t%3,$1\n\t"
".set\tat\n\t"
".set\treorder"
: "=r" (__cs), "=r" (__ct), "=r" (__count), "=r" (__res)
: "0" (__cs), "1" (__ct), "2" (__count));
return __res;
}
extern void *memset(void *__s, int __c, size_t __count);
extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
# 18 "include/linux/string.h" 2
# 26 "include/linux/string.h"
size_t strlcpy(char *, const char *, size_t);
extern char * strcat(char *, const char *);
extern char * strncat(char *, const char *, __kernel_size_t);
extern size_t strlcat(char *, const char *, __kernel_size_t);
# 47 "include/linux/string.h"
extern int strcasecmp(const char *s1, const char *s2);
extern int strncasecmp(const char *s1, const char *s2, size_t n);
extern char * strchr(const char *,int);
extern char * strchrnul(const char *,int);
extern char * strnchr(const char *, size_t, int);
extern char * strrchr(const char *,int);
extern char * __attribute__((warn_unused_result)) skip_spaces(const char *);
extern char *strim(char *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((warn_unused_result)) char *strstrip(char *str)
{
return strim(str);
}
extern char * strstr(const char *, const char *);
extern char * strnstr(const char *, const char *, size_t);
extern __kernel_size_t strlen(const char *);
extern __kernel_size_t strnlen(const char *,__kernel_size_t);
extern char * strpbrk(const char *,const char *);
extern char * strsep(char **,const char *);
extern __kernel_size_t strspn(const char *,const char *);
extern __kernel_size_t strcspn(const char *,const char *);
# 108 "include/linux/string.h"
extern void * memscan(void *,int,__kernel_size_t);
extern int memcmp(const void *,const void *,__kernel_size_t);
extern void * memchr(const void *,int,__kernel_size_t);
void *memchr_inv(const void *s, int c, size_t n);
extern char *kstrdup(const char *s, gfp_t gfp);
extern char *kstrndup(const char *s, size_t len, gfp_t gfp);
extern void *kmemdup(const void *src, size_t len, gfp_t gfp);
extern char **argv_split(gfp_t gfp, const char *str, int *argcp);
extern void argv_free(char **argv);
extern bool sysfs_streq(const char *s1, const char *s2);
extern int strtobool(const char *s, bool *res);
extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
const void *from, size_t available);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool strstarts(const char *str, const char *prefix)
{
return strncmp(str, prefix, strlen(prefix)) == 0;
}
size_t memweight(const void *ptr, size_t bytes);
void memzero_explicit(void *s, size_t count);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const char *kbasename(const char *path)
{
const char *tail = strrchr(path, '/');
return tail ? tail + 1 : path;
}
# 112 "include/linux/dynamic_debug.h" 2
# 1 "include/linux/errno.h" 1
# 1 "include/uapi/linux/errno.h" 1
# 1 "./arch/mips/include/asm/errno.h" 1
# 11 "./arch/mips/include/asm/errno.h"
# 1 "./arch/mips/include/uapi/asm/errno.h" 1
# 15 "./arch/mips/include/uapi/asm/errno.h"
# 1 "./include/uapi/asm-generic/errno-base.h" 1
# 16 "./arch/mips/include/uapi/asm/errno.h" 2
# 12 "./arch/mips/include/asm/errno.h" 2
# 1 "include/uapi/linux/errno.h" 2
# 5 "include/linux/errno.h" 2
# 113 "include/linux/dynamic_debug.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int ddebug_remove_module(const char *mod)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int ddebug_dyndbg_module_param_cb(char *param, char *val,
const char *modname)
{
if (strstr(param, "dyndbg")) {
printk("\001" "4" "dyndbg param is supported only in "
"CONFIG_DYNAMIC_DEBUG builds\n");
return 0;
}
return -22;
}
# 261 "include/linux/printk.h" 2
# 403 "include/linux/printk.h"
extern const struct file_operations kmsg_fops;
enum {
DUMP_PREFIX_NONE,
DUMP_PREFIX_ADDRESS,
DUMP_PREFIX_OFFSET
};
extern void hex_dump_to_buffer(const void *buf, size_t len,
int rowsize, int groupsize,
char *linebuf, size_t linebuflen, bool ascii);
extern void print_hex_dump(const char *level, const char *prefix_str,
int prefix_type, int rowsize, int groupsize,
const void *buf, size_t len, bool ascii);
extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
const void *buf, size_t len);
# 14 "include/linux/kernel.h" 2
# 158 "include/linux/kernel.h"
# 1 "./arch/mips/include/asm/div64.h" 1
# 12 "./arch/mips/include/asm/div64.h"
# 1 "include/asm-generic/div64.h" 1
# 35 "include/asm-generic/div64.h"
extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor);
# 13 "./arch/mips/include/asm/div64.h" 2
# 159 "include/linux/kernel.h" 2
# 187 "include/linux/kernel.h"
struct completion;
struct pt_regs;
struct user;
# 213 "include/linux/kernel.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __might_sleep(const char *file, int line,
int preempt_offset) { }
# 257 "include/linux/kernel.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 reciprocal_scale(u32 val, u32 ep_ro)
{
return (u32)(((u64) val * ep_ro) >> 32);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void might_fault(void) { }
extern struct atomic_notifier_head panic_notifier_list;
extern long (*panic_blink)(int state);
__attribute__((format(printf, 1, 2)))
void panic(const char *fmt, ...)
__attribute__((noreturn)) __attribute__((__cold__));
extern void oops_enter(void);
extern void oops_exit(void);
void print_oops_end_marker(void);
extern int oops_may_print(void);
void do_exit(long error_code)
__attribute__((noreturn));
void complete_and_exit(struct completion *, long)
__attribute__((noreturn));
int __attribute__((warn_unused_result)) _kstrtoul(const char *s, unsigned int base, unsigned long *res);
int __attribute__((warn_unused_result)) _kstrtol(const char *s, unsigned int base, long *res);
int __attribute__((warn_unused_result)) kstrtoull(const char *s, unsigned int base, unsigned long long *res);
int __attribute__((warn_unused_result)) kstrtoll(const char *s, unsigned int base, long long *res);
# 306 "include/linux/kernel.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kstrtoul(const char *s, unsigned int base, unsigned long *res)
{
if (sizeof(unsigned long) == sizeof(unsigned long long) &&
__alignof__(unsigned long) == __alignof__(unsigned long long))
return kstrtoull(s, base, (unsigned long long *)res);
else
return _kstrtoul(s, base, res);
}
# 335 "include/linux/kernel.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kstrtol(const char *s, unsigned int base, long *res)
{
if (sizeof(long) == sizeof(long long) &&
__alignof__(long) == __alignof__(long long))
return kstrtoll(s, base, (long long *)res);
else
return _kstrtol(s, base, res);
}
int __attribute__((warn_unused_result)) kstrtouint(const char *s, unsigned int base, unsigned int *res);
int __attribute__((warn_unused_result)) kstrtoint(const char *s, unsigned int base, int *res);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kstrtou64(const char *s, unsigned int base, u64 *res)
{
return kstrtoull(s, base, res);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kstrtos64(const char *s, unsigned int base, s64 *res)
{
return kstrtoll(s, base, res);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kstrtou32(const char *s, unsigned int base, u32 *res)
{
return kstrtouint(s, base, res);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kstrtos32(const char *s, unsigned int base, s32 *res)
{
return kstrtoint(s, base, res);
}
int __attribute__((warn_unused_result)) kstrtou16(const char *s, unsigned int base, u16 *res);
int __attribute__((warn_unused_result)) kstrtos16(const char *s, unsigned int base, s16 *res);
int __attribute__((warn_unused_result)) kstrtou8(const char *s, unsigned int base, u8 *res);
int __attribute__((warn_unused_result)) kstrtos8(const char *s, unsigned int base, s8 *res);
int __attribute__((warn_unused_result)) kstrtoull_from_user(const char *s, size_t count, unsigned int base, unsigned long long *res);
int __attribute__((warn_unused_result)) kstrtoll_from_user(const char *s, size_t count, unsigned int base, long long *res);
int __attribute__((warn_unused_result)) kstrtoul_from_user(const char *s, size_t count, unsigned int base, unsigned long *res);
int __attribute__((warn_unused_result)) kstrtol_from_user(const char *s, size_t count, unsigned int base, long *res);
int __attribute__((warn_unused_result)) kstrtouint_from_user(const char *s, size_t count, unsigned int base, unsigned int *res);
int __attribute__((warn_unused_result)) kstrtoint_from_user(const char *s, size_t count, unsigned int base, int *res);
int __attribute__((warn_unused_result)) kstrtou16_from_user(const char *s, size_t count, unsigned int base, u16 *res);
int __attribute__((warn_unused_result)) kstrtos16_from_user(const char *s, size_t count, unsigned int base, s16 *res);
int __attribute__((warn_unused_result)) kstrtou8_from_user(const char *s, size_t count, unsigned int base, u8 *res);
int __attribute__((warn_unused_result)) kstrtos8_from_user(const char *s, size_t count, unsigned int base, s8 *res);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kstrtou64_from_user(const char *s, size_t count, unsigned int base, u64 *res)
{
return kstrtoull_from_user(s, count, base, res);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kstrtos64_from_user(const char *s, size_t count, unsigned int base, s64 *res)
{
return kstrtoll_from_user(s, count, base, res);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kstrtou32_from_user(const char *s, size_t count, unsigned int base, u32 *res)
{
return kstrtouint_from_user(s, count, base, res);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kstrtos32_from_user(const char *s, size_t count, unsigned int base, s32 *res)
{
return kstrtoint_from_user(s, count, base, res);
}
extern unsigned long simple_strtoul(const char *,char **,unsigned int);
extern long simple_strtol(const char *,char **,unsigned int);
extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
extern long long simple_strtoll(const char *,char **,unsigned int);
extern int num_to_str(char *buf, int size, unsigned long long num);
extern __attribute__((format(printf, 2, 3))) int sprintf(char *buf, const char * fmt, ...);
extern __attribute__((format(printf, 2, 0))) int vsprintf(char *buf, const char *, va_list);
extern __attribute__((format(printf, 3, 4)))
int snprintf(char *buf, size_t size, const char *fmt, ...);
extern __attribute__((format(printf, 3, 0)))
int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
extern __attribute__((format(printf, 3, 4)))
int scnprintf(char *buf, size_t size, const char *fmt, ...);
extern __attribute__((format(printf, 3, 0)))
int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
extern __attribute__((format(printf, 2, 3)))
char *kasprintf(gfp_t gfp, const char *fmt, ...);
extern char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
extern __attribute__((format(scanf, 2, 3)))
int sscanf(const char *, const char *, ...);
extern __attribute__((format(scanf, 2, 0)))
int vsscanf(const char *, const char *, va_list);
extern int get_option(char **str, int *pint);
extern char *get_options(const char *str, int nints, int *ints);
extern unsigned long long memparse(const char *ptr, char **retptr);
extern bool parse_option_str(const char *str, const char *option);
extern int core_kernel_text(unsigned long addr);
extern int core_kernel_data(unsigned long addr);
extern int __kernel_text_address(unsigned long addr);
extern int kernel_text_address(unsigned long addr);
extern int func_ptr_is_kernel_text(void *ptr);
struct pid;
extern struct pid *session_of_pgrp(struct pid *pgrp);
unsigned long int_sqrt(unsigned long);
extern void bust_spinlocks(int yes);
extern int oops_in_progress;
extern int panic_timeout;
extern int panic_on_oops;
extern int panic_on_unrecovered_nmi;
extern int panic_on_io_nmi;
extern int sysctl_panic_on_stackoverflow;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_arch_panic_timeout(int timeout, int arch_default_timeout)
{
if (panic_timeout == arch_default_timeout)
panic_timeout = timeout;
}
extern const char *print_tainted(void);
enum lockdep_ok {
LOCKDEP_STILL_OK,
LOCKDEP_NOW_UNRELIABLE
};
extern void add_taint(unsigned flag, enum lockdep_ok);
extern int test_taint(unsigned flag);
extern unsigned long get_taint(void);
extern int root_mountflags;
extern bool early_boot_irqs_disabled;
extern enum system_states {
SYSTEM_BOOTING,
SYSTEM_RUNNING,
SYSTEM_HALT,
SYSTEM_POWER_OFF,
SYSTEM_RESTART,
} system_state;
# 506 "include/linux/kernel.h"
extern const char hex_asc[];
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) char *hex_byte_pack(char *buf, u8 byte)
{
*buf++ = hex_asc[((byte) & 0xf0) >> 4];
*buf++ = hex_asc[((byte) & 0x0f)];
return buf;
}
extern const char hex_asc_upper[];
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) char *hex_byte_pack_upper(char *buf, u8 byte)
{
*buf++ = hex_asc_upper[((byte) & 0xf0) >> 4];
*buf++ = hex_asc_upper[((byte) & 0x0f)];
return buf;
}
extern int hex_to_bin(char ch);
extern int __attribute__((warn_unused_result)) hex2bin(u8 *dst, const char *src, size_t count);
extern char *bin2hex(char *dst, const void *src, size_t count);
bool mac_pton(const char *s, u8 *mac);
# 557 "include/linux/kernel.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tracing_off_permanent(void) { }
enum ftrace_dump_mode {
DUMP_NONE,
DUMP_ALL,
DUMP_ORIG,
};
# 710 "include/linux/kernel.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tracing_start(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tracing_stop(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void trace_dump_stack(int skip) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tracing_on(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tracing_off(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int tracing_is_on(void) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tracing_snapshot(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tracing_snapshot_alloc(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((format(printf, 1, 2)))
int trace_printk(const char *fmt, ...)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
ftrace_vprintk(const char *fmt, va_list ap)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { }
# 2 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "include/linux/slab.h" 1
# 14 "include/linux/slab.h"
# 1 "include/linux/gfp.h" 1
# 1 "include/linux/mmdebug.h" 1
struct page;
struct vm_area_struct;
struct mm_struct;
extern void dump_page(struct page *page, const char *reason);
extern void dump_page_badflags(struct page *page, const char *reason,
unsigned long badflags);
void dump_vma(const struct vm_area_struct *vma);
void dump_mm(const struct mm_struct *mm);
# 5 "include/linux/gfp.h" 2
# 1 "include/linux/mmzone.h" 1
# 1 "include/linux/spinlock.h" 1
# 50 "include/linux/spinlock.h"
# 1 "include/linux/preempt.h" 1
# 10 "include/linux/preempt.h"
# 1 "include/linux/list.h" 1
# 1 "include/linux/poison.h" 1
# 7 "include/linux/list.h" 2
# 25 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void INIT_LIST_HEAD(struct list_head *list)
{
list->next = list;
list->prev = list;
}
# 38 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __list_add(struct list_head *new,
struct list_head *prev,
struct list_head *next)
{
next->prev = new;
new->next = next;
new->prev = prev;
prev->next = new;
}
# 61 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_add(struct list_head *new, struct list_head *head)
{
__list_add(new, head, head->next);
}
# 75 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_add_tail(struct list_head *new, struct list_head *head)
{
__list_add(new, head->prev, head);
}
# 87 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __list_del(struct list_head * prev, struct list_head * next)
{
next->prev = prev;
prev->next = next;
}
# 100 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __list_del_entry(struct list_head *entry)
{
__list_del(entry->prev, entry->next);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_del(struct list_head *entry)
{
__list_del(entry->prev, entry->next);
entry->next = ((void *) 0x00100100 + 0);
entry->prev = ((void *) 0x00200200 + 0);
}
# 123 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_replace(struct list_head *old,
struct list_head *new)
{
new->next = old->next;
new->next->prev = new;
new->prev = old->prev;
new->prev->next = new;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_replace_init(struct list_head *old,
struct list_head *new)
{
list_replace(old, new);
INIT_LIST_HEAD(old);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_del_init(struct list_head *entry)
{
__list_del_entry(entry);
INIT_LIST_HEAD(entry);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_move(struct list_head *list, struct list_head *head)
{
__list_del_entry(list);
list_add(list, head);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_move_tail(struct list_head *list,
struct list_head *head)
{
__list_del_entry(list);
list_add_tail(list, head);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int list_is_last(const struct list_head *list,
const struct list_head *head)
{
return list->next == head;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int list_empty(const struct list_head *head)
{
return head->next == head;
}
# 205 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int list_empty_careful(const struct list_head *head)
{
struct list_head *next = head->next;
return (next == head) && (next == head->prev);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_rotate_left(struct list_head *head)
{
struct list_head *first;
if (!list_empty(head)) {
first = head->next;
list_move_tail(first, head);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int list_is_singular(const struct list_head *head)
{
return !list_empty(head) && (head->next == head->prev);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __list_cut_position(struct list_head *list,
struct list_head *head, struct list_head *entry)
{
struct list_head *new_first = entry->next;
list->next = head->next;
list->next->prev = list;
list->prev = entry;
entry->next = list;
head->next = new_first;
new_first->prev = head;
}
# 260 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_cut_position(struct list_head *list,
struct list_head *head, struct list_head *entry)
{
if (list_empty(head))
return;
if (list_is_singular(head) &&
(head->next != entry && head != entry))
return;
if (entry == head)
INIT_LIST_HEAD(list);
else
__list_cut_position(list, head, entry);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __list_splice(const struct list_head *list,
struct list_head *prev,
struct list_head *next)
{
struct list_head *first = list->next;
struct list_head *last = list->prev;
first->prev = prev;
prev->next = first;
last->next = next;
next->prev = last;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_splice(const struct list_head *list,
struct list_head *head)
{
if (!list_empty(list))
__list_splice(list, head, head->next);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_splice_tail(struct list_head *list,
struct list_head *head)
{
if (!list_empty(list))
__list_splice(list, head->prev, head);
}
# 319 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_splice_init(struct list_head *list,
struct list_head *head)
{
if (!list_empty(list)) {
__list_splice(list, head, head->next);
INIT_LIST_HEAD(list);
}
}
# 336 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_splice_tail_init(struct list_head *list,
struct list_head *head)
{
if (!list_empty(list)) {
__list_splice(list, head->prev, head);
INIT_LIST_HEAD(list);
}
}
# 598 "include/linux/list.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void INIT_HLIST_NODE(struct hlist_node *h)
{
h->next = ((void *)0);
h->pprev = ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hlist_unhashed(const struct hlist_node *h)
{
return !h->pprev;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hlist_empty(const struct hlist_head *h)
{
return !h->first;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __hlist_del(struct hlist_node *n)
{
struct hlist_node *next = n->next;
struct hlist_node **pprev = n->pprev;
*pprev = next;
if (next)
next->pprev = pprev;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_del(struct hlist_node *n)
{
__hlist_del(n);
n->next = ((void *) 0x00100100 + 0);
n->pprev = ((void *) 0x00200200 + 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_del_init(struct hlist_node *n)
{
if (!hlist_unhashed(n)) {
__hlist_del(n);
INIT_HLIST_NODE(n);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
{
struct hlist_node *first = h->first;
n->next = first;
if (first)
first->pprev = &n->next;
h->first = n;
n->pprev = &h->first;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_add_before(struct hlist_node *n,
struct hlist_node *next)
{
n->pprev = next->pprev;
n->next = next;
next->pprev = &n->next;
*(n->pprev) = n;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_add_behind(struct hlist_node *n,
struct hlist_node *prev)
{
n->next = prev->next;
prev->next = n;
n->pprev = &prev->next;
if (n->next)
n->next->pprev = &n->next;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_add_fake(struct hlist_node *n)
{
n->pprev = &n->next;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_move_list(struct hlist_head *old,
struct hlist_head *new)
{
new->first = old->first;
if (new->first)
new->first->pprev = &new->first;
old->first = ((void *)0);
}
# 11 "include/linux/preempt.h" 2
# 1 "arch/mips/include/generated/asm/preempt.h" 1
# 1 "include/asm-generic/preempt.h" 1
# 1 "include/linux/thread_info.h" 1
# 11 "include/linux/thread_info.h"
# 1 "include/linux/bug.h" 1
# 1 "./arch/mips/include/asm/bug.h" 1
# 9 "./arch/mips/include/asm/bug.h"
# 1 "./arch/mips/include/asm/break.h" 1
# 15 "./arch/mips/include/asm/break.h"
# 1 "./arch/mips/include/uapi/asm/break.h" 1
# 16 "./arch/mips/include/asm/break.h" 2
# 10 "./arch/mips/include/asm/bug.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __attribute__((noreturn)) BUG(void)
{
__asm__ __volatile__("break %0" : : "i" (12));
__builtin_unreachable();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __BUG_ON(unsigned long condition)
{
if (__builtin_constant_p(condition)) {
if (condition)
BUG();
else
return;
}
__asm__ __volatile__("tne $0, %0, %1"
: : "r" (condition), "i" (12));
}
# 41 "./arch/mips/include/asm/bug.h"
# 1 "include/asm-generic/bug.h" 1
# 65 "include/asm-generic/bug.h"
extern __attribute__((format(printf, 3, 4)))
void warn_slowpath_fmt(const char *file, const int line,
const char *fmt, ...);
extern __attribute__((format(printf, 4, 5)))
void warn_slowpath_fmt_taint(const char *file, const int line, unsigned taint,
const char *fmt, ...);
extern void warn_slowpath_null(const char *file, const int line);
# 42 "./arch/mips/include/asm/bug.h" 2
# 5 "include/linux/bug.h" 2
enum bug_trap_type {
BUG_TRAP_TYPE_NONE = 0,
BUG_TRAP_TYPE_WARN = 1,
BUG_TRAP_TYPE_BUG = 2,
};
struct pt_regs;
# 105 "include/linux/bug.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum bug_trap_type report_bug(unsigned long bug_addr,
struct pt_regs *regs)
{
return BUG_TRAP_TYPE_BUG;
}
# 12 "include/linux/thread_info.h" 2
struct timespec;
struct compat_timespec;
struct restart_block {
long (*fn)(struct restart_block *);
union {
struct {
u32 *uaddr;
u32 val;
u32 flags;
u32 bitset;
u64 time;
u32 *uaddr2;
} futex;
struct {
clockid_t clockid;
struct timespec *rmtp;
u64 expires;
} nanosleep;
struct {
struct pollfd *ufds;
int nfds;
int has_timeout;
unsigned long tv_sec;
unsigned long tv_nsec;
} poll;
};
};
extern long do_no_restart_syscall(struct restart_block *parm);
# 1 "./arch/mips/include/asm/thread_info.h" 1
# 15 "./arch/mips/include/asm/thread_info.h"
# 1 "./arch/mips/include/asm/processor.h" 1
# 14 "./arch/mips/include/asm/processor.h"
# 1 "include/linux/cpumask.h" 1
# 10 "include/linux/cpumask.h"
# 1 "include/linux/threads.h" 1
# 11 "include/linux/cpumask.h" 2
# 1 "include/linux/bitmap.h" 1
# 91 "include/linux/bitmap.h"
extern int __bitmap_empty(const unsigned long *bitmap, unsigned int nbits);
extern int __bitmap_full(const unsigned long *bitmap, unsigned int nbits);
extern int __bitmap_equal(const unsigned long *bitmap1,
const unsigned long *bitmap2, unsigned int nbits);
extern void __bitmap_complement(unsigned long *dst, const unsigned long *src,
unsigned int nbits);
extern void __bitmap_shift_right(unsigned long *dst,
const unsigned long *src, int shift, int bits);
extern void __bitmap_shift_left(unsigned long *dst,
const unsigned long *src, int shift, int bits);
extern int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1,
const unsigned long *bitmap2, unsigned int nbits);
extern void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1,
const unsigned long *bitmap2, unsigned int nbits);
extern void __bitmap_xor(unsigned long *dst, const unsigned long *bitmap1,
const unsigned long *bitmap2, unsigned int nbits);
extern int __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1,
const unsigned long *bitmap2, unsigned int nbits);
extern int __bitmap_intersects(const unsigned long *bitmap1,
const unsigned long *bitmap2, unsigned int nbits);
extern int __bitmap_subset(const unsigned long *bitmap1,
const unsigned long *bitmap2, unsigned int nbits);
extern int __bitmap_weight(const unsigned long *bitmap, unsigned int nbits);
extern void bitmap_set(unsigned long *map, unsigned int start, int len);
extern void bitmap_clear(unsigned long *map, unsigned int start, int len);
extern unsigned long bitmap_find_next_zero_area(unsigned long *map,
unsigned long size,
unsigned long start,
unsigned int nr,
unsigned long align_mask);
extern int bitmap_scnprintf(char *buf, unsigned int len,
const unsigned long *src, int nbits);
extern int __bitmap_parse(const char *buf, unsigned int buflen, int is_user,
unsigned long *dst, int nbits);
extern int bitmap_parse_user(const char *ubuf, unsigned int ulen,
unsigned long *dst, int nbits);
extern int bitmap_scnlistprintf(char *buf, unsigned int len,
const unsigned long *src, int nbits);
extern int bitmap_parselist(const char *buf, unsigned long *maskp,
int nmaskbits);
extern int bitmap_parselist_user(const char *ubuf, unsigned int ulen,
unsigned long *dst, int nbits);
extern void bitmap_remap(unsigned long *dst, const unsigned long *src,
const unsigned long *old, const unsigned long *new, int bits);
extern int bitmap_bitremap(int oldbit,
const unsigned long *old, const unsigned long *new, int bits);
extern void bitmap_onto(unsigned long *dst, const unsigned long *orig,
const unsigned long *relmap, int bits);
extern void bitmap_fold(unsigned long *dst, const unsigned long *orig,
int sz, int bits);
extern int bitmap_find_free_region(unsigned long *bitmap, unsigned int bits, int order);
extern void bitmap_release_region(unsigned long *bitmap, unsigned int pos, int order);
extern int bitmap_allocate_region(unsigned long *bitmap, unsigned int pos, int order);
extern void bitmap_copy_le(void *dst, const unsigned long *src, int nbits);
extern int bitmap_ord_to_pos(const unsigned long *bitmap, int n, int bits);
# 159 "include/linux/bitmap.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void bitmap_zero(unsigned long *dst, int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
*dst = 0UL;
else {
int len = (((nbits) + (8 * sizeof(long)) - 1) / (8 * sizeof(long))) * sizeof(unsigned long);
memset(dst, 0, len);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void bitmap_fill(unsigned long *dst, int nbits)
{
size_t nlongs = (((nbits) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)));
if (!(__builtin_constant_p(nbits) && (nbits) <= 32)) {
int len = (nlongs - 1) * sizeof(unsigned long);
memset(dst, 0xff, len);
}
dst[nlongs - 1] = ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL );
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void bitmap_copy(unsigned long *dst, const unsigned long *src,
int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
*dst = *src;
else {
int len = (((nbits) + (8 * sizeof(long)) - 1) / (8 * sizeof(long))) * sizeof(unsigned long);
memcpy(dst, src, len);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bitmap_and(unsigned long *dst, const unsigned long *src1,
const unsigned long *src2, unsigned int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
return (*dst = *src1 & *src2 & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL )) != 0;
return __bitmap_and(dst, src1, src2, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void bitmap_or(unsigned long *dst, const unsigned long *src1,
const unsigned long *src2, unsigned int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
*dst = *src1 | *src2;
else
__bitmap_or(dst, src1, src2, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void bitmap_xor(unsigned long *dst, const unsigned long *src1,
const unsigned long *src2, unsigned int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
*dst = *src1 ^ *src2;
else
__bitmap_xor(dst, src1, src2, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bitmap_andnot(unsigned long *dst, const unsigned long *src1,
const unsigned long *src2, unsigned int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
return (*dst = *src1 & ~(*src2) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL )) != 0;
return __bitmap_andnot(dst, src1, src2, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void bitmap_complement(unsigned long *dst, const unsigned long *src,
unsigned int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
*dst = ~(*src);
else
__bitmap_complement(dst, src, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bitmap_equal(const unsigned long *src1,
const unsigned long *src2, unsigned int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
return ! ((*src1 ^ *src2) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL ));
else
return __bitmap_equal(src1, src2, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bitmap_intersects(const unsigned long *src1,
const unsigned long *src2, unsigned int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
return ((*src1 & *src2) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL )) != 0;
else
return __bitmap_intersects(src1, src2, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bitmap_subset(const unsigned long *src1,
const unsigned long *src2, unsigned int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
return ! ((*src1 & ~(*src2)) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL ));
else
return __bitmap_subset(src1, src2, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bitmap_empty(const unsigned long *src, unsigned nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
return ! (*src & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL ));
else
return __bitmap_empty(src, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bitmap_full(const unsigned long *src, unsigned int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
return ! (~(*src) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL ));
else
return __bitmap_full(src, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bitmap_weight(const unsigned long *src, unsigned int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
return hweight_long(*src & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL ));
return __bitmap_weight(src, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void bitmap_shift_right(unsigned long *dst,
const unsigned long *src, int n, int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
*dst = (*src & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL )) >> n;
else
__bitmap_shift_right(dst, src, n, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void bitmap_shift_left(unsigned long *dst,
const unsigned long *src, int n, int nbits)
{
if ((__builtin_constant_p(nbits) && (nbits) <= 32))
*dst = (*src << n) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL );
else
__bitmap_shift_left(dst, src, n, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bitmap_parse(const char *buf, unsigned int buflen,
unsigned long *maskp, int nmaskbits)
{
return __bitmap_parse(buf, buflen, 0, maskp, nmaskbits);
}
# 12 "include/linux/cpumask.h" 2
typedef struct cpumask { unsigned long bits[(((2) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))]; } cpumask_t;
# 28 "include/linux/cpumask.h"
extern int nr_cpu_ids;
# 79 "include/linux/cpumask.h"
extern const struct cpumask *const cpu_possible_mask;
extern const struct cpumask *const cpu_online_mask;
extern const struct cpumask *const cpu_present_mask;
extern const struct cpumask *const cpu_active_mask;
# 105 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int cpumask_check(unsigned int cpu)
{
return cpu;
}
# 165 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int cpumask_first(const struct cpumask *srcp)
{
return find_next_bit((((srcp)->bits)), (2), 0);
}
# 177 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int cpumask_next(int n, const struct cpumask *srcp)
{
if (n != -1)
cpumask_check(n);
return find_next_bit(((srcp)->bits), 2, n+1);
}
# 192 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int cpumask_next_zero(int n, const struct cpumask *srcp)
{
if (n != -1)
cpumask_check(n);
return find_next_zero_bit(((srcp)->bits), 2, n+1);
}
int cpumask_next_and(int n, const struct cpumask *, const struct cpumask *);
int cpumask_any_but(const struct cpumask *mask, unsigned int cpu);
int cpumask_set_cpu_local_first(int i, int numa_node, cpumask_t *dstp);
# 263 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cpumask_set_cpu(unsigned int cpu, struct cpumask *dstp)
{
set_bit(cpumask_check(cpu), ((dstp)->bits));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cpumask_clear_cpu(int cpu, struct cpumask *dstp)
{
clear_bit(cpumask_check(cpu), ((dstp)->bits));
}
# 299 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpumask_test_and_set_cpu(int cpu, struct cpumask *cpumask)
{
return test_and_set_bit(cpumask_check(cpu), ((cpumask)->bits));
}
# 313 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpumask_test_and_clear_cpu(int cpu, struct cpumask *cpumask)
{
return test_and_clear_bit(cpumask_check(cpu), ((cpumask)->bits));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cpumask_setall(struct cpumask *dstp)
{
bitmap_fill(((dstp)->bits), 2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cpumask_clear(struct cpumask *dstp)
{
bitmap_zero(((dstp)->bits), 2);
}
# 344 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpumask_and(struct cpumask *dstp,
const struct cpumask *src1p,
const struct cpumask *src2p)
{
return bitmap_and(((dstp)->bits), ((src1p)->bits),
((src2p)->bits), 2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cpumask_or(struct cpumask *dstp, const struct cpumask *src1p,
const struct cpumask *src2p)
{
bitmap_or(((dstp)->bits), ((src1p)->bits),
((src2p)->bits), 2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cpumask_xor(struct cpumask *dstp,
const struct cpumask *src1p,
const struct cpumask *src2p)
{
bitmap_xor(((dstp)->bits), ((src1p)->bits),
((src2p)->bits), 2);
}
# 387 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpumask_andnot(struct cpumask *dstp,
const struct cpumask *src1p,
const struct cpumask *src2p)
{
return bitmap_andnot(((dstp)->bits), ((src1p)->bits),
((src2p)->bits), 2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cpumask_complement(struct cpumask *dstp,
const struct cpumask *srcp)
{
bitmap_complement(((dstp)->bits), ((srcp)->bits),
2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool cpumask_equal(const struct cpumask *src1p,
const struct cpumask *src2p)
{
return bitmap_equal(((src1p)->bits), ((src2p)->bits),
2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool cpumask_intersects(const struct cpumask *src1p,
const struct cpumask *src2p)
{
return bitmap_intersects(((src1p)->bits), ((src2p)->bits),
2);
}
# 438 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpumask_subset(const struct cpumask *src1p,
const struct cpumask *src2p)
{
return bitmap_subset(((src1p)->bits), ((src2p)->bits),
2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool cpumask_empty(const struct cpumask *srcp)
{
return bitmap_empty(((srcp)->bits), 2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool cpumask_full(const struct cpumask *srcp)
{
return bitmap_full(((srcp)->bits), 2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int cpumask_weight(const struct cpumask *srcp)
{
return bitmap_weight(((srcp)->bits), 2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cpumask_shift_right(struct cpumask *dstp,
const struct cpumask *srcp, int n)
{
bitmap_shift_right(((dstp)->bits), ((srcp)->bits), n,
2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cpumask_shift_left(struct cpumask *dstp,
const struct cpumask *srcp, int n)
{
bitmap_shift_left(((dstp)->bits), ((srcp)->bits), n,
2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cpumask_copy(struct cpumask *dstp,
const struct cpumask *srcp)
{
bitmap_copy(((dstp)->bits), ((srcp)->bits), 2);
}
# 550 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpumask_scnprintf(char *buf, int len,
const struct cpumask *srcp)
{
return bitmap_scnprintf(buf, len, ((srcp)->bits), 2);
}
# 564 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpumask_parse_user(const char *buf, int len,
struct cpumask *dstp)
{
return bitmap_parse_user(buf, len, ((dstp)->bits), 2);
}
# 578 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpumask_parselist_user(const char *buf, int len,
struct cpumask *dstp)
{
return bitmap_parselist_user(buf, len, ((dstp)->bits),
2);
}
# 594 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpulist_scnprintf(char *buf, int len,
const struct cpumask *srcp)
{
return bitmap_scnlistprintf(buf, len, ((srcp)->bits),
2);
}
# 608 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpumask_parse(const char *buf, struct cpumask *dstp)
{
char *nl = strchr(buf, '\n');
unsigned int len = nl ? (unsigned int)(nl - buf) : strlen(buf);
return bitmap_parse(buf, len, ((dstp)->bits), 2);
}
# 623 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpulist_parse(const char *buf, struct cpumask *dstp)
{
return bitmap_parselist(buf, ((dstp)->bits), 2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) size_t cpumask_size(void)
{
return (((2) + (8 * sizeof(long)) - 1) / (8 * sizeof(long))) * sizeof(long);
}
# 691 "include/linux/cpumask.h"
typedef struct cpumask cpumask_var_t[1];
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
{
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags,
int node)
{
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool zalloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
{
cpumask_clear(*mask);
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool zalloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags,
int node)
{
cpumask_clear(*mask);
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void alloc_bootmem_cpumask_var(cpumask_var_t *mask)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void free_cpumask_var(cpumask_var_t mask)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void free_bootmem_cpumask_var(cpumask_var_t mask)
{
}
extern const unsigned long cpu_all_bits[(((2) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
# 745 "include/linux/cpumask.h"
void set_cpu_possible(unsigned int cpu, bool possible);
void set_cpu_present(unsigned int cpu, bool present);
void set_cpu_online(unsigned int cpu, bool online);
void set_cpu_active(unsigned int cpu, bool active);
void init_cpu_present(const struct cpumask *src);
void init_cpu_possible(const struct cpumask *src);
void init_cpu_online(const struct cpumask *src);
# 767 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __check_is_bitmap(const unsigned long *bitmap)
{
return 1;
}
# 779 "include/linux/cpumask.h"
extern const unsigned long
cpu_bit_bitmap[32 +1][(((2) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const struct cpumask *get_cpu_mask(unsigned int cpu)
{
const unsigned long *p = cpu_bit_bitmap[1 + cpu % 32];
p -= cpu / 32;
return ((struct cpumask *)(1 ? (p) : (void *)sizeof(__check_is_bitmap(p))));
}
# 850 "include/linux/cpumask.h"
int __first_cpu(const cpumask_t *srcp);
int __next_cpu(int n, const cpumask_t *srcp);
# 879 "include/linux/cpumask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __cpu_set(int cpu, volatile cpumask_t *dstp)
{
set_bit(cpu, dstp->bits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __cpu_clear(int cpu, volatile cpumask_t *dstp)
{
clear_bit(cpu, dstp->bits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __cpus_setall(cpumask_t *dstp, int nbits)
{
bitmap_fill(dstp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __cpus_clear(cpumask_t *dstp, int nbits)
{
bitmap_zero(dstp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __cpu_test_and_set(int cpu, cpumask_t *addr)
{
return test_and_set_bit(cpu, addr->bits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __cpus_and(cpumask_t *dstp, const cpumask_t *src1p,
const cpumask_t *src2p, int nbits)
{
return bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __cpus_or(cpumask_t *dstp, const cpumask_t *src1p,
const cpumask_t *src2p, int nbits)
{
bitmap_or(dstp->bits, src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __cpus_xor(cpumask_t *dstp, const cpumask_t *src1p,
const cpumask_t *src2p, int nbits)
{
bitmap_xor(dstp->bits, src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __cpus_andnot(cpumask_t *dstp, const cpumask_t *src1p,
const cpumask_t *src2p, int nbits)
{
return bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __cpus_equal(const cpumask_t *src1p,
const cpumask_t *src2p, int nbits)
{
return bitmap_equal(src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __cpus_intersects(const cpumask_t *src1p,
const cpumask_t *src2p, int nbits)
{
return bitmap_intersects(src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __cpus_subset(const cpumask_t *src1p,
const cpumask_t *src2p, int nbits)
{
return bitmap_subset(src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __cpus_empty(const cpumask_t *srcp, int nbits)
{
return bitmap_empty(srcp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __cpus_weight(const cpumask_t *srcp, int nbits)
{
return bitmap_weight(srcp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __cpus_shift_left(cpumask_t *dstp,
const cpumask_t *srcp, int n, int nbits)
{
bitmap_shift_left(dstp->bits, srcp->bits, n, nbits);
}
# 15 "./arch/mips/include/asm/processor.h" 2
# 1 "./arch/mips/include/uapi/asm/cachectl.h" 1
# 18 "./arch/mips/include/asm/processor.h" 2
# 1 "./arch/mips/include/asm/mipsregs.h" 1
# 18 "./arch/mips/include/asm/mipsregs.h"
# 1 "./arch/mips/include/asm/hazards.h" 1
# 360 "./arch/mips/include/asm/hazards.h"
extern void mips_ihb(void);
# 19 "./arch/mips/include/asm/mipsregs.h" 2
# 790 "./arch/mips/include/asm/mipsregs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int mm_insn_16bit(u16 insn)
{
u16 opcode = (insn >> 10) & 0x7;
return (opcode >= 1 && opcode <= 3) ? 1 : 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tlbinvf(void)
{
__asm__ __volatile__(
".set push\n\t"
".set noreorder\n\t"
".word 0x42000004\n\t"
".set pop");
}
# 1791 "./arch/mips/include/asm/mipsregs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tlb_probe(void)
{
__asm__ __volatile__(
".set noreorder\n\t"
"tlbp\n\t"
".set reorder");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tlb_read(void)
{
# 1818 "./arch/mips/include/asm/mipsregs.h"
__asm__ __volatile__(
".set noreorder\n\t"
"tlbr\n\t"
".set reorder");
# 1834 "./arch/mips/include/asm/mipsregs.h"
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tlb_write_indexed(void)
{
__asm__ __volatile__(
".set noreorder\n\t"
"tlbwi\n\t"
".set reorder");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tlb_write_random(void)
{
__asm__ __volatile__(
".set noreorder\n\t"
"tlbwr\n\t"
".set reorder");
}
# 1893 "./arch/mips/include/asm/mipsregs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_status(unsigned int set) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$12" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$12" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$12" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$12" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_status(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$12" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$12" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$12" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$12" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_status(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$12" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$12" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$12" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$12" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_cause(unsigned int set) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$13" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$13" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$13" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$13" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_cause(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$13" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$13" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$13" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$13" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_cause(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$13" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$13" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$13" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$13" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_config(unsigned int set) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$16" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$16" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$16" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$16" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_config(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$16" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$16" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$16" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$16" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_config(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$16" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$16" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$16" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$16" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_config5(unsigned int set) { unsigned int res, new; res = ({ int __res; if (5 == 0) __asm__ __volatile__( "mfc0\t%0, " "$16" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$16" ", " "5" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (5 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$16" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$16" ", " "5" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_config5(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (5 == 0) __asm__ __volatile__( "mfc0\t%0, " "$16" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$16" ", " "5" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (5 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$16" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$16" ", " "5" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_config5(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (5 == 0) __asm__ __volatile__( "mfc0\t%0, " "$16" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$16" ", " "5" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (5 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$16" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$16" ", " "5" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_intcontrol(unsigned int set) { unsigned int res, new; res = ({ int __res; __asm__ __volatile__( "cfc0\t%0, " "$20" "\n\t" : "=r" (__res)); __res; }); new = res | set; do { __asm__ __volatile__( "ctc0\t%z0, " "$20" "\n\t" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_intcontrol(unsigned int clear) { unsigned int res, new; res = ({ int __res; __asm__ __volatile__( "cfc0\t%0, " "$20" "\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { __asm__ __volatile__( "ctc0\t%z0, " "$20" "\n\t" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_intcontrol(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; __asm__ __volatile__( "cfc0\t%0, " "$20" "\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { __asm__ __volatile__( "ctc0\t%z0, " "$20" "\n\t" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_intctl(unsigned int set) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$12" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$12" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$12" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$12" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_intctl(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$12" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$12" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$12" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$12" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_intctl(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$12" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$12" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$12" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$12" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_srsmap(unsigned int set) { unsigned int res, new; res = ({ int __res; if (3 == 0) __asm__ __volatile__( "mfc0\t%0, " "$12" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$12" ", " "3" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (3 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$12" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$12" ", " "3" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_srsmap(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (3 == 0) __asm__ __volatile__( "mfc0\t%0, " "$12" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$12" ", " "3" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (3 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$12" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$12" ", " "3" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_srsmap(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (3 == 0) __asm__ __volatile__( "mfc0\t%0, " "$12" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$12" ", " "3" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (3 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$12" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$12" ", " "3" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_brcm_config_0(unsigned int set) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_brcm_config_0(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_brcm_config_0(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_brcm_bus_pll(unsigned int set) { unsigned int res, new; res = ({ int __res; if (4 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "4" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (4 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "4" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_brcm_bus_pll(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (4 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "4" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (4 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "4" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_brcm_bus_pll(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (4 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "4" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (4 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "4" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_brcm_reset(unsigned int set) { unsigned int res, new; res = ({ int __res; if (5 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "5" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (5 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "5" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_brcm_reset(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (5 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "5" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (5 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "5" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_brcm_reset(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (5 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "5" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (5 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "5" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_brcm_cmt_intr(unsigned int set) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_brcm_cmt_intr(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_brcm_cmt_intr(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_brcm_cmt_ctrl(unsigned int set) { unsigned int res, new; res = ({ int __res; if (2 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "2" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (2 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "2" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_brcm_cmt_ctrl(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (2 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "2" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (2 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "2" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_brcm_cmt_ctrl(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (2 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "2" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (2 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "2" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_brcm_config(unsigned int set) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_brcm_config(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_brcm_config(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (0 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "0" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_brcm_mode(unsigned int set) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_brcm_mode(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_brcm_mode(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$22" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$22" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$22" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$22" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int get_ebase_cpunum(void)
{
return ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$15" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$15" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }) & 0x3ff;
}
# 21 "./arch/mips/include/asm/processor.h" 2
# 1 "./arch/mips/include/asm/prefetch.h" 1
# 22 "./arch/mips/include/asm/processor.h" 2
# 32 "./arch/mips/include/asm/processor.h"
extern unsigned int vced_count, vcei_count;
# 106 "./arch/mips/include/asm/processor.h"
union fpureg {
__u32 val32[64 / 32];
__u64 val64[64 / 64];
};
# 129 "./arch/mips/include/asm/processor.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 get_fpr32(union fpureg *fpr, unsigned idx) { return fpr->val32[((64 / (32)) - 1 - (idx))]; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_fpr32(union fpureg *fpr, unsigned idx, u32 val) { fpr->val32[((64 / (32)) - 1 - (idx))] = val; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 get_fpr64(union fpureg *fpr, unsigned idx) { return fpr->val64[((64 / (64)) - 1 - (idx))]; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_fpr64(union fpureg *fpr, unsigned idx, u64 val) { fpr->val64[((64 / (64)) - 1 - (idx))] = val; }
struct mips_fpu_struct {
union fpureg fpr[32];
unsigned int fcr31;
unsigned int msacsr;
};
typedef __u32 dspreg_t;
struct mips_dsp_state {
dspreg_t dspr[6];
unsigned int dspcontrol;
};
struct mips3264_watch_reg_state {
unsigned long watchlo[4];
u16 watchhi[4];
};
union mips_watch_reg_state {
struct mips3264_watch_reg_state mips3264;
};
# 237 "./arch/mips/include/asm/processor.h"
typedef struct {
unsigned long seg;
} mm_segment_t;
# 249 "./arch/mips/include/asm/processor.h"
struct mips_abi;
struct thread_struct {
unsigned long reg16;
unsigned long reg17, reg18, reg19, reg20, reg21, reg22, reg23;
unsigned long reg29, reg30, reg31;
unsigned long cp0_status;
struct mips_fpu_struct fpu ;
unsigned long emulated_fp;
cpumask_t user_cpus_allowed;
struct mips_dsp_state dsp;
union mips_watch_reg_state watch;
unsigned long cp0_badvaddr;
unsigned long cp0_baduaddr;
unsigned long error_code;
struct mips_abi *abi;
};
# 354 "./arch/mips/include/asm/processor.h"
struct task_struct;
extern unsigned long thread_saved_pc(struct task_struct *tsk);
extern void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp);
unsigned long get_wchan(struct task_struct *p);
# 16 "./arch/mips/include/asm/thread_info.h" 2
# 24 "./arch/mips/include/asm/thread_info.h"
struct thread_info {
struct task_struct *task;
struct exec_domain *exec_domain;
unsigned long flags;
unsigned long tp_value;
__u32 cpu;
int preempt_count;
mm_segment_t addr_limit;
struct restart_block restart_block;
struct pt_regs *regs;
};
# 61 "./arch/mips/include/asm/thread_info.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct thread_info *current_thread_info(void)
{
register struct thread_info *__current_thread_info __asm__("$28");
return __current_thread_info;
}
# 55 "include/linux/thread_info.h" 2
# 69 "include/linux/thread_info.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_ti_thread_flag(struct thread_info *ti, int flag)
{
set_bit(flag, (unsigned long *)&ti->flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clear_ti_thread_flag(struct thread_info *ti, int flag)
{
clear_bit(flag, (unsigned long *)&ti->flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_and_set_ti_thread_flag(struct thread_info *ti, int flag)
{
return test_and_set_bit(flag, (unsigned long *)&ti->flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_and_clear_ti_thread_flag(struct thread_info *ti, int flag)
{
return test_and_clear_bit(flag, (unsigned long *)&ti->flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_ti_thread_flag(struct thread_info *ti, int flag)
{
return test_bit(flag, (unsigned long *)&ti->flags);
}
# 125 "include/linux/thread_info.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_restore_sigmask(void)
{
set_ti_thread_flag(current_thread_info(), 9);
({ int __ret_warn_on = !!(!test_ti_thread_flag(current_thread_info(), 1)); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("include/linux/thread_info.h", 128); __builtin_expect(!!(__ret_warn_on), 0); });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clear_restore_sigmask(void)
{
clear_ti_thread_flag(current_thread_info(), 9);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool test_restore_sigmask(void)
{
return test_ti_thread_flag(current_thread_info(), 9);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool test_and_clear_restore_sigmask(void)
{
return test_and_clear_ti_thread_flag(current_thread_info(), 9);
}
# 5 "include/asm-generic/preempt.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) int preempt_count(void)
{
return current_thread_info()->preempt_count;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) int *preempt_count_ptr(void)
{
return &current_thread_info()->preempt_count;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void preempt_count_set(int pc)
{
*preempt_count_ptr() = pc;
}
# 37 "include/asm-generic/preempt.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void set_preempt_need_resched(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void clear_preempt_need_resched(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) bool test_preempt_need_resched(void)
{
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void __preempt_count_add(int val)
{
*preempt_count_ptr() += val;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void __preempt_count_sub(int val)
{
*preempt_count_ptr() -= val;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) bool __preempt_count_dec_and_test(void)
{
return !--*preempt_count_ptr() && test_ti_thread_flag(current_thread_info(), 2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) bool should_resched(void)
{
return __builtin_expect(!!(!preempt_count() && test_ti_thread_flag(current_thread_info(), 2)), 0);
}
# 1 "arch/mips/include/generated/asm/preempt.h" 2
# 19 "include/linux/preempt.h" 2
# 51 "include/linux/spinlock.h" 2
# 1 "include/linux/irqflags.h" 1
# 15 "include/linux/irqflags.h"
# 1 "./arch/mips/include/asm/irqflags.h" 1
# 22 "./arch/mips/include/asm/irqflags.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_local_irq_disable(void)
{
__asm__ __volatile__(
" .set push \n"
" .set noat \n"
" di \n"
" " "sll $0, $0, 3" " \n"
" .set pop \n"
:
:
: "memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long arch_local_irq_save(void)
{
unsigned long flags;
asm __volatile__(
" .set push \n"
" .set reorder \n"
" .set noat \n"
" di %[flags] \n"
" andi %[flags], 1 \n"
" " "sll $0, $0, 3" " \n"
" .set pop \n"
: [flags] "=r" (flags)
:
: "memory");
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_local_irq_restore(unsigned long flags)
{
unsigned long __tmp1;
__asm__ __volatile__(
" .set push \n"
" .set noreorder \n"
" .set noat \n"
" beqz %[flags], 1f \n"
" di \n"
" ei \n"
"1: \n"
# 79 "./arch/mips/include/asm/irqflags.h"
" " "sll $0, $0, 3" " \n"
" .set pop \n"
: [flags] "=r" (__tmp1)
: "0" (flags)
: "memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __arch_local_irq_restore(unsigned long flags)
{
__asm__ __volatile__(
" .set push \n"
" .set noreorder \n"
" .set noat \n"
" beqz %[flags], 1f \n"
" di \n"
" ei \n"
"1: \n"
# 109 "./arch/mips/include/asm/irqflags.h"
" " "sll $0, $0, 3" " \n"
" .set pop \n"
: [flags] "=r" (flags)
: "0" (flags)
: "memory");
}
# 123 "./arch/mips/include/asm/irqflags.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_local_irq_enable(void)
{
__asm__ __volatile__(
" .set push \n"
" .set reorder \n"
" .set noat \n"
" ei \n"
" " "sll $0, $0, 3" " \n"
" .set pop \n"
:
:
: "memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long arch_local_save_flags(void)
{
unsigned long flags;
asm __volatile__(
" .set push \n"
" .set reorder \n"
" mfc0 %[flags], $12 \n"
" .set pop \n"
: [flags] "=r" (flags));
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_irqs_disabled_flags(unsigned long flags)
{
return !(flags & 1);
}
# 16 "include/linux/irqflags.h" 2
# 54 "include/linux/spinlock.h" 2
# 1 "include/linux/bottom_half.h" 1
# 1 "include/linux/preempt_mask.h" 1
# 6 "include/linux/bottom_half.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void __local_bh_disable_ip(unsigned long ip, unsigned int cnt)
{
__preempt_count_add(cnt);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void local_bh_disable(void)
{
__local_bh_disable_ip(({ __label__ __here; __here: (unsigned long)&&__here; }), (2 * (1UL << (0 + 8))));
}
extern void _local_bh_enable(void);
extern void __local_bh_enable_ip(unsigned long ip, unsigned int cnt);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void local_bh_enable_ip(unsigned long ip)
{
__local_bh_enable_ip(ip, (2 * (1UL << (0 + 8))));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void local_bh_enable(void)
{
__local_bh_enable_ip(({ __label__ __here; __here: (unsigned long)&&__here; }), (2 * (1UL << (0 + 8))));
}
# 58 "include/linux/spinlock.h" 2
# 81 "include/linux/spinlock.h"
# 1 "include/linux/spinlock_types.h" 1
# 13 "include/linux/spinlock_types.h"
# 1 "./arch/mips/include/asm/spinlock_types.h" 1
# 12 "./arch/mips/include/asm/spinlock_types.h"
typedef union {
u32 lock;
struct {
u16 ticket;
u16 serving_now;
} h;
} arch_spinlock_t;
typedef struct {
volatile unsigned int lock;
} arch_rwlock_t;
# 14 "include/linux/spinlock_types.h" 2
# 1 "include/linux/lockdep.h" 1
# 12 "include/linux/lockdep.h"
struct task_struct;
struct lockdep_map;
extern int prove_locking;
extern int lock_stat;
# 373 "include/linux/lockdep.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void lockdep_off(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void lockdep_on(void)
{
}
# 414 "include/linux/lockdep.h"
struct lock_class_key { };
# 469 "include/linux/lockdep.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void print_irqtrace_events(struct task_struct *curr)
{
}
# 19 "include/linux/spinlock_types.h" 2
typedef struct raw_spinlock {
arch_spinlock_t raw_lock;
# 32 "include/linux/spinlock_types.h"
} raw_spinlock_t;
# 64 "include/linux/spinlock_types.h"
typedef struct spinlock {
union {
struct raw_spinlock rlock;
# 75 "include/linux/spinlock_types.h"
};
} spinlock_t;
# 94 "include/linux/spinlock_types.h"
# 1 "include/linux/rwlock_types.h" 1
# 11 "include/linux/rwlock_types.h"
typedef struct {
arch_rwlock_t raw_lock;
# 23 "include/linux/rwlock_types.h"
} rwlock_t;
# 95 "include/linux/spinlock_types.h" 2
# 82 "include/linux/spinlock.h" 2
# 1 "./arch/mips/include/asm/spinlock.h" 1
# 37 "./arch/mips/include/asm/spinlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_spin_is_locked(arch_spinlock_t *lock)
{
u32 counters = (*(volatile typeof(lock->lock) *)&(lock->lock));
return ((counters >> 16) ^ counters) & 0xffff;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_spin_is_contended(arch_spinlock_t *lock)
{
u32 counters = (*(volatile typeof(lock->lock) *)&(lock->lock));
return (((counters >> 16) - counters) & 0xffff) > 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_spin_lock(arch_spinlock_t *lock)
{
int my_ticket;
int tmp;
int inc = 0x10000;
if (0) {
__asm__ __volatile__ (
" .set push # arch_spin_lock \n"
" .set noreorder \n"
" \n"
"1: ll %[ticket], %[ticket_ptr] \n"
" addu %[my_ticket], %[ticket], %[inc] \n"
" sc %[my_ticket], %[ticket_ptr] \n"
" beqzl %[my_ticket], 1b \n"
" nop \n"
" srl %[my_ticket], %[ticket], 16 \n"
" andi %[ticket], %[ticket], 0xffff \n"
" bne %[ticket], %[my_ticket], 4f \n"
" subu %[ticket], %[my_ticket], %[ticket] \n"
"2: \n"
" .subsection 2 \n"
"4: andi %[ticket], %[ticket], 0xffff \n"
" sll %[ticket], 5 \n"
" \n"
"6: bnez %[ticket], 6b \n"
" subu %[ticket], 1 \n"
" \n"
" lhu %[ticket], %[serving_now_ptr] \n"
" beq %[ticket], %[my_ticket], 2b \n"
" subu %[ticket], %[my_ticket], %[ticket] \n"
" b 4b \n"
" subu %[ticket], %[ticket], 1 \n"
" .previous \n"
" .set pop \n"
: [ticket_ptr] "+m" (lock->lock),
[serving_now_ptr] "+m" (lock->h.serving_now),
[ticket] "=&r" (tmp),
[my_ticket] "=&r" (my_ticket)
: [inc] "r" (inc));
} else {
__asm__ __volatile__ (
" .set push # arch_spin_lock \n"
" .set noreorder \n"
" \n"
"1: ll %[ticket], %[ticket_ptr] \n"
" addu %[my_ticket], %[ticket], %[inc] \n"
" sc %[my_ticket], %[ticket_ptr] \n"
" beqz %[my_ticket], 1b \n"
" srl %[my_ticket], %[ticket], 16 \n"
" andi %[ticket], %[ticket], 0xffff \n"
" bne %[ticket], %[my_ticket], 4f \n"
" subu %[ticket], %[my_ticket], %[ticket] \n"
"2: \n"
" .subsection 2 \n"
"4: andi %[ticket], %[ticket], 0x1fff \n"
" sll %[ticket], 5 \n"
" \n"
"6: bnez %[ticket], 6b \n"
" subu %[ticket], 1 \n"
" \n"
" lhu %[ticket], %[serving_now_ptr] \n"
" beq %[ticket], %[my_ticket], 2b \n"
" subu %[ticket], %[my_ticket], %[ticket] \n"
" b 4b \n"
" subu %[ticket], %[ticket], 1 \n"
" .previous \n"
" .set pop \n"
: [ticket_ptr] "+m" (lock->lock),
[serving_now_ptr] "+m" (lock->h.serving_now),
[ticket] "=&r" (tmp),
[my_ticket] "=&r" (my_ticket)
: [inc] "r" (inc));
}
__asm__ __volatile__(" \n" : : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_spin_unlock(arch_spinlock_t *lock)
{
unsigned int serving_now = lock->h.serving_now + 1;
__asm__ __volatile__( ".set push\n\t" ".set noreorder\n\t" ".set mips2\n\t" "sync\n\t" ".set pop" : : : "memory");
lock->h.serving_now = (u16)serving_now;
__asm__ __volatile__( ".set push\n\t" ".set noreorder\n\t" ".set mips2\n\t" "sync\n\t" ".set pop" : : : "memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int arch_spin_trylock(arch_spinlock_t *lock)
{
int tmp, tmp2, tmp3;
int inc = 0x10000;
if (0) {
__asm__ __volatile__ (
" .set push # arch_spin_trylock \n"
" .set noreorder \n"
" \n"
"1: ll %[ticket], %[ticket_ptr] \n"
" srl %[my_ticket], %[ticket], 16 \n"
" andi %[now_serving], %[ticket], 0xffff \n"
" bne %[my_ticket], %[now_serving], 3f \n"
" addu %[ticket], %[ticket], %[inc] \n"
" sc %[ticket], %[ticket_ptr] \n"
" beqzl %[ticket], 1b \n"
" li %[ticket], 1 \n"
"2: \n"
" .subsection 2 \n"
"3: b 2b \n"
" li %[ticket], 0 \n"
" .previous \n"
" .set pop \n"
: [ticket_ptr] "+m" (lock->lock),
[ticket] "=&r" (tmp),
[my_ticket] "=&r" (tmp2),
[now_serving] "=&r" (tmp3)
: [inc] "r" (inc));
} else {
__asm__ __volatile__ (
" .set push # arch_spin_trylock \n"
" .set noreorder \n"
" \n"
"1: ll %[ticket], %[ticket_ptr] \n"
" srl %[my_ticket], %[ticket], 16 \n"
" andi %[now_serving], %[ticket], 0xffff \n"
" bne %[my_ticket], %[now_serving], 3f \n"
" addu %[ticket], %[ticket], %[inc] \n"
" sc %[ticket], %[ticket_ptr] \n"
" beqz %[ticket], 1b \n"
" li %[ticket], 1 \n"
"2: \n"
" .subsection 2 \n"
"3: b 2b \n"
" li %[ticket], 0 \n"
" .previous \n"
" .set pop \n"
: [ticket_ptr] "+m" (lock->lock),
[ticket] "=&r" (tmp),
[my_ticket] "=&r" (tmp2),
[now_serving] "=&r" (tmp3)
: [inc] "r" (inc));
}
__asm__ __volatile__(" \n" : : :"memory");
return tmp;
}
# 223 "./arch/mips/include/asm/spinlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_read_lock(arch_rwlock_t *rw)
{
unsigned int tmp;
if (0) {
__asm__ __volatile__(
" .set noreorder # arch_read_lock \n"
"1: ll %1, %2 \n"
" bltz %1, 1b \n"
" addu %1, 1 \n"
" sc %1, %0 \n"
" beqzl %1, 1b \n"
" nop \n"
" .set reorder \n"
: "=m" (rw->lock), "=&r" (tmp)
: "m" (rw->lock)
: "memory");
} else {
do {
__asm__ __volatile__(
"1: ll %1, %2 # arch_read_lock \n"
" bltz %1, 1b \n"
" addu %1, 1 \n"
"2: sc %1, %0 \n"
: "=m" (rw->lock), "=&r" (tmp)
: "m" (rw->lock)
: "memory");
} while (__builtin_expect(!!(!tmp), 0));
}
__asm__ __volatile__(" \n" : : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_read_unlock(arch_rwlock_t *rw)
{
unsigned int tmp;
__asm__ __volatile__(" \n" : : :"memory");
if (0) {
__asm__ __volatile__(
"1: ll %1, %2 # arch_read_unlock \n"
" sub %1, 1 \n"
" sc %1, %0 \n"
" beqzl %1, 1b \n"
: "=m" (rw->lock), "=&r" (tmp)
: "m" (rw->lock)
: "memory");
} else {
do {
__asm__ __volatile__(
"1: ll %1, %2 # arch_read_unlock \n"
" sub %1, 1 \n"
" sc %1, %0 \n"
: "=m" (rw->lock), "=&r" (tmp)
: "m" (rw->lock)
: "memory");
} while (__builtin_expect(!!(!tmp), 0));
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_write_lock(arch_rwlock_t *rw)
{
unsigned int tmp;
if (0) {
__asm__ __volatile__(
" .set noreorder # arch_write_lock \n"
"1: ll %1, %2 \n"
" bnez %1, 1b \n"
" lui %1, 0x8000 \n"
" sc %1, %0 \n"
" beqzl %1, 1b \n"
" nop \n"
" .set reorder \n"
: "=m" (rw->lock), "=&r" (tmp)
: "m" (rw->lock)
: "memory");
} else {
do {
__asm__ __volatile__(
"1: ll %1, %2 # arch_write_lock \n"
" bnez %1, 1b \n"
" lui %1, 0x8000 \n"
"2: sc %1, %0 \n"
: "=m" (rw->lock), "=&r" (tmp)
: "m" (rw->lock)
: "memory");
} while (__builtin_expect(!!(!tmp), 0));
}
__asm__ __volatile__(" \n" : : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_write_unlock(arch_rwlock_t *rw)
{
__asm__ __volatile__("": : :"memory");
__asm__ __volatile__(
" # arch_write_unlock \n"
" sw $0, %0 \n"
: "=m" (rw->lock)
: "m" (rw->lock)
: "memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_read_trylock(arch_rwlock_t *rw)
{
unsigned int tmp;
int ret;
if (0) {
__asm__ __volatile__(
" .set noreorder # arch_read_trylock \n"
" li %2, 0 \n"
"1: ll %1, %3 \n"
" bltz %1, 2f \n"
" addu %1, 1 \n"
" sc %1, %0 \n"
" .set reorder \n"
" beqzl %1, 1b \n"
" nop \n"
" \n"
" li %2, 1 \n"
"2: \n"
: "=m" (rw->lock), "=&r" (tmp), "=&r" (ret)
: "m" (rw->lock)
: "memory");
} else {
__asm__ __volatile__(
" .set noreorder # arch_read_trylock \n"
" li %2, 0 \n"
"1: ll %1, %3 \n"
" bltz %1, 2f \n"
" addu %1, 1 \n"
" sc %1, %0 \n"
" beqz %1, 1b \n"
" nop \n"
" .set reorder \n"
" \n"
" li %2, 1 \n"
"2: \n"
: "=m" (rw->lock), "=&r" (tmp), "=&r" (ret)
: "m" (rw->lock)
: "memory");
}
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_write_trylock(arch_rwlock_t *rw)
{
unsigned int tmp;
int ret;
if (0) {
__asm__ __volatile__(
" .set noreorder # arch_write_trylock \n"
" li %2, 0 \n"
"1: ll %1, %3 \n"
" bnez %1, 2f \n"
" lui %1, 0x8000 \n"
" sc %1, %0 \n"
" beqzl %1, 1b \n"
" nop \n"
" \n"
" li %2, 1 \n"
" .set reorder \n"
"2: \n"
: "=m" (rw->lock), "=&r" (tmp), "=&r" (ret)
: "m" (rw->lock)
: "memory");
} else {
do {
__asm__ __volatile__(
" ll %1, %3 # arch_write_trylock \n"
" li %2, 0 \n"
" bnez %1, 2f \n"
" lui %1, 0x8000 \n"
" sc %1, %0 \n"
" li %2, 1 \n"
"2: \n"
: "=m" (rw->lock), "=&r" (tmp), "=&r" (ret)
: "m" (rw->lock)
: "memory");
} while (__builtin_expect(!!(!tmp), 0));
__asm__ __volatile__(" \n" : : :"memory");
}
return ret;
}
# 88 "include/linux/spinlock.h" 2
# 155 "include/linux/spinlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void do_raw_spin_lock(raw_spinlock_t *lock)
{
(void)0;
arch_spin_lock(&lock->raw_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
do_raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long *flags)
{
(void)0;
arch_spin_lock(&lock->raw_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int do_raw_spin_trylock(raw_spinlock_t *lock)
{
return arch_spin_trylock(&(lock)->raw_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void do_raw_spin_unlock(raw_spinlock_t *lock)
{
arch_spin_unlock(&lock->raw_lock);
(void)0;
}
# 281 "include/linux/spinlock.h"
# 1 "include/linux/rwlock.h" 1
# 282 "include/linux/spinlock.h" 2
# 1 "include/linux/spinlock_api_smp.h" 1
# 18 "include/linux/spinlock_api_smp.h"
int in_lock_functions(unsigned long addr);
void __attribute__((section(".spinlock.text"))) _raw_spin_lock(raw_spinlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_spin_lock_nested(raw_spinlock_t *lock, int subclass)
;
void __attribute__((section(".spinlock.text")))
_raw_spin_lock_nest_lock(raw_spinlock_t *lock, struct lockdep_map *map)
;
void __attribute__((section(".spinlock.text"))) _raw_spin_lock_bh(raw_spinlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_spin_lock_irq(raw_spinlock_t *lock)
;
unsigned long __attribute__((section(".spinlock.text"))) _raw_spin_lock_irqsave(raw_spinlock_t *lock)
;
unsigned long __attribute__((section(".spinlock.text")))
_raw_spin_lock_irqsave_nested(raw_spinlock_t *lock, int subclass)
;
int __attribute__((section(".spinlock.text"))) _raw_spin_trylock(raw_spinlock_t *lock);
int __attribute__((section(".spinlock.text"))) _raw_spin_trylock_bh(raw_spinlock_t *lock);
void __attribute__((section(".spinlock.text"))) _raw_spin_unlock(raw_spinlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_spin_unlock_bh(raw_spinlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_spin_unlock_irq(raw_spinlock_t *lock) ;
void __attribute__((section(".spinlock.text")))
_raw_spin_unlock_irqrestore(raw_spinlock_t *lock, unsigned long flags)
;
# 86 "include/linux/spinlock_api_smp.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __raw_spin_trylock(raw_spinlock_t *lock)
{
__asm__ __volatile__("": : :"memory");
if (do_raw_spin_trylock(lock)) {
do { } while (0);
return 1;
}
__asm__ __volatile__("": : :"memory");
return 0;
}
# 104 "include/linux/spinlock_api_smp.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __raw_spin_lock_irqsave(raw_spinlock_t *lock)
{
unsigned long flags;
do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0);
__asm__ __volatile__("": : :"memory");
do { } while (0);
# 119 "include/linux/spinlock_api_smp.h"
do_raw_spin_lock_flags(lock, &flags);
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_spin_lock_irq(raw_spinlock_t *lock)
{
do { arch_local_irq_disable(); do { } while (0); } while (0);
__asm__ __volatile__("": : :"memory");
do { } while (0);
do_raw_spin_lock(lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_spin_lock_bh(raw_spinlock_t *lock)
{
__local_bh_disable_ip((unsigned long)__builtin_return_address(0), ((2 * (1UL << (0 + 8))) + 0));
do { } while (0);
do_raw_spin_lock(lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_spin_lock(raw_spinlock_t *lock)
{
__asm__ __volatile__("": : :"memory");
do { } while (0);
do_raw_spin_lock(lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_spin_unlock(raw_spinlock_t *lock)
{
do { } while (0);
do_raw_spin_unlock(lock);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_spin_unlock_irqrestore(raw_spinlock_t *lock,
unsigned long flags)
{
do { } while (0);
do_raw_spin_unlock(lock);
do { if (({ ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(flags); })) { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } } while (0);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_spin_unlock_irq(raw_spinlock_t *lock)
{
do { } while (0);
do_raw_spin_unlock(lock);
do { do { } while (0); arch_local_irq_enable(); } while (0);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_spin_unlock_bh(raw_spinlock_t *lock)
{
do { } while (0);
do_raw_spin_unlock(lock);
__local_bh_enable_ip((unsigned long)__builtin_return_address(0), ((2 * (1UL << (0 + 8))) + 0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __raw_spin_trylock_bh(raw_spinlock_t *lock)
{
__local_bh_disable_ip((unsigned long)__builtin_return_address(0), ((2 * (1UL << (0 + 8))) + 0));
if (do_raw_spin_trylock(lock)) {
do { } while (0);
return 1;
}
__local_bh_enable_ip((unsigned long)__builtin_return_address(0), ((2 * (1UL << (0 + 8))) + 0));
return 0;
}
# 1 "include/linux/rwlock_api_smp.h" 1
# 18 "include/linux/rwlock_api_smp.h"
void __attribute__((section(".spinlock.text"))) _raw_read_lock(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_write_lock(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_read_lock_bh(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_write_lock_bh(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_read_lock_irq(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_write_lock_irq(rwlock_t *lock) ;
unsigned long __attribute__((section(".spinlock.text"))) _raw_read_lock_irqsave(rwlock_t *lock)
;
unsigned long __attribute__((section(".spinlock.text"))) _raw_write_lock_irqsave(rwlock_t *lock)
;
int __attribute__((section(".spinlock.text"))) _raw_read_trylock(rwlock_t *lock);
int __attribute__((section(".spinlock.text"))) _raw_write_trylock(rwlock_t *lock);
void __attribute__((section(".spinlock.text"))) _raw_read_unlock(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_write_unlock(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_read_unlock_bh(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_write_unlock_bh(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_read_unlock_irq(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text"))) _raw_write_unlock_irq(rwlock_t *lock) ;
void __attribute__((section(".spinlock.text")))
_raw_read_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
;
void __attribute__((section(".spinlock.text")))
_raw_write_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
;
# 117 "include/linux/rwlock_api_smp.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __raw_read_trylock(rwlock_t *lock)
{
__asm__ __volatile__("": : :"memory");
if (arch_read_trylock(&(lock)->raw_lock)) {
do { } while (0);
return 1;
}
__asm__ __volatile__("": : :"memory");
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __raw_write_trylock(rwlock_t *lock)
{
__asm__ __volatile__("": : :"memory");
if (arch_write_trylock(&(lock)->raw_lock)) {
do { } while (0);
return 1;
}
__asm__ __volatile__("": : :"memory");
return 0;
}
# 146 "include/linux/rwlock_api_smp.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_read_lock(rwlock_t *lock)
{
__asm__ __volatile__("": : :"memory");
do { } while (0);
do {(void)0; arch_read_lock(&(lock)->raw_lock); } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __raw_read_lock_irqsave(rwlock_t *lock)
{
unsigned long flags;
do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0);
__asm__ __volatile__("": : :"memory");
do { } while (0);
do {(void)0; arch_read_lock(&((lock))->raw_lock); } while (0)
;
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_read_lock_irq(rwlock_t *lock)
{
do { arch_local_irq_disable(); do { } while (0); } while (0);
__asm__ __volatile__("": : :"memory");
do { } while (0);
do {(void)0; arch_read_lock(&(lock)->raw_lock); } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_read_lock_bh(rwlock_t *lock)
{
__local_bh_disable_ip((unsigned long)__builtin_return_address(0), ((2 * (1UL << (0 + 8))) + 0));
do { } while (0);
do {(void)0; arch_read_lock(&(lock)->raw_lock); } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __raw_write_lock_irqsave(rwlock_t *lock)
{
unsigned long flags;
do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0);
__asm__ __volatile__("": : :"memory");
do { } while (0);
do {(void)0; arch_write_lock(&((lock))->raw_lock); } while (0)
;
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_write_lock_irq(rwlock_t *lock)
{
do { arch_local_irq_disable(); do { } while (0); } while (0);
__asm__ __volatile__("": : :"memory");
do { } while (0);
do {(void)0; arch_write_lock(&(lock)->raw_lock); } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_write_lock_bh(rwlock_t *lock)
{
__local_bh_disable_ip((unsigned long)__builtin_return_address(0), ((2 * (1UL << (0 + 8))) + 0));
do { } while (0);
do {(void)0; arch_write_lock(&(lock)->raw_lock); } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_write_lock(rwlock_t *lock)
{
__asm__ __volatile__("": : :"memory");
do { } while (0);
do {(void)0; arch_write_lock(&(lock)->raw_lock); } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_write_unlock(rwlock_t *lock)
{
do { } while (0);
do {arch_write_unlock(&(lock)->raw_lock); (void)0; } while (0);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_read_unlock(rwlock_t *lock)
{
do { } while (0);
do {arch_read_unlock(&(lock)->raw_lock); (void)0; } while (0);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
__raw_read_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
{
do { } while (0);
do {arch_read_unlock(&(lock)->raw_lock); (void)0; } while (0);
do { if (({ ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(flags); })) { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } } while (0);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_read_unlock_irq(rwlock_t *lock)
{
do { } while (0);
do {arch_read_unlock(&(lock)->raw_lock); (void)0; } while (0);
do { do { } while (0); arch_local_irq_enable(); } while (0);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_read_unlock_bh(rwlock_t *lock)
{
do { } while (0);
do {arch_read_unlock(&(lock)->raw_lock); (void)0; } while (0);
__local_bh_enable_ip((unsigned long)__builtin_return_address(0), ((2 * (1UL << (0 + 8))) + 0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_write_unlock_irqrestore(rwlock_t *lock,
unsigned long flags)
{
do { } while (0);
do {arch_write_unlock(&(lock)->raw_lock); (void)0; } while (0);
do { if (({ ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(flags); })) { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } } while (0);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_write_unlock_irq(rwlock_t *lock)
{
do { } while (0);
do {arch_write_unlock(&(lock)->raw_lock); (void)0; } while (0);
do { do { } while (0); arch_local_irq_enable(); } while (0);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_write_unlock_bh(rwlock_t *lock)
{
do { } while (0);
do {arch_write_unlock(&(lock)->raw_lock); (void)0; } while (0);
__local_bh_enable_ip((unsigned long)__builtin_return_address(0), ((2 * (1UL << (0 + 8))) + 0));
}
# 191 "include/linux/spinlock_api_smp.h" 2
# 288 "include/linux/spinlock.h" 2
# 296 "include/linux/spinlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) raw_spinlock_t *spinlock_check(spinlock_t *lock)
{
return &lock->rlock;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void spin_lock(spinlock_t *lock)
{
_raw_spin_lock(&lock->rlock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void spin_lock_bh(spinlock_t *lock)
{
_raw_spin_lock_bh(&lock->rlock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int spin_trylock(spinlock_t *lock)
{
return (_raw_spin_trylock(&lock->rlock));
}
# 332 "include/linux/spinlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void spin_lock_irq(spinlock_t *lock)
{
_raw_spin_lock_irq(&lock->rlock);
}
# 347 "include/linux/spinlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void spin_unlock(spinlock_t *lock)
{
__raw_spin_unlock(&lock->rlock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void spin_unlock_bh(spinlock_t *lock)
{
_raw_spin_unlock_bh(&lock->rlock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void spin_unlock_irq(spinlock_t *lock)
{
__raw_spin_unlock_irq(&lock->rlock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
{
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); _raw_spin_unlock_irqrestore(&lock->rlock, flags); } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int spin_trylock_bh(spinlock_t *lock)
{
return (_raw_spin_trylock_bh(&lock->rlock));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int spin_trylock_irq(spinlock_t *lock)
{
return ({ do { arch_local_irq_disable(); do { } while (0); } while (0); (_raw_spin_trylock(&lock->rlock)) ? 1 : ({ do { do { } while (0); arch_local_irq_enable(); } while (0); 0; }); });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void spin_unlock_wait(spinlock_t *lock)
{
while (arch_spin_is_locked(&(&lock->rlock)->raw_lock)) { __asm__ __volatile__("": : :"memory"); };
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int spin_is_locked(spinlock_t *lock)
{
return arch_spin_is_locked(&(&lock->rlock)->raw_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int spin_is_contended(spinlock_t *lock)
{
return arch_spin_is_contended(&(&lock->rlock)->raw_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int spin_can_lock(spinlock_t *lock)
{
return (!arch_spin_is_locked(&(&lock->rlock)->raw_lock));
}
# 1 "include/linux/atomic.h" 1
# 1 "./arch/mips/include/asm/atomic.h" 1
# 21 "./arch/mips/include/asm/atomic.h"
# 1 "./arch/mips/include/asm/cmpxchg.h" 1
# 15 "./arch/mips/include/asm/cmpxchg.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __xchg_u32(volatile int * m, unsigned int val)
{
__u32 retval;
__asm__ __volatile__(" \n" : : :"memory");
if (1 && 0) {
unsigned long dummy;
__asm__ __volatile__(
" .set arch=r4000 \n"
"1: ll %0, %3 # xchg_u32 \n"
" .set mips0 \n"
" move %2, %z4 \n"
" .set arch=r4000 \n"
" sc %2, %1 \n"
" beqzl %2, 1b \n"
" .set mips0 \n"
: "=&r" (retval), "=m" (*m), "=&r" (dummy)
: "R" (*m), "Jr" (val)
: "memory");
} else if (1) {
unsigned long dummy;
do {
__asm__ __volatile__(
" .set arch=r4000 \n"
" ll %0, %3 # xchg_u32 \n"
" .set mips0 \n"
" move %2, %z4 \n"
" .set arch=r4000 \n"
" sc %2, %1 \n"
" .set mips0 \n"
: "=&r" (retval), "=m" (*m), "=&r" (dummy)
: "R" (*m), "Jr" (val)
: "memory");
} while (__builtin_expect(!!(!dummy), 0));
} else {
unsigned long flags;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0);
retval = *m;
*m = val;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0);
}
__asm__ __volatile__(" \n" : : :"memory");
return retval;
}
# 114 "./arch/mips/include/asm/cmpxchg.h"
extern __u64 __xchg_u64_unsupported_on_32bit_kernels(volatile __u64 * m, __u64 val);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
{
switch (size) {
case 4:
return __xchg_u32(ptr, x);
case 8:
return __xchg_u64_unsupported_on_32bit_kernels(ptr, x);
}
return x;
}
# 195 "./arch/mips/include/asm/cmpxchg.h"
extern void __cmpxchg_called_with_bad_pointer(void);
# 242 "./arch/mips/include/asm/cmpxchg.h"
# 1 "include/asm-generic/cmpxchg-local.h" 1
extern unsigned long wrong_size_cmpxchg(volatile void *ptr)
__attribute__((noreturn));
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __cmpxchg_local_generic(volatile void *ptr,
unsigned long old, unsigned long new, int size)
{
unsigned long flags, prev;
if (size == 8 && sizeof(unsigned long) != 8)
wrong_size_cmpxchg(ptr);
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0);
switch (size) {
case 1: prev = *(u8 *)ptr;
if (prev == old)
*(u8 *)ptr = (u8)new;
break;
case 2: prev = *(u16 *)ptr;
if (prev == old)
*(u16 *)ptr = (u16)new;
break;
case 4: prev = *(u32 *)ptr;
if (prev == old)
*(u32 *)ptr = (u32)new;
break;
case 8: prev = *(u64 *)ptr;
if (prev == old)
*(u64 *)ptr = (u64)new;
break;
default:
wrong_size_cmpxchg(ptr);
}
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0);
return prev;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 __cmpxchg64_local_generic(volatile void *ptr,
u64 old, u64 new)
{
u64 prev;
unsigned long flags;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0);
prev = *(u64 *)ptr;
if (prev == old)
*(u64 *)ptr = new;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0);
return prev;
}
# 243 "./arch/mips/include/asm/cmpxchg.h" 2
# 22 "./arch/mips/include/asm/atomic.h" 2
# 134 "./arch/mips/include/asm/atomic.h"
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) void atomic_add(int i, atomic_t * v) { if (1 && 0) { int temp; __asm__ __volatile__( " .set arch=r4000 \n" "1: ll %0, %1 # atomic_" "add" " \n" " " "addu" " %0, %2 \n" " sc %0, %1 \n" " beqzl %0, 1b \n" " .set mips0 \n" : "=&r" (temp), "+m" (v->counter) : "Ir" (i)); } else if (1) { int temp; do { __asm__ __volatile__( " .set arch=r4000 \n" " ll %0, %1 # atomic_" "add" "\n" " " "addu" " %0, %2 \n" " sc %0, %1 \n" " .set mips0 \n" : "=&r" (temp), "+m" (v->counter) : "Ir" (i)); } while (__builtin_expect(!!(!temp), 0)); } else { unsigned long flags; do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); v->counter += i; do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } } static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_add_return(int i, atomic_t * v) { int result; __asm__ __volatile__(" \n" : : :"memory"); if (1 && 0) { int temp; __asm__ __volatile__( " .set arch=r4000 \n" "1: ll %1, %2 # atomic_" "add" "_return \n" " " "addu" " %0, %1, %3 \n" " sc %0, %2 \n" " beqzl %0, 1b \n" " " "addu" " %0, %1, %3 \n" " .set mips0 \n" : "=&r" (result), "=&r" (temp), "+m" (v->counter) : "Ir" (i)); } else if (1) { int temp; do { __asm__ __volatile__( " .set arch=r4000 \n" " ll %1, %2 # atomic_" "add" "_return \n" " " "addu" " %0, %1, %3 \n" " sc %0, %2 \n" " .set mips0 \n" : "=&r" (result), "=&r" (temp), "+m" (v->counter) : "Ir" (i)); } while (__builtin_expect(!!(!result), 0)); result = temp; result += i; } else { unsigned long flags; do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); result = v->counter; result += i; v->counter = result; do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } __asm__ __volatile__(" \n" : : :"memory"); return result; }
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) void atomic_sub(int i, atomic_t * v) { if (1 && 0) { int temp; __asm__ __volatile__( " .set arch=r4000 \n" "1: ll %0, %1 # atomic_" "sub" " \n" " " "subu" " %0, %2 \n" " sc %0, %1 \n" " beqzl %0, 1b \n" " .set mips0 \n" : "=&r" (temp), "+m" (v->counter) : "Ir" (i)); } else if (1) { int temp; do { __asm__ __volatile__( " .set arch=r4000 \n" " ll %0, %1 # atomic_" "sub" "\n" " " "subu" " %0, %2 \n" " sc %0, %1 \n" " .set mips0 \n" : "=&r" (temp), "+m" (v->counter) : "Ir" (i)); } while (__builtin_expect(!!(!temp), 0)); } else { unsigned long flags; do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); v->counter -= i; do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } } static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_sub_return(int i, atomic_t * v) { int result; __asm__ __volatile__(" \n" : : :"memory"); if (1 && 0) { int temp; __asm__ __volatile__( " .set arch=r4000 \n" "1: ll %1, %2 # atomic_" "sub" "_return \n" " " "subu" " %0, %1, %3 \n" " sc %0, %2 \n" " beqzl %0, 1b \n" " " "subu" " %0, %1, %3 \n" " .set mips0 \n" : "=&r" (result), "=&r" (temp), "+m" (v->counter) : "Ir" (i)); } else if (1) { int temp; do { __asm__ __volatile__( " .set arch=r4000 \n" " ll %1, %2 # atomic_" "sub" "_return \n" " " "subu" " %0, %1, %3 \n" " sc %0, %2 \n" " .set mips0 \n" : "=&r" (result), "=&r" (temp), "+m" (v->counter) : "Ir" (i)); } while (__builtin_expect(!!(!result), 0)); result = temp; result -= i; } else { unsigned long flags; do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); result = v->counter; result -= i; v->counter = result; do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } __asm__ __volatile__(" \n" : : :"memory"); return result; }
# 149 "./arch/mips/include/asm/atomic.h"
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_sub_if_positive(int i, atomic_t * v)
{
int result;
__asm__ __volatile__(" \n" : : :"memory");
if (1 && 0) {
int temp;
__asm__ __volatile__(
" .set arch=r4000 \n"
"1: ll %1, %2 # atomic_sub_if_positive\n"
" subu %0, %1, %3 \n"
" bltz %0, 1f \n"
" sc %0, %2 \n"
" .set noreorder \n"
" beqzl %0, 1b \n"
" subu %0, %1, %3 \n"
" .set reorder \n"
"1: \n"
" .set mips0 \n"
: "=&r" (result), "=&r" (temp), "+m" (v->counter)
: "Ir" (i), "m" (v->counter)
: "memory");
} else if (1) {
int temp;
__asm__ __volatile__(
" .set arch=r4000 \n"
"1: ll %1, %2 # atomic_sub_if_positive\n"
" subu %0, %1, %3 \n"
" bltz %0, 1f \n"
" sc %0, %2 \n"
" .set noreorder \n"
" beqz %0, 1b \n"
" subu %0, %1, %3 \n"
" .set reorder \n"
"1: \n"
" .set mips0 \n"
: "=&r" (result), "=&r" (temp), "+m" (v->counter)
: "Ir" (i));
} else {
unsigned long flags;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0);
result = v->counter;
result -= i;
if (result >= 0)
v->counter = result;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0);
}
__asm__ __volatile__(" \n" : : :"memory");
return result;
}
# 218 "./arch/mips/include/asm/atomic.h"
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) int __atomic_add_unless(atomic_t *v, int a, int u)
{
int c, old;
c = (*(volatile typeof((v)->counter) *)&((v)->counter));
for (;;) {
if (__builtin_expect(!!(c == (u)), 0))
break;
old = (({ __typeof__(&(((v))->counter)) __ptr = (&(((v))->counter)); __typeof__(*(&(((v))->counter))) __old = ((c)); __typeof__(*(&(((v))->counter))) __new = ((c + (a))); __typeof__(*(&(((v))->counter))) __res = 0; __asm__ __volatile__(" \n" : : :"memory"); switch (sizeof(*(__ptr))) { case 4: __res = ({ __typeof(*(__ptr)) __ret; if (1 && 0) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "ll" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "sc" " $1, %1 \n" " beqzl $1, 1b \n" "2: \n" " .set pop \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else if (1) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "ll" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "sc" " $1, %1 \n" " beqz $1, 1b \n" " .set pop \n" "2: \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); __ret = *__ptr; if (__ret == __old) *__ptr = __new; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } __ret; }); break; case 8: if (sizeof(long) == 8) { __res = ({ __typeof(*(__ptr)) __ret; if (1 && 0) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "lld" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "scd" " $1, %1 \n" " beqzl $1, 1b \n" "2: \n" " .set pop \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else if (1) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "lld" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "scd" " $1, %1 \n" " beqz $1, 1b \n" " .set pop \n" "2: \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); __ret = *__ptr; if (__ret == __old) *__ptr = __new; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } __ret; }); break; } default: __cmpxchg_called_with_bad_pointer(); break; } __asm__ __volatile__(" \n" : : :"memory"); __res; }));
if (__builtin_expect(!!(old == c), 1))
break;
c = old;
}
return c;
}
# 5 "include/linux/atomic.h" 2
# 15 "include/linux/atomic.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_add_unless(atomic_t *v, int a, int u)
{
return __atomic_add_unless(v, a, u) != u;
}
# 44 "include/linux/atomic.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_inc_not_zero_hint(atomic_t *v, int hint)
{
int val, c = hint;
if (!hint)
return atomic_add_unless((v), 1, 0);
do {
val = (({ __typeof__(&((v)->counter)) __ptr = (&((v)->counter)); __typeof__(*(&((v)->counter))) __old = ((c)); __typeof__(*(&((v)->counter))) __new = ((c + 1)); __typeof__(*(&((v)->counter))) __res = 0; __asm__ __volatile__(" \n" : : :"memory"); switch (sizeof(*(__ptr))) { case 4: __res = ({ __typeof(*(__ptr)) __ret; if (1 && 0) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "ll" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "sc" " $1, %1 \n" " beqzl $1, 1b \n" "2: \n" " .set pop \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else if (1) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "ll" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "sc" " $1, %1 \n" " beqz $1, 1b \n" " .set pop \n" "2: \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); __ret = *__ptr; if (__ret == __old) *__ptr = __new; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } __ret; }); break; case 8: if (sizeof(long) == 8) { __res = ({ __typeof(*(__ptr)) __ret; if (1 && 0) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "lld" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "scd" " $1, %1 \n" " beqzl $1, 1b \n" "2: \n" " .set pop \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else if (1) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "lld" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "scd" " $1, %1 \n" " beqz $1, 1b \n" " .set pop \n" "2: \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); __ret = *__ptr; if (__ret == __old) *__ptr = __new; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } __ret; }); break; } default: __cmpxchg_called_with_bad_pointer(); break; } __asm__ __volatile__(" \n" : : :"memory"); __res; }));
if (val == c)
return 1;
c = val;
} while (c);
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_inc_unless_negative(atomic_t *p)
{
int v, v1;
for (v = 0; v >= 0; v = v1) {
v1 = (({ __typeof__(&((p)->counter)) __ptr = (&((p)->counter)); __typeof__(*(&((p)->counter))) __old = ((v)); __typeof__(*(&((p)->counter))) __new = ((v + 1)); __typeof__(*(&((p)->counter))) __res = 0; __asm__ __volatile__(" \n" : : :"memory"); switch (sizeof(*(__ptr))) { case 4: __res = ({ __typeof(*(__ptr)) __ret; if (1 && 0) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "ll" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "sc" " $1, %1 \n" " beqzl $1, 1b \n" "2: \n" " .set pop \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else if (1) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "ll" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "sc" " $1, %1 \n" " beqz $1, 1b \n" " .set pop \n" "2: \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); __ret = *__ptr; if (__ret == __old) *__ptr = __new; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } __ret; }); break; case 8: if (sizeof(long) == 8) { __res = ({ __typeof(*(__ptr)) __ret; if (1 && 0) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "lld" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "scd" " $1, %1 \n" " beqzl $1, 1b \n" "2: \n" " .set pop \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else if (1) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "lld" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "scd" " $1, %1 \n" " beqz $1, 1b \n" " .set pop \n" "2: \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); __ret = *__ptr; if (__ret == __old) *__ptr = __new; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } __ret; }); break; } default: __cmpxchg_called_with_bad_pointer(); break; } __asm__ __volatile__(" \n" : : :"memory"); __res; }));
if (__builtin_expect(!!(v1 == v), 1))
return 1;
}
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_dec_unless_positive(atomic_t *p)
{
int v, v1;
for (v = 0; v <= 0; v = v1) {
v1 = (({ __typeof__(&((p)->counter)) __ptr = (&((p)->counter)); __typeof__(*(&((p)->counter))) __old = ((v)); __typeof__(*(&((p)->counter))) __new = ((v - 1)); __typeof__(*(&((p)->counter))) __res = 0; __asm__ __volatile__(" \n" : : :"memory"); switch (sizeof(*(__ptr))) { case 4: __res = ({ __typeof(*(__ptr)) __ret; if (1 && 0) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "ll" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "sc" " $1, %1 \n" " beqzl $1, 1b \n" "2: \n" " .set pop \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else if (1) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "ll" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "sc" " $1, %1 \n" " beqz $1, 1b \n" " .set pop \n" "2: \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); __ret = *__ptr; if (__ret == __old) *__ptr = __new; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } __ret; }); break; case 8: if (sizeof(long) == 8) { __res = ({ __typeof(*(__ptr)) __ret; if (1 && 0) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "lld" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "scd" " $1, %1 \n" " beqzl $1, 1b \n" "2: \n" " .set pop \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else if (1) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "lld" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "scd" " $1, %1 \n" " beqz $1, 1b \n" " .set pop \n" "2: \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); __ret = *__ptr; if (__ret == __old) *__ptr = __new; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } __ret; }); break; } default: __cmpxchg_called_with_bad_pointer(); break; } __asm__ __volatile__(" \n" : : :"memory"); __res; }));
if (__builtin_expect(!!(v1 == v), 1))
return 1;
}
return 0;
}
# 115 "include/linux/atomic.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void atomic_or(int i, atomic_t *v)
{
int old;
int new;
do {
old = (*(volatile typeof((v)->counter) *)&((v)->counter));
new = old | i;
} while ((({ __typeof__(&((v)->counter)) __ptr = (&((v)->counter)); __typeof__(*(&((v)->counter))) __old = ((old)); __typeof__(*(&((v)->counter))) __new = ((new)); __typeof__(*(&((v)->counter))) __res = 0; __asm__ __volatile__(" \n" : : :"memory"); switch (sizeof(*(__ptr))) { case 4: __res = ({ __typeof(*(__ptr)) __ret; if (1 && 0) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "ll" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "sc" " $1, %1 \n" " beqzl $1, 1b \n" "2: \n" " .set pop \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else if (1) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "ll" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "sc" " $1, %1 \n" " beqz $1, 1b \n" " .set pop \n" "2: \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); __ret = *__ptr; if (__ret == __old) *__ptr = __new; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } __ret; }); break; case 8: if (sizeof(long) == 8) { __res = ({ __typeof(*(__ptr)) __ret; if (1 && 0) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "lld" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "scd" " $1, %1 \n" " beqzl $1, 1b \n" "2: \n" " .set pop \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else if (1) { __asm__ __volatile__( " .set push \n" " .set noat \n" " .set arch=r4000 \n" "1: " "lld" " %0, %2 # __cmpxchg_asm \n" " bne %0, %z3, 2f \n" " .set mips0 \n" " move $1, %z4 \n" " .set arch=r4000 \n" " " "scd" " $1, %1 \n" " beqz $1, 1b \n" " .set pop \n" "2: \n" : "=&r" (__ret), "=R" (*__ptr) : "R" (*__ptr), "Jr" (__old), "Jr" (__new) : "memory"); } else { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); __ret = *__ptr; if (__ret == __old) *__ptr = __new; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } __ret; }); break; } default: __cmpxchg_called_with_bad_pointer(); break; } __asm__ __volatile__(" \n" : : :"memory"); __res; })) != old);
}
# 1 "include/asm-generic/atomic-long.h" 1
# 141 "include/asm-generic/atomic-long.h"
typedef atomic_t atomic_long_t;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long atomic_long_read(atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
return (long)(*(volatile typeof((v)->counter) *)&((v)->counter));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void atomic_long_set(atomic_long_t *l, long i)
{
atomic_t *v = (atomic_t *)l;
((v)->counter = (i));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void atomic_long_inc(atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
atomic_add(1, (v));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void atomic_long_dec(atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
atomic_sub(1, (v));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void atomic_long_add(long i, atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
atomic_add(i, v);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void atomic_long_sub(long i, atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
atomic_sub(i, v);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_long_sub_and_test(long i, atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
return (atomic_sub_return((i), (v)) == 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_long_dec_and_test(atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
return (atomic_sub_return(1, (v)) == 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_long_inc_and_test(atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
return (atomic_add_return(1, (v)) == 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int atomic_long_add_negative(long i, atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
return (atomic_add_return(i, (v)) < 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long atomic_long_add_return(long i, atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
return (long)atomic_add_return(i, v);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long atomic_long_sub_return(long i, atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
return (long)atomic_sub_return(i, v);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long atomic_long_inc_return(atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
return (long)atomic_add_return(1, (v));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long atomic_long_dec_return(atomic_long_t *l)
{
atomic_t *v = (atomic_t *)l;
return (long)atomic_sub_return(1, (v));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long atomic_long_add_unless(atomic_long_t *l, long a, long u)
{
atomic_t *v = (atomic_t *)l;
return (long)atomic_add_unless(v, a, u);
}
# 128 "include/linux/atomic.h" 2
# 1 "include/asm-generic/atomic64.h" 1
# 15 "include/asm-generic/atomic64.h"
typedef struct {
long long counter;
} atomic64_t;
extern long long atomic64_read(const atomic64_t *v);
extern void atomic64_set(atomic64_t *v, long long i);
# 32 "include/asm-generic/atomic64.h"
extern void atomic64_add(long long a, atomic64_t *v); extern long long atomic64_add_return(long long a, atomic64_t *v);
extern void atomic64_sub(long long a, atomic64_t *v); extern long long atomic64_sub_return(long long a, atomic64_t *v);
extern long long atomic64_dec_if_positive(atomic64_t *v);
extern long long atomic64_cmpxchg(atomic64_t *v, long long o, long long n);
extern long long atomic64_xchg(atomic64_t *v, long long new);
extern int atomic64_add_unless(atomic64_t *v, long long a, long long u);
# 130 "include/linux/atomic.h" 2
# 409 "include/linux/spinlock.h" 2
# 417 "include/linux/spinlock.h"
extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
# 8 "include/linux/mmzone.h" 2
# 1 "include/linux/wait.h" 1
# 9 "include/linux/wait.h"
# 1 "arch/mips/include/generated/asm/current.h" 1
# 1 "include/asm-generic/current.h" 1
# 1 "arch/mips/include/generated/asm/current.h" 2
# 10 "include/linux/wait.h" 2
# 1 "include/uapi/linux/wait.h" 1
# 11 "include/linux/wait.h" 2
typedef struct __wait_queue wait_queue_t;
typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, void *key);
int default_wake_function(wait_queue_t *wait, unsigned mode, int flags, void *key);
struct __wait_queue {
unsigned int flags;
void *private;
wait_queue_func_t func;
struct list_head task_list;
};
struct wait_bit_key {
void *flags;
int bit_nr;
unsigned long timeout;
};
struct wait_bit_queue {
struct wait_bit_key key;
wait_queue_t wait;
};
struct __wait_queue_head {
spinlock_t lock;
struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;
struct task_struct;
# 72 "include/linux/wait.h"
extern void __init_waitqueue_head(wait_queue_head_t *q, const char *name, struct lock_class_key *);
# 90 "include/linux/wait.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p)
{
q->flags = 0;
q->private = p;
q->func = default_wake_function;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
init_waitqueue_func_entry(wait_queue_t *q, wait_queue_func_t func)
{
q->flags = 0;
q->private = ((void *)0);
q->func = func;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int waitqueue_active(wait_queue_head_t *q)
{
return !list_empty(&q->task_list);
}
extern void add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);
extern void add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait);
extern void remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new)
{
list_add(&new->task_list, &head->task_list);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
__add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait)
{
wait->flags |= 0x01;
__add_wait_queue(q, wait);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __add_wait_queue_tail(wait_queue_head_t *head,
wait_queue_t *new)
{
list_add_tail(&new->task_list, &head->task_list);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
__add_wait_queue_tail_exclusive(wait_queue_head_t *q, wait_queue_t *wait)
{
wait->flags |= 0x01;
__add_wait_queue_tail(q, wait);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
__remove_wait_queue(wait_queue_head_t *head, wait_queue_t *old)
{
list_del(&old->task_list);
}
typedef int wait_bit_action_f(struct wait_bit_key *);
void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key);
void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr);
void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr);
void __wake_up_bit(wait_queue_head_t *, void *, int);
int __wait_on_bit(wait_queue_head_t *, struct wait_bit_queue *, wait_bit_action_f *, unsigned);
int __wait_on_bit_lock(wait_queue_head_t *, struct wait_bit_queue *, wait_bit_action_f *, unsigned);
void wake_up_bit(void *, int);
void wake_up_atomic_t(atomic_t *);
int out_of_line_wait_on_bit(void *, int, wait_bit_action_f *, unsigned);
int out_of_line_wait_on_bit_timeout(void *, int, wait_bit_action_f *, unsigned, unsigned long);
int out_of_line_wait_on_bit_lock(void *, int, wait_bit_action_f *, unsigned);
int out_of_line_wait_on_atomic_t(atomic_t *, int (*)(atomic_t *), unsigned);
wait_queue_head_t *bit_waitqueue(void *, int);
# 831 "include/linux/wait.h"
void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state);
void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state);
long prepare_to_wait_event(wait_queue_head_t *q, wait_queue_t *wait, int state);
void finish_wait(wait_queue_head_t *q, wait_queue_t *wait);
void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait, unsigned int mode, void *key);
long wait_woken(wait_queue_t *wait, unsigned mode, long timeout);
int woken_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
# 870 "include/linux/wait.h"
extern int bit_wait(struct wait_bit_key *);
extern int bit_wait_io(struct wait_bit_key *);
extern int bit_wait_timeout(struct wait_bit_key *);
extern int bit_wait_io_timeout(struct wait_bit_key *);
# 891 "include/linux/wait.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
wait_on_bit(void *word, int bit, unsigned mode)
{
if (!test_bit(bit, word))
return 0;
return out_of_line_wait_on_bit(word, bit,
bit_wait,
mode);
}
# 915 "include/linux/wait.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
wait_on_bit_io(void *word, int bit, unsigned mode)
{
if (!test_bit(bit, word))
return 0;
return out_of_line_wait_on_bit(word, bit,
bit_wait_io,
mode);
}
# 941 "include/linux/wait.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
wait_on_bit_action(void *word, int bit, wait_bit_action_f *action, unsigned mode)
{
if (!test_bit(bit, word))
return 0;
return out_of_line_wait_on_bit(word, bit, action, mode);
}
# 968 "include/linux/wait.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
wait_on_bit_lock(void *word, int bit, unsigned mode)
{
if (!test_and_set_bit(bit, word))
return 0;
return out_of_line_wait_on_bit_lock(word, bit, bit_wait, mode);
}
# 991 "include/linux/wait.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
wait_on_bit_lock_io(void *word, int bit, unsigned mode)
{
if (!test_and_set_bit(bit, word))
return 0;
return out_of_line_wait_on_bit_lock(word, bit, bit_wait_io, mode);
}
# 1016 "include/linux/wait.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
wait_on_bit_lock_action(void *word, int bit, wait_bit_action_f *action, unsigned mode)
{
if (!test_and_set_bit(bit, word))
return 0;
return out_of_line_wait_on_bit_lock(word, bit, action, mode);
}
# 1034 "include/linux/wait.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
int wait_on_atomic_t(atomic_t *val, int (*action)(atomic_t *), unsigned mode)
{
if ((*(volatile typeof((val)->counter) *)&((val)->counter)) == 0)
return 0;
return out_of_line_wait_on_atomic_t(val, action, mode);
}
# 10 "include/linux/mmzone.h" 2
# 1 "include/linux/numa.h" 1
# 14 "include/linux/mmzone.h" 2
# 1 "include/linux/seqlock.h" 1
# 46 "include/linux/seqlock.h"
typedef struct seqcount {
unsigned sequence;
} seqcount_t;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __seqcount_init(seqcount_t *s, const char *name,
struct lock_class_key *key)
{
do { (void)(name); (void)(key); } while (0);
s->sequence = 0;
}
# 106 "include/linux/seqlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned __read_seqcount_begin(const seqcount_t *s)
{
unsigned ret;
repeat:
ret = (*(volatile typeof(s->sequence) *)&(s->sequence));
if (__builtin_expect(!!(ret & 1), 0)) {
__asm__ __volatile__("": : :"memory");
goto repeat;
}
return ret;
}
# 128 "include/linux/seqlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned raw_read_seqcount(const seqcount_t *s)
{
unsigned ret = (*(volatile typeof(s->sequence) *)&(s->sequence));
__asm__ __volatile__("": : :"memory");
return ret;
}
# 144 "include/linux/seqlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned raw_read_seqcount_begin(const seqcount_t *s)
{
unsigned ret = __read_seqcount_begin(s);
__asm__ __volatile__("": : :"memory");
return ret;
}
# 160 "include/linux/seqlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned read_seqcount_begin(const seqcount_t *s)
{
;
return raw_read_seqcount_begin(s);
}
# 180 "include/linux/seqlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned raw_seqcount_begin(const seqcount_t *s)
{
unsigned ret = (*(volatile typeof(s->sequence) *)&(s->sequence));
__asm__ __volatile__("": : :"memory");
return ret & ~1;
}
# 201 "include/linux/seqlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __read_seqcount_retry(const seqcount_t *s, unsigned start)
{
return __builtin_expect(!!(s->sequence != start), 0);
}
# 216 "include/linux/seqlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int read_seqcount_retry(const seqcount_t *s, unsigned start)
{
__asm__ __volatile__("": : :"memory");
return __read_seqcount_retry(s, start);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void raw_write_seqcount_begin(seqcount_t *s)
{
s->sequence++;
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void raw_write_seqcount_end(seqcount_t *s)
{
__asm__ __volatile__("": : :"memory");
s->sequence++;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void raw_write_seqcount_latch(seqcount_t *s)
{
__asm__ __volatile__("": : :"memory");
s->sequence++;
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_seqcount_begin_nested(seqcount_t *s, int subclass)
{
raw_write_seqcount_begin(s);
do { } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_seqcount_begin(seqcount_t *s)
{
write_seqcount_begin_nested(s, 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_seqcount_end(seqcount_t *s)
{
do { } while (0);
raw_write_seqcount_end(s);
}
# 275 "include/linux/seqlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_seqcount_barrier(seqcount_t *s)
{
__asm__ __volatile__("": : :"memory");
s->sequence+=2;
}
typedef struct {
struct seqcount seqcount;
spinlock_t lock;
} seqlock_t;
# 308 "include/linux/seqlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned read_seqbegin(const seqlock_t *sl)
{
return read_seqcount_begin(&sl->seqcount);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned read_seqretry(const seqlock_t *sl, unsigned start)
{
return read_seqcount_retry(&sl->seqcount, start);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_seqlock(seqlock_t *sl)
{
spin_lock(&sl->lock);
write_seqcount_begin(&sl->seqcount);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_sequnlock(seqlock_t *sl)
{
write_seqcount_end(&sl->seqcount);
spin_unlock(&sl->lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_seqlock_bh(seqlock_t *sl)
{
spin_lock_bh(&sl->lock);
write_seqcount_begin(&sl->seqcount);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_sequnlock_bh(seqlock_t *sl)
{
write_seqcount_end(&sl->seqcount);
spin_unlock_bh(&sl->lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_seqlock_irq(seqlock_t *sl)
{
spin_lock_irq(&sl->lock);
write_seqcount_begin(&sl->seqcount);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_sequnlock_irq(seqlock_t *sl)
{
write_seqcount_end(&sl->seqcount);
spin_unlock_irq(&sl->lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __write_seqlock_irqsave(seqlock_t *sl)
{
unsigned long flags;
do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = _raw_spin_lock_irqsave(spinlock_check(&sl->lock)); } while (0); } while (0);
write_seqcount_begin(&sl->seqcount);
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
write_sequnlock_irqrestore(seqlock_t *sl, unsigned long flags)
{
write_seqcount_end(&sl->seqcount);
spin_unlock_irqrestore(&sl->lock, flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void read_seqlock_excl(seqlock_t *sl)
{
spin_lock(&sl->lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void read_sequnlock_excl(seqlock_t *sl)
{
spin_unlock(&sl->lock);
}
# 403 "include/linux/seqlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void read_seqbegin_or_lock(seqlock_t *lock, int *seq)
{
if (!(*seq & 1))
*seq = read_seqbegin(lock);
else
read_seqlock_excl(lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int need_seqretry(seqlock_t *lock, int seq)
{
return !(seq & 1) && read_seqretry(lock, seq);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void done_seqretry(seqlock_t *lock, int seq)
{
if (seq & 1)
read_sequnlock_excl(lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void read_seqlock_excl_bh(seqlock_t *sl)
{
spin_lock_bh(&sl->lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void read_sequnlock_excl_bh(seqlock_t *sl)
{
spin_unlock_bh(&sl->lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void read_seqlock_excl_irq(seqlock_t *sl)
{
spin_lock_irq(&sl->lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void read_sequnlock_excl_irq(seqlock_t *sl)
{
spin_unlock_irq(&sl->lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long __read_seqlock_excl_irqsave(seqlock_t *sl)
{
unsigned long flags;
do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = _raw_spin_lock_irqsave(spinlock_check(&sl->lock)); } while (0); } while (0);
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
read_sequnlock_excl_irqrestore(seqlock_t *sl, unsigned long flags)
{
spin_unlock_irqrestore(&sl->lock, flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long
read_seqbegin_or_lock_irqsave(seqlock_t *lock, int *seq)
{
unsigned long flags = 0;
if (!(*seq & 1))
*seq = read_seqbegin(lock);
else
do { flags = __read_seqlock_excl_irqsave(lock); } while (0);
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
done_seqretry_irqrestore(seqlock_t *lock, int seq, unsigned long flags)
{
if (seq & 1)
read_sequnlock_excl_irqrestore(lock, flags);
}
# 16 "include/linux/mmzone.h" 2
# 1 "include/linux/nodemask.h" 1
# 98 "include/linux/nodemask.h"
typedef struct { unsigned long bits[((((1 << 0)) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))]; } nodemask_t;
extern nodemask_t _unused_nodemask_arg_;
# 111 "include/linux/nodemask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void __node_set(int node, volatile nodemask_t *dstp)
{
set_bit(node, dstp->bits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __node_clear(int node, volatile nodemask_t *dstp)
{
clear_bit(node, dstp->bits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_setall(nodemask_t *dstp, int nbits)
{
bitmap_fill(dstp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_clear(nodemask_t *dstp, int nbits)
{
bitmap_zero(dstp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __node_test_and_set(int node, nodemask_t *addr)
{
return test_and_set_bit(node, addr->bits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_and(nodemask_t *dstp, const nodemask_t *src1p,
const nodemask_t *src2p, int nbits)
{
bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_or(nodemask_t *dstp, const nodemask_t *src1p,
const nodemask_t *src2p, int nbits)
{
bitmap_or(dstp->bits, src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_xor(nodemask_t *dstp, const nodemask_t *src1p,
const nodemask_t *src2p, int nbits)
{
bitmap_xor(dstp->bits, src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_andnot(nodemask_t *dstp, const nodemask_t *src1p,
const nodemask_t *src2p, int nbits)
{
bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_complement(nodemask_t *dstp,
const nodemask_t *srcp, int nbits)
{
bitmap_complement(dstp->bits, srcp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __nodes_equal(const nodemask_t *src1p,
const nodemask_t *src2p, int nbits)
{
return bitmap_equal(src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __nodes_intersects(const nodemask_t *src1p,
const nodemask_t *src2p, int nbits)
{
return bitmap_intersects(src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __nodes_subset(const nodemask_t *src1p,
const nodemask_t *src2p, int nbits)
{
return bitmap_subset(src1p->bits, src2p->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __nodes_empty(const nodemask_t *srcp, int nbits)
{
return bitmap_empty(srcp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __nodes_full(const nodemask_t *srcp, int nbits)
{
return bitmap_full(srcp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __nodes_weight(const nodemask_t *srcp, int nbits)
{
return bitmap_weight(srcp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_shift_right(nodemask_t *dstp,
const nodemask_t *srcp, int n, int nbits)
{
bitmap_shift_right(dstp->bits, srcp->bits, n, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_shift_left(nodemask_t *dstp,
const nodemask_t *srcp, int n, int nbits)
{
bitmap_shift_left(dstp->bits, srcp->bits, n, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __first_node(const nodemask_t *srcp)
{
return ({ int __min1 = ((1 << 0)); int __min2 = (find_next_bit((srcp->bits), ((1 << 0)), 0)); __min1 < __min2 ? __min1: __min2; });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __next_node(int n, const nodemask_t *srcp)
{
return ({ int __min1 = ((1 << 0)); int __min2 = (find_next_bit(srcp->bits, (1 << 0), n+1)); __min1 < __min2 ? __min1: __min2; });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_nodemask_of_node(nodemask_t *mask, int node)
{
__nodes_clear(&(*mask), (1 << 0));
__node_set((node), &(*mask));
}
# 275 "include/linux/nodemask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __first_unset_node(const nodemask_t *maskp)
{
return ({ int __min1 = ((1 << 0)); int __min2 = (find_next_zero_bit((maskp->bits), ((1 << 0)), 0)); __min1 < __min2 ? __min1: __min2; })
;
}
# 309 "include/linux/nodemask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __nodemask_scnprintf(char *buf, int len,
const nodemask_t *srcp, int nbits)
{
return bitmap_scnprintf(buf, len, srcp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __nodemask_parse_user(const char *buf, int len,
nodemask_t *dstp, int nbits)
{
return bitmap_parse_user(buf, len, dstp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __nodelist_scnprintf(char *buf, int len,
const nodemask_t *srcp, int nbits)
{
return bitmap_scnlistprintf(buf, len, srcp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __nodelist_parse(const char *buf, nodemask_t *dstp, int nbits)
{
return bitmap_parselist(buf, dstp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __node_remap(int oldbit,
const nodemask_t *oldp, const nodemask_t *newp, int nbits)
{
return bitmap_bitremap(oldbit, oldp->bits, newp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_remap(nodemask_t *dstp, const nodemask_t *srcp,
const nodemask_t *oldp, const nodemask_t *newp, int nbits)
{
bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_onto(nodemask_t *dstp, const nodemask_t *origp,
const nodemask_t *relmapp, int nbits)
{
bitmap_onto(dstp->bits, origp->bits, relmapp->bits, nbits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nodes_fold(nodemask_t *dstp, const nodemask_t *origp,
int sz, int nbits)
{
bitmap_fold(dstp->bits, origp->bits, sz, nbits);
}
# 383 "include/linux/nodemask.h"
enum node_states {
N_POSSIBLE,
N_ONLINE,
N_NORMAL_MEMORY,
N_HIGH_MEMORY = N_NORMAL_MEMORY,
N_MEMORY = N_HIGH_MEMORY,
N_CPU,
NR_NODE_STATES
};
extern nodemask_t node_states[NR_NODE_STATES];
# 460 "include/linux/nodemask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int node_state(int node, enum node_states state)
{
return node == 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void node_set_state(int node, enum node_states state)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void node_clear_state(int node, enum node_states state)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int num_node_state(enum node_states state)
{
return 1;
}
# 495 "include/linux/nodemask.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int node_random(const nodemask_t *mask)
{
return 0;
}
# 527 "include/linux/nodemask.h"
struct nodemask_scratch {
nodemask_t mask1;
nodemask_t mask2;
};
# 17 "include/linux/mmzone.h" 2
# 1 "include/linux/pageblock-flags.h" 1
# 29 "include/linux/pageblock-flags.h"
enum pageblock_bits {
PB_migrate,
PB_migrate_end = PB_migrate + 3 - 1,
PB_migrate_skip,
NR_PAGEBLOCK_BITS
};
# 66 "include/linux/pageblock-flags.h"
struct page;
unsigned long get_pfnblock_flags_mask(struct page *page,
unsigned long pfn,
unsigned long end_bitidx,
unsigned long mask);
void set_pfnblock_flags_mask(struct page *page,
unsigned long flags,
unsigned long pfn,
unsigned long end_bitidx,
unsigned long mask);
# 18 "include/linux/mmzone.h" 2
# 1 "include/linux/page-flags-layout.h" 1
# 1 "include/generated/bounds.h" 1
# 6 "include/linux/page-flags-layout.h" 2
# 19 "include/linux/mmzone.h" 2
# 1 "./arch/mips/include/asm/page.h" 1
# 42 "./arch/mips/include/asm/page.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int page_size_ftlb(unsigned int mmuextdef)
{
switch (mmuextdef) {
case ((unsigned long)(2) << 14):
if (((1UL) << 12) == (1 << 30))
return 5;
if (((1UL) << 12) == (1llu << 32))
return 6;
if (((1UL) << 12) > (256 << 10))
return 7;
case ((unsigned long)(3) << 14):
return (12 - 10) / 2;
default:
panic("Invalid FTLB configuration with Conf4_mmuextdef=%d value\n",
mmuextdef >> 14);
}
}
# 73 "./arch/mips/include/asm/page.h"
# 1 "include/linux/pfn.h" 1
# 74 "./arch/mips/include/asm/page.h" 2
extern void build_clear_page(void);
extern void build_copy_page(void);
# 85 "./arch/mips/include/asm/page.h"
extern void clear_page(void * page);
extern void copy_page(void * to, void * from);
extern unsigned long shm_align_mask;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long pages_do_alias(unsigned long addr1,
unsigned long addr2)
{
return (addr1 ^ addr2) & shm_align_mask;
}
struct page;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clear_user_page(void *addr, unsigned long vaddr,
struct page *page)
{
extern void (*flush_data_cache_page)(unsigned long addr);
clear_page(addr);
if (pages_do_alias((unsigned long) addr, vaddr & (~((1 << 12) - 1))))
flush_data_cache_page((unsigned long)addr);
}
extern void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
struct page *to);
struct vm_area_struct;
extern void copy_user_highpage(struct page *to, struct page *from,
unsigned long vaddr, struct vm_area_struct *vma);
# 130 "./arch/mips/include/asm/page.h"
typedef struct { unsigned long pte; } pte_t;
typedef struct page *pgtable_t;
# 144 "./arch/mips/include/asm/page.h"
typedef struct { unsigned long pgd; } pgd_t;
typedef struct { unsigned long pgprot; } pgprot_t;
# 178 "./arch/mips/include/asm/page.h"
# 1 "./arch/mips/include/asm/io.h" 1
# 25 "./arch/mips/include/asm/io.h"
# 1 "include/asm-generic/iomap.h" 1
# 28 "include/asm-generic/iomap.h"
extern unsigned int ioread8(void *);
extern unsigned int ioread16(void *);
extern unsigned int ioread16be(void *);
extern unsigned int ioread32(void *);
extern unsigned int ioread32be(void *);
extern void iowrite8(u8, void *);
extern void iowrite16(u16, void *);
extern void iowrite16be(u16, void *);
extern void iowrite32(u32, void *);
extern void iowrite32be(u32, void *);
# 51 "include/asm-generic/iomap.h"
extern void ioread8_rep(void *port, void *buf, unsigned long count);
extern void ioread16_rep(void *port, void *buf, unsigned long count);
extern void ioread32_rep(void *port, void *buf, unsigned long count);
extern void iowrite8_rep(void *port, const void *buf, unsigned long count);
extern void iowrite16_rep(void *port, const void *buf, unsigned long count);
extern void iowrite32_rep(void *port, const void *buf, unsigned long count);
extern void *ioport_map(unsigned long port, unsigned int nr);
extern void ioport_unmap(void *);
# 71 "include/asm-generic/iomap.h"
struct pci_dev;
extern void pci_iounmap(struct pci_dev *dev, void *);
# 1 "include/asm-generic/pci_iomap.h" 1
# 14 "include/asm-generic/pci_iomap.h"
struct pci_dev;
extern void *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
extern void *__pci_ioport_map(struct pci_dev *dev, unsigned long port,
unsigned int nr);
# 80 "include/asm-generic/iomap.h" 2
# 26 "./arch/mips/include/asm/io.h" 2
# 1 "./arch/mips/include/asm/page.h" 1
# 27 "./arch/mips/include/asm/io.h" 2
# 1 "./arch/mips/include/asm/pgtable-bits.h" 1
# 199 "./arch/mips/include/asm/pgtable-bits.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) uint64_t pte_to_entrylo(unsigned long pte_val)
{
if (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080)))) {
int sa;
sa = 31 - (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))));
# 213 "./arch/mips/include/asm/pgtable-bits.h"
return (pte_val >> ((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1)) |
((pte_val & (({__BUG_ON((unsigned long)(!((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))))); 1 << (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))); }) | ({__BUG_ON((unsigned long)(!((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))))); 1 << (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))); }))) << sa);
}
return pte_val >> ((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1);
}
# 28 "./arch/mips/include/asm/io.h" 2
# 1 "./arch/mips/include/asm/mach-generic/ioremap.h" 1
# 18 "./arch/mips/include/asm/mach-generic/ioremap.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) phys_t fixup_bigphys_addr(phys_t phys_addr, phys_t size)
{
return phys_addr;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *plat_ioremap(phys_t offset, unsigned long size,
unsigned long flags)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int plat_iounmap(const volatile void *addr)
{
return 0;
}
# 32 "./arch/mips/include/asm/io.h" 2
# 1 "./arch/mips/include/asm/mach-generic/mangle-port.h" 1
# 12 "./arch/mips/include/asm/mach-generic/mangle-port.h"
extern unsigned char io_swap_noneed;
# 33 "./arch/mips/include/asm/io.h" 2
# 63 "./arch/mips/include/asm/io.h"
extern const unsigned long mips_io_port_base;
# 74 "./arch/mips/include/asm/io.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_io_port_base(unsigned long base)
{
* (unsigned long *) &mips_io_port_base = base;
__asm__ __volatile__("": : :"memory");
}
# 119 "./arch/mips/include/asm/io.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long virt_to_phys(volatile const void *address)
{
return ((unsigned long)(address) - ((0x80000000UL) + (0UL)) + (0UL));
}
# 136 "./arch/mips/include/asm/io.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void * phys_to_virt(unsigned long address)
{
return (void *)(address + ((0x80000000UL) + (0UL)) - (0UL));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long isa_virt_to_bus(volatile void * address)
{
return (unsigned long)address - ((0x80000000UL) + (0UL));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void * isa_bus_to_virt(unsigned long address)
{
return (void *)(address + ((0x80000000UL) + (0UL)));
}
# 170 "./arch/mips/include/asm/io.h"
extern void * __ioremap(phys_t offset, phys_t size, unsigned long flags);
extern void __iounmap(const volatile void *addr);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void * __ioremap_mode(phys_t offset, unsigned long size,
unsigned long flags)
{
void *addr = plat_ioremap(offset, size, flags);
if (addr)
return addr;
if (0) {
u64 base = (0xa0000000UL);
if (flags == (2<<(((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1) + 1)))
base = (u64) (0xa0000000UL);
return (void *) (unsigned long) (base + offset);
} else if (__builtin_constant_p(offset) &&
__builtin_constant_p(size) && __builtin_constant_p(flags)) {
phys_t phys_addr, last_addr;
phys_addr = fixup_bigphys_addr(offset, size);
last_addr = phys_addr + size - 1;
if (!size || last_addr < phys_addr)
return ((void *)0);
if ((!((phys_t)(phys_addr) & (phys_t) ~0x1fffffffULL)) && (!((phys_t)(last_addr) & (phys_t) ~0x1fffffffULL)) &&
flags == (2<<(((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1) + 1)))
return (void *)
(unsigned long)((((int)(int)(phys_addr)) & 0x1fffffff) | 0xa0000000);
}
return __ioremap(offset, size, flags);
}
# 289 "./arch/mips/include/asm/io.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void iounmap(const volatile void *addr)
{
if (plat_iounmap(addr))
return;
if (0 ||
(__builtin_constant_p(addr) && (((unsigned long)(addr) & ~0x1fffffffUL) == 0xa0000000)))
return;
__iounmap(addr);
}
# 501 "./arch/mips/include/asm/io.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_writeb(u8 val, volatile void *mem) { volatile u8 *__mem; u8 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (val); if (sizeof(u8) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u8 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u8 __raw_readb(const volatile void *mem) { volatile u8 *__mem; u8 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u8) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (__val); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void writeb(u8 val, volatile void *mem) { volatile u8 *__mem; u8 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (val); if (sizeof(u8) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u8 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u8 readb(const volatile void *mem) { volatile u8 *__mem; u8 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u8) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (__val); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mem_writeb(u8 val, volatile void *mem) { volatile u8 *__mem; u8 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (val); if (sizeof(u8) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u8 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u8 __mem_readb(const volatile void *mem) { volatile u8 *__mem; u8 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u8) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (__val); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_writew(u16 val, volatile void *mem) { volatile u16 *__mem; u16 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (val); if (sizeof(u16) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u16 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 __raw_readw(const volatile void *mem) { volatile u16 *__mem; u16 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u16) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (__val); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void writew(u16 val, volatile void *mem) { volatile u16 *__mem; u16 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (io_swap_noneed ? (val) : (__builtin_constant_p((__u16)(( __u16)(__le16)(val))) ? ((__u16)( (((__u16)(( __u16)(__le16)(val)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__le16)(val)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__le16)(val))) ); if (sizeof(u16) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u16 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 readw(const volatile void *mem) { volatile u16 *__mem; u16 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u16) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (io_swap_noneed ? (__val) : (__builtin_constant_p((__u16)(( __u16)(__le16)(__val))) ? ((__u16)( (((__u16)(( __u16)(__le16)(__val)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__le16)(__val)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__le16)(__val))) ); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mem_writew(u16 val, volatile void *mem) { volatile u16 *__mem; u16 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (io_swap_noneed ? (( __le16)(__builtin_constant_p((__u16)((val))) ? ((__u16)( (((__u16)((val)) & (__u16)0x00ffU) << 8) | (((__u16)((val)) & (__u16)0xff00U) >> 8))) : __fswab16((val)))) : (val) ); if (sizeof(u16) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u16 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 __mem_readw(const volatile void *mem) { volatile u16 *__mem; u16 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u16) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (io_swap_noneed ? (( __le16)(__builtin_constant_p((__u16)((__val))) ? ((__u16)( (((__u16)((__val)) & (__u16)0x00ffU) << 8) | (((__u16)((__val)) & (__u16)0xff00U) >> 8))) : __fswab16((__val)))) : (__val) ); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_writel(u32 val, volatile void *mem) { volatile u32 *__mem; u32 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (val); if (sizeof(u32) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u32 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 __raw_readl(const volatile void *mem) { volatile u32 *__mem; u32 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u32) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (__val); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void writel(u32 val, volatile void *mem) { volatile u32 *__mem; u32 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (io_swap_noneed ? (val) : (__builtin_constant_p((__u32)(( __u32)(__le32)(val))) ? ((__u32)( (((__u32)(( __u32)(__le32)(val)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(val)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(val))) ); if (sizeof(u32) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u32 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 readl(const volatile void *mem) { volatile u32 *__mem; u32 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u32) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (io_swap_noneed ? (__val) : (__builtin_constant_p((__u32)(( __u32)(__le32)(__val))) ? ((__u32)( (((__u32)(( __u32)(__le32)(__val)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(__val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(__val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(__val)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(__val))) ); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mem_writel(u32 val, volatile void *mem) { volatile u32 *__mem; u32 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (io_swap_noneed ? (( __le32)(__builtin_constant_p((__u32)((val))) ? ((__u32)( (((__u32)((val)) & (__u32)0x000000ffUL) << 24) | (((__u32)((val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)((val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((val)) & (__u32)0xff000000UL) >> 24))) : __fswab32((val)))) : (val) ); if (sizeof(u32) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u32 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 __mem_readl(const volatile void *mem) { volatile u32 *__mem; u32 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u32) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (io_swap_noneed ? (( __le32)(__builtin_constant_p((__u32)((__val))) ? ((__u32)( (((__u32)((__val)) & (__u32)0x000000ffUL) << 24) | (((__u32)((__val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)((__val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((__val)) & (__u32)0xff000000UL) >> 24))) : __fswab32((__val)))) : (__val) ); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_writeq(u64 val, volatile void *mem) { volatile u64 *__mem; u64 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (val); if (sizeof(u64) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u64 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 __raw_readq(const volatile void *mem) { volatile u64 *__mem; u64 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u64) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (__val); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void writeq(u64 val, volatile void *mem) { volatile u64 *__mem; u64 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (io_swap_noneed ? (val) : (__builtin_constant_p((__u64)(( __u64)(__le64)(val))) ? ((__u64)( (((__u64)(( __u64)(__le64)(val)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(val)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(val)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(val)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(val)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(val)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(val)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(val)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(val))) ); if (sizeof(u64) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u64 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 readq(const volatile void *mem) { volatile u64 *__mem; u64 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u64) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (io_swap_noneed ? (__val) : (__builtin_constant_p((__u64)(( __u64)(__le64)(__val))) ? ((__u64)( (((__u64)(( __u64)(__le64)(__val)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__le64)(__val)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__le64)(__val)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__le64)(__val)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__le64)(__val)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__le64)(__val)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__le64)(__val)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__le64)(__val)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__le64)(__val))) ); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mem_writeq(u64 val, volatile void *mem) { volatile u64 *__mem; u64 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (io_swap_noneed ? (( __le32)(__builtin_constant_p((__u32)((val))) ? ((__u32)( (((__u32)((val)) & (__u32)0x000000ffUL) << 24) | (((__u32)((val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)((val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((val)) & (__u32)0xff000000UL) >> 24))) : __fswab32((val)))) : (val) ); if (sizeof(u64) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u64 __tmp; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 __mem_readq(const volatile void *mem) { volatile u64 *__mem; u64 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u64) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (1) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (1) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (io_swap_noneed ? (( __le32)(__builtin_constant_p((__u32)((__val))) ? ((__u32)( (((__u32)((__val)) & (__u32)0x000000ffUL) << 24) | (((__u32)((__val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)((__val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((__val)) & (__u32)0xff000000UL) >> 24))) : __fswab32((__val)))) : (__val) ); }
# 514 "./arch/mips/include/asm/io.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void outb(u8 val, unsigned long port) { volatile u8 *__addr; u8 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (val); ((void)sizeof(char[1 - 2*!!(sizeof(u8) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u8 inb(unsigned long port) { volatile u8 *__addr; u8 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u8) > sizeof(unsigned long))])); __val = *__addr; ; return (__val); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void outb_p(u8 val, unsigned long port) { volatile u8 *__addr; u8 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (val); ((void)sizeof(char[1 - 2*!!(sizeof(u8) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u8 inb_p(unsigned long port) { volatile u8 *__addr; u8 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u8) > sizeof(unsigned long))])); __val = *__addr; ; return (__val); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mem_outb(u8 val, unsigned long port) { volatile u8 *__addr; u8 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (val); ((void)sizeof(char[1 - 2*!!(sizeof(u8) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u8 __mem_inb(unsigned long port) { volatile u8 *__addr; u8 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u8) > sizeof(unsigned long))])); __val = *__addr; ; return (__val); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mem_outb_p(u8 val, unsigned long port) { volatile u8 *__addr; u8 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (val); ((void)sizeof(char[1 - 2*!!(sizeof(u8) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u8 __mem_inb_p(unsigned long port) { volatile u8 *__addr; u8 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u8) > sizeof(unsigned long))])); __val = *__addr; ; return (__val); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void outw(u16 val, unsigned long port) { volatile u16 *__addr; u16 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (io_swap_noneed ? (val) : (__builtin_constant_p((__u16)(( __u16)(__le16)(val))) ? ((__u16)( (((__u16)(( __u16)(__le16)(val)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__le16)(val)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__le16)(val))) ); ((void)sizeof(char[1 - 2*!!(sizeof(u16) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 inw(unsigned long port) { volatile u16 *__addr; u16 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u16) > sizeof(unsigned long))])); __val = *__addr; ; return (io_swap_noneed ? (__val) : (__builtin_constant_p((__u16)(( __u16)(__le16)(__val))) ? ((__u16)( (((__u16)(( __u16)(__le16)(__val)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__le16)(__val)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__le16)(__val))) ); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void outw_p(u16 val, unsigned long port) { volatile u16 *__addr; u16 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (io_swap_noneed ? (val) : (__builtin_constant_p((__u16)(( __u16)(__le16)(val))) ? ((__u16)( (((__u16)(( __u16)(__le16)(val)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__le16)(val)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__le16)(val))) ); ((void)sizeof(char[1 - 2*!!(sizeof(u16) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 inw_p(unsigned long port) { volatile u16 *__addr; u16 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u16) > sizeof(unsigned long))])); __val = *__addr; ; return (io_swap_noneed ? (__val) : (__builtin_constant_p((__u16)(( __u16)(__le16)(__val))) ? ((__u16)( (((__u16)(( __u16)(__le16)(__val)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__le16)(__val)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__le16)(__val))) ); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mem_outw(u16 val, unsigned long port) { volatile u16 *__addr; u16 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (io_swap_noneed ? (( __le16)(__builtin_constant_p((__u16)((val))) ? ((__u16)( (((__u16)((val)) & (__u16)0x00ffU) << 8) | (((__u16)((val)) & (__u16)0xff00U) >> 8))) : __fswab16((val)))) : (val) ); ((void)sizeof(char[1 - 2*!!(sizeof(u16) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 __mem_inw(unsigned long port) { volatile u16 *__addr; u16 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u16) > sizeof(unsigned long))])); __val = *__addr; ; return (io_swap_noneed ? (( __le16)(__builtin_constant_p((__u16)((__val))) ? ((__u16)( (((__u16)((__val)) & (__u16)0x00ffU) << 8) | (((__u16)((__val)) & (__u16)0xff00U) >> 8))) : __fswab16((__val)))) : (__val) ); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mem_outw_p(u16 val, unsigned long port) { volatile u16 *__addr; u16 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (io_swap_noneed ? (( __le16)(__builtin_constant_p((__u16)((val))) ? ((__u16)( (((__u16)((val)) & (__u16)0x00ffU) << 8) | (((__u16)((val)) & (__u16)0xff00U) >> 8))) : __fswab16((val)))) : (val) ); ((void)sizeof(char[1 - 2*!!(sizeof(u16) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 __mem_inw_p(unsigned long port) { volatile u16 *__addr; u16 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u16) > sizeof(unsigned long))])); __val = *__addr; ; return (io_swap_noneed ? (( __le16)(__builtin_constant_p((__u16)((__val))) ? ((__u16)( (((__u16)((__val)) & (__u16)0x00ffU) << 8) | (((__u16)((__val)) & (__u16)0xff00U) >> 8))) : __fswab16((__val)))) : (__val) ); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void outl(u32 val, unsigned long port) { volatile u32 *__addr; u32 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (io_swap_noneed ? (val) : (__builtin_constant_p((__u32)(( __u32)(__le32)(val))) ? ((__u32)( (((__u32)(( __u32)(__le32)(val)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(val)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(val))) ); ((void)sizeof(char[1 - 2*!!(sizeof(u32) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 inl(unsigned long port) { volatile u32 *__addr; u32 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u32) > sizeof(unsigned long))])); __val = *__addr; ; return (io_swap_noneed ? (__val) : (__builtin_constant_p((__u32)(( __u32)(__le32)(__val))) ? ((__u32)( (((__u32)(( __u32)(__le32)(__val)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(__val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(__val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(__val)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(__val))) ); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void outl_p(u32 val, unsigned long port) { volatile u32 *__addr; u32 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (io_swap_noneed ? (val) : (__builtin_constant_p((__u32)(( __u32)(__le32)(val))) ? ((__u32)( (((__u32)(( __u32)(__le32)(val)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(val)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(val))) ); ((void)sizeof(char[1 - 2*!!(sizeof(u32) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 inl_p(unsigned long port) { volatile u32 *__addr; u32 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u32) > sizeof(unsigned long))])); __val = *__addr; ; return (io_swap_noneed ? (__val) : (__builtin_constant_p((__u32)(( __u32)(__le32)(__val))) ? ((__u32)( (((__u32)(( __u32)(__le32)(__val)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__le32)(__val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__le32)(__val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__le32)(__val)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__le32)(__val))) ); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mem_outl(u32 val, unsigned long port) { volatile u32 *__addr; u32 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (io_swap_noneed ? (( __le32)(__builtin_constant_p((__u32)((val))) ? ((__u32)( (((__u32)((val)) & (__u32)0x000000ffUL) << 24) | (((__u32)((val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)((val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((val)) & (__u32)0xff000000UL) >> 24))) : __fswab32((val)))) : (val) ); ((void)sizeof(char[1 - 2*!!(sizeof(u32) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 __mem_inl(unsigned long port) { volatile u32 *__addr; u32 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u32) > sizeof(unsigned long))])); __val = *__addr; ; return (io_swap_noneed ? (( __le32)(__builtin_constant_p((__u32)((__val))) ? ((__u32)( (((__u32)((__val)) & (__u32)0x000000ffUL) << 24) | (((__u32)((__val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)((__val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((__val)) & (__u32)0xff000000UL) >> 24))) : __fswab32((__val)))) : (__val) ); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mem_outl_p(u32 val, unsigned long port) { volatile u32 *__addr; u32 __val; do { } while (0); __addr = (void *)(mips_io_port_base + port); __val = (io_swap_noneed ? (( __le32)(__builtin_constant_p((__u32)((val))) ? ((__u32)( (((__u32)((val)) & (__u32)0x000000ffUL) << 24) | (((__u32)((val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)((val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((val)) & (__u32)0xff000000UL) >> 24))) : __fswab32((val)))) : (val) ); ((void)sizeof(char[1 - 2*!!(sizeof(u32) > sizeof(unsigned long))])); *__addr = __val; ; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 __mem_inl_p(unsigned long port) { volatile u32 *__addr; u32 __val; __addr = (void *)(mips_io_port_base + port); ((void)sizeof(char[1 - 2*!!(sizeof(u32) > sizeof(unsigned long))])); __val = *__addr; ; return (io_swap_noneed ? (( __le32)(__builtin_constant_p((__u32)((__val))) ? ((__u32)( (((__u32)((__val)) & (__u32)0x000000ffUL) << 24) | (((__u32)((__val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)((__val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((__val)) & (__u32)0xff000000UL) >> 24))) : __fswab32((__val)))) : (__val) ); }
# 525 "./arch/mips/include/asm/io.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ____raw_writeq(u64 val, volatile void *mem) { volatile u64 *__mem; u64 __val; do { } while (0); __mem = (void *)((unsigned long)(mem)); __val = (val); if (sizeof(u64) != sizeof(u64) || sizeof(u64) == sizeof(long)) *__mem = __val; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; u64 __tmp; if (0) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __writeq""\n\t" "dsll32 %L0, %L0, 0" "\n\t" "dsrl32 %L0, %L0, 0" "\n\t" "dsll32 %M0, %M0, 0" "\n\t" "or %L0, %L0, %M0" "\n\t" "sd %L0, %2" "\n\t" ".set mips0" "\n" : "=r" (__tmp) : "0" (__val), "m" (*__mem)); if (0) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else BUG(); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 ____raw_readq(const volatile void *mem) { volatile u64 *__mem; u64 __val; __mem = (void *)((unsigned long)(mem)); if (sizeof(u64) != sizeof(u64) || sizeof(u64) == sizeof(long)) __val = *__mem; else if ((cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) { unsigned long __flags; if (0) do { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); __asm__ __volatile__( ".set mips3" "\t\t# __readq" "\n\t" "ld %L0, %1" "\n\t" "dsra32 %M0, %L0, 0" "\n\t" "sll %L0, %L0, 0" "\n\t" ".set mips0" "\n" : "=r" (__val) : "m" (*__mem)); if (0) do { if (({ ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(__flags); })) { do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } } while (0); } else { __val = 0; BUG(); } return (__val); }
# 614 "./arch/mips/include/asm/io.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void writesb(volatile void *mem, const void *addr, unsigned int count) { const volatile u8 *__addr = addr; while (count--) { __mem_writeb(*__addr, mem); __addr++; } } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void readsb(volatile void *mem, void *addr, unsigned int count) { volatile u8 *__addr = addr; while (count--) { *__addr = __mem_readb(mem); __addr++; } } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void outsb(unsigned long port, const void *addr, unsigned int count) { const volatile u8 *__addr = addr; while (count--) { __mem_outb(*__addr, port); __addr++; } } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void insb(unsigned long port, void *addr, unsigned int count) { volatile u8 *__addr = addr; while (count--) { *__addr = __mem_inb(port); __addr++; } }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void writesw(volatile void *mem, const void *addr, unsigned int count) { const volatile u16 *__addr = addr; while (count--) { __mem_writew(*__addr, mem); __addr++; } } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void readsw(volatile void *mem, void *addr, unsigned int count) { volatile u16 *__addr = addr; while (count--) { *__addr = __mem_readw(mem); __addr++; } } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void outsw(unsigned long port, const void *addr, unsigned int count) { const volatile u16 *__addr = addr; while (count--) { __mem_outw(*__addr, port); __addr++; } } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void insw(unsigned long port, void *addr, unsigned int count) { volatile u16 *__addr = addr; while (count--) { *__addr = __mem_inw(port); __addr++; } }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void writesl(volatile void *mem, const void *addr, unsigned int count) { const volatile u32 *__addr = addr; while (count--) { __mem_writel(*__addr, mem); __addr++; } } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void readsl(volatile void *mem, void *addr, unsigned int count) { volatile u32 *__addr = addr; while (count--) { *__addr = __mem_readl(mem); __addr++; } } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void outsl(unsigned long port, const void *addr, unsigned int count) { const volatile u32 *__addr = addr; while (count--) { __mem_outl(*__addr, port); __addr++; } } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void insl(unsigned long port, void *addr, unsigned int count) { volatile u32 *__addr = addr; while (count--) { *__addr = __mem_inl(port); __addr++; } }
# 629 "./arch/mips/include/asm/io.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void memset_io(volatile void *addr, unsigned char val, int count)
{
memset((void *) addr, val, count);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void memcpy_fromio(void *dst, const volatile void *src, int count)
{
memcpy(dst, (void *) src, count);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void memcpy_toio(volatile void *dst, const void *src, int count)
{
memcpy((void *) dst, src, count);
}
# 664 "./arch/mips/include/asm/io.h"
extern void (*_dma_cache_wback_inv)(unsigned long start, unsigned long size);
extern void (*_dma_cache_wback)(unsigned long start, unsigned long size);
extern void (*_dma_cache_inv)(unsigned long start, unsigned long size);
# 179 "./arch/mips/include/asm/page.h" 2
# 201 "./arch/mips/include/asm/page.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pfn_valid(unsigned long pfn)
{
extern unsigned long max_mapnr;
return pfn >= ((((0UL)) + ((1UL) << 12)-1) >> 12) && pfn < max_mapnr;
}
# 229 "./arch/mips/include/asm/page.h"
extern int __virt_addr_valid(const volatile void *kaddr);
# 239 "./arch/mips/include/asm/page.h"
# 1 "include/asm-generic/memory_model.h" 1
# 240 "./arch/mips/include/asm/page.h" 2
# 1 "include/asm-generic/getorder.h" 1
# 12 "include/asm-generic/getorder.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((__const__))
int __get_order(unsigned long size)
{
int order;
size--;
size >>= 12;
order = fls(size);
return order;
}
# 241 "./arch/mips/include/asm/page.h" 2
# 21 "include/linux/mmzone.h" 2
# 38 "include/linux/mmzone.h"
enum {
MIGRATE_UNMOVABLE,
MIGRATE_RECLAIMABLE,
MIGRATE_MOVABLE,
MIGRATE_PCPTYPES,
MIGRATE_RESERVE = MIGRATE_PCPTYPES,
# 63 "include/linux/mmzone.h"
MIGRATE_TYPES
};
# 76 "include/linux/mmzone.h"
extern int page_group_by_mobility_disabled;
# 85 "include/linux/mmzone.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int get_pfnblock_migratetype(struct page *page, unsigned long pfn)
{
((void)sizeof(char[1 - 2*!!(PB_migrate_end - PB_migrate != 2)]));
return get_pfnblock_flags_mask(page, pfn, PB_migrate_end,
((1UL << (PB_migrate_end - PB_migrate + 1)) - 1));
}
struct free_area {
struct list_head free_list[MIGRATE_TYPES];
unsigned long nr_free;
};
struct pglist_data;
# 106 "include/linux/mmzone.h"
struct zone_padding {
char x[0];
} __attribute__((__aligned__(1 << (5))));
enum zone_stat_item {
NR_FREE_PAGES,
NR_ALLOC_BATCH,
NR_LRU_BASE,
NR_INACTIVE_ANON = NR_LRU_BASE,
NR_ACTIVE_ANON,
NR_INACTIVE_FILE,
NR_ACTIVE_FILE,
NR_UNEVICTABLE,
NR_MLOCK,
NR_ANON_PAGES,
NR_FILE_MAPPED,
NR_FILE_PAGES,
NR_FILE_DIRTY,
NR_WRITEBACK,
NR_SLAB_RECLAIMABLE,
NR_SLAB_UNRECLAIMABLE,
NR_PAGETABLE,
NR_KERNEL_STACK,
NR_UNSTABLE_NFS,
NR_BOUNCE,
NR_VMSCAN_WRITE,
NR_VMSCAN_IMMEDIATE,
NR_WRITEBACK_TEMP,
NR_ISOLATED_ANON,
NR_ISOLATED_FILE,
NR_SHMEM,
NR_DIRTIED,
NR_WRITTEN,
NR_PAGES_SCANNED,
# 155 "include/linux/mmzone.h"
WORKINGSET_REFAULT,
WORKINGSET_ACTIVATE,
WORKINGSET_NODERECLAIM,
NR_ANON_TRANSPARENT_HUGEPAGES,
NR_FREE_CMA_PAGES,
NR_VM_ZONE_STAT_ITEMS };
# 175 "include/linux/mmzone.h"
enum lru_list {
LRU_INACTIVE_ANON = 0,
LRU_ACTIVE_ANON = 0 + 1,
LRU_INACTIVE_FILE = 0 + 2,
LRU_ACTIVE_FILE = 0 + 2 + 1,
LRU_UNEVICTABLE,
NR_LRU_LISTS
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_file_lru(enum lru_list lru)
{
return (lru == LRU_INACTIVE_FILE || lru == LRU_ACTIVE_FILE);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_active_lru(enum lru_list lru)
{
return (lru == LRU_ACTIVE_ANON || lru == LRU_ACTIVE_FILE);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_unevictable_lru(enum lru_list lru)
{
return (lru == LRU_UNEVICTABLE);
}
struct zone_reclaim_stat {
# 212 "include/linux/mmzone.h"
unsigned long recent_rotated[2];
unsigned long recent_scanned[2];
};
struct lruvec {
struct list_head lists[NR_LRU_LISTS];
struct zone_reclaim_stat reclaim_stat;
};
# 239 "include/linux/mmzone.h"
typedef unsigned isolate_mode_t;
enum zone_watermarks {
WMARK_MIN,
WMARK_LOW,
WMARK_HIGH,
NR_WMARK
};
struct per_cpu_pages {
int count;
int high;
int batch;
struct list_head lists[MIGRATE_PCPTYPES];
};
struct per_cpu_pageset {
struct per_cpu_pages pcp;
s8 stat_threshold;
s8 vm_stat_diff[NR_VM_ZONE_STAT_ITEMS];
};
enum zone_type {
# 309 "include/linux/mmzone.h"
ZONE_NORMAL,
# 321 "include/linux/mmzone.h"
ZONE_MOVABLE,
__MAX_NR_ZONES
};
struct zone {
unsigned long watermark[NR_WMARK];
# 341 "include/linux/mmzone.h"
long lowmem_reserve[2];
# 351 "include/linux/mmzone.h"
unsigned int inactive_ratio;
struct pglist_data *zone_pgdat;
struct per_cpu_pageset *pageset;
unsigned long dirty_balance_reserve;
unsigned long *pageblock_flags;
# 379 "include/linux/mmzone.h"
unsigned long zone_start_pfn;
# 422 "include/linux/mmzone.h"
unsigned long managed_pages;
unsigned long spanned_pages;
unsigned long present_pages;
const char *name;
int nr_migrate_reserve_block;
# 472 "include/linux/mmzone.h"
wait_queue_head_t *wait_table;
unsigned long wait_table_hash_nr_entries;
unsigned long wait_table_bits;
struct zone_padding _pad1_;
spinlock_t lock;
struct free_area free_area[11];
unsigned long flags;
struct zone_padding _pad2_;
spinlock_t lru_lock;
struct lruvec lruvec;
atomic_long_t inactive_age;
unsigned long percpu_drift_mark;
unsigned long compact_cached_free_pfn;
unsigned long compact_cached_migrate_pfn[2];
# 518 "include/linux/mmzone.h"
unsigned int compact_considered;
unsigned int compact_defer_shift;
int compact_order_failed;
bool compact_blockskip_flush;
struct zone_padding _pad3_;
atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS];
} __attribute__((__aligned__(1 << (5))));
enum zone_flags {
ZONE_RECLAIM_LOCKED,
ZONE_OOM_LOCKED,
ZONE_CONGESTED,
ZONE_DIRTY,
ZONE_WRITEBACK,
ZONE_FAIR_DEPLETED,
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long zone_end_pfn(const struct zone *zone)
{
return zone->zone_start_pfn + zone->spanned_pages;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool zone_spans_pfn(const struct zone *zone, unsigned long pfn)
{
return zone->zone_start_pfn <= pfn && pfn < zone_end_pfn(zone);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool zone_is_initialized(struct zone *zone)
{
return !!zone->wait_table;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool zone_is_empty(struct zone *zone)
{
return zone->spanned_pages == 0;
}
# 657 "include/linux/mmzone.h"
struct zonelist_cache;
struct zoneref {
struct zone *zone;
int zone_idx;
};
# 686 "include/linux/mmzone.h"
struct zonelist {
struct zonelist_cache *zlcache_ptr;
struct zoneref _zonerefs[((1 << 0) * 2) + 1];
};
struct node_active_region {
unsigned long start_pfn;
unsigned long end_pfn;
int nid;
};
extern struct page *mem_map;
# 718 "include/linux/mmzone.h"
struct bootmem_data;
typedef struct pglist_data {
struct zone node_zones[2];
struct zonelist node_zonelists[1];
int nr_zones;
struct page *node_mem_map;
struct bootmem_data *bdata;
# 745 "include/linux/mmzone.h"
unsigned long node_start_pfn;
unsigned long node_present_pages;
unsigned long node_spanned_pages;
int node_id;
wait_queue_head_t kswapd_wait;
wait_queue_head_t pfmemalloc_wait;
struct task_struct *kswapd;
int kswapd_max_order;
enum zone_type classzone_idx;
# 766 "include/linux/mmzone.h"
} pg_data_t;
# 780 "include/linux/mmzone.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long pgdat_end_pfn(pg_data_t *pgdat)
{
return pgdat->node_start_pfn + pgdat->node_spanned_pages;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool pgdat_is_empty(pg_data_t *pgdat)
{
return !pgdat->node_start_pfn && !pgdat->node_spanned_pages;
}
# 1 "include/linux/memory_hotplug.h" 1
# 1 "include/linux/mmzone.h" 1
# 5 "include/linux/memory_hotplug.h" 2
# 1 "include/linux/notifier.h" 1
# 13 "include/linux/notifier.h"
# 1 "include/linux/mutex.h" 1
# 13 "include/linux/mutex.h"
# 1 "arch/mips/include/generated/asm/current.h" 1
# 14 "include/linux/mutex.h" 2
# 1 "include/linux/osq_lock.h" 1
# 11 "include/linux/osq_lock.h"
struct optimistic_spin_queue {
atomic_t tail;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void osq_lock_init(struct optimistic_spin_queue *lock)
{
((&lock->tail)->counter = ((0)));
}
# 21 "include/linux/mutex.h" 2
# 50 "include/linux/mutex.h"
struct mutex {
atomic_t count;
spinlock_t wait_lock;
struct list_head wait_list;
# 68 "include/linux/mutex.h"
};
struct mutex_waiter {
struct list_head list;
struct task_struct *task;
};
# 100 "include/linux/mutex.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void mutex_destroy(struct mutex *lock) {}
# 120 "include/linux/mutex.h"
extern void __mutex_init(struct mutex *lock, const char *name,
struct lock_class_key *key);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int mutex_is_locked(struct mutex *lock)
{
return (*(volatile typeof((&lock->count)->counter) *)&((&lock->count)->counter)) != 1;
}
# 158 "include/linux/mutex.h"
extern void mutex_lock(struct mutex *lock);
extern int __attribute__((warn_unused_result)) mutex_lock_interruptible(struct mutex *lock);
extern int __attribute__((warn_unused_result)) mutex_lock_killable(struct mutex *lock);
# 174 "include/linux/mutex.h"
extern int mutex_trylock(struct mutex *lock);
extern void mutex_unlock(struct mutex *lock);
extern int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock);
# 14 "include/linux/notifier.h" 2
# 1 "include/linux/rwsem.h" 1
# 21 "include/linux/rwsem.h"
struct rw_semaphore;
# 1 "include/linux/rwsem-spinlock.h" 1
# 23 "include/linux/rwsem-spinlock.h"
struct rw_semaphore {
__s32 count;
raw_spinlock_t wait_lock;
struct list_head wait_list;
};
extern void __down_read(struct rw_semaphore *sem);
extern int __down_read_trylock(struct rw_semaphore *sem);
extern void __down_write(struct rw_semaphore *sem);
extern void __down_write_nested(struct rw_semaphore *sem, int subclass);
extern int __down_write_trylock(struct rw_semaphore *sem);
extern void __up_read(struct rw_semaphore *sem);
extern void __up_write(struct rw_semaphore *sem);
extern void __downgrade_write(struct rw_semaphore *sem);
extern int rwsem_is_locked(struct rw_semaphore *sem);
# 25 "include/linux/rwsem.h" 2
# 84 "include/linux/rwsem.h"
extern void __init_rwsem(struct rw_semaphore *sem, const char *name,
struct lock_class_key *key);
# 100 "include/linux/rwsem.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int rwsem_is_contended(struct rw_semaphore *sem)
{
return !list_empty(&sem->wait_list);
}
extern void down_read(struct rw_semaphore *sem);
extern int down_read_trylock(struct rw_semaphore *sem);
extern void down_write(struct rw_semaphore *sem);
extern int down_write_trylock(struct rw_semaphore *sem);
extern void up_read(struct rw_semaphore *sem);
extern void up_write(struct rw_semaphore *sem);
extern void downgrade_write(struct rw_semaphore *sem);
# 15 "include/linux/notifier.h" 2
# 1 "include/linux/srcu.h" 1
# 33 "include/linux/srcu.h"
# 1 "include/linux/rcupdate.h" 1
# 43 "include/linux/rcupdate.h"
# 1 "include/linux/completion.h" 1
# 25 "include/linux/completion.h"
struct completion {
unsigned int done;
wait_queue_head_t wait;
};
# 73 "include/linux/completion.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_completion(struct completion *x)
{
x->done = 0;
do { static struct lock_class_key __key; __init_waitqueue_head((&x->wait), "&x->wait", &__key); } while (0);
}
# 86 "include/linux/completion.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void reinit_completion(struct completion *x)
{
x->done = 0;
}
extern void wait_for_completion(struct completion *);
extern void wait_for_completion_io(struct completion *);
extern int wait_for_completion_interruptible(struct completion *x);
extern int wait_for_completion_killable(struct completion *x);
extern unsigned long wait_for_completion_timeout(struct completion *x,
unsigned long timeout);
extern unsigned long wait_for_completion_io_timeout(struct completion *x,
unsigned long timeout);
extern long wait_for_completion_interruptible_timeout(
struct completion *x, unsigned long timeout);
extern long wait_for_completion_killable_timeout(
struct completion *x, unsigned long timeout);
extern bool try_wait_for_completion(struct completion *x);
extern bool completion_done(struct completion *x);
extern void complete(struct completion *);
extern void complete_all(struct completion *);
# 44 "include/linux/rcupdate.h" 2
# 1 "include/linux/debugobjects.h" 1
enum debug_obj_state {
ODEBUG_STATE_NONE,
ODEBUG_STATE_INIT,
ODEBUG_STATE_INACTIVE,
ODEBUG_STATE_ACTIVE,
ODEBUG_STATE_DESTROYED,
ODEBUG_STATE_NOTAVAILABLE,
ODEBUG_STATE_MAX,
};
struct debug_obj_descr;
# 27 "include/linux/debugobjects.h"
struct debug_obj {
struct hlist_node node;
enum debug_obj_state state;
unsigned int astate;
void *object;
struct debug_obj_descr *descr;
};
# 52 "include/linux/debugobjects.h"
struct debug_obj_descr {
const char *name;
void *(*debug_hint) (void *addr);
int (*fixup_init) (void *addr, enum debug_obj_state state);
int (*fixup_activate) (void *addr, enum debug_obj_state state);
int (*fixup_destroy) (void *addr, enum debug_obj_state state);
int (*fixup_free) (void *addr, enum debug_obj_state state);
int (*fixup_assert_init)(void *addr, enum debug_obj_state state);
};
# 84 "include/linux/debugobjects.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
debug_object_init (void *addr, struct debug_obj_descr *descr) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
debug_object_activate (void *addr, struct debug_obj_descr *descr) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
debug_object_deactivate(void *addr, struct debug_obj_descr *descr) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
debug_object_destroy (void *addr, struct debug_obj_descr *descr) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
debug_object_free (void *addr, struct debug_obj_descr *descr) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
debug_object_assert_init(void *addr, struct debug_obj_descr *descr) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_objects_early_init(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_objects_mem_init(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
debug_check_no_obj_freed(const void *address, unsigned long size) { }
# 45 "include/linux/rcupdate.h" 2
extern int rcu_expedited;
enum rcutorture_type {
RCU_FLAVOR,
RCU_BH_FLAVOR,
RCU_SCHED_FLAVOR,
RCU_TASKS_FLAVOR,
SRCU_FLAVOR,
INVALID_RCU_FLAVOR
};
void rcutorture_get_gp_data(enum rcutorture_type test_type, int *flags,
unsigned long *gpnum, unsigned long *completed);
void rcutorture_record_test_transition(void);
void rcutorture_record_progress(unsigned long vernum);
void do_trace_rcu_torture_read(const char *rcutorturename,
struct callback_head *rhp,
unsigned long secs,
unsigned long c_old,
unsigned long c);
# 171 "include/linux/rcupdate.h"
void call_rcu_bh(struct callback_head *head,
void (*func)(struct callback_head *head));
# 193 "include/linux/rcupdate.h"
void call_rcu_sched(struct callback_head *head,
void (*func)(struct callback_head *rcu));
void synchronize_sched(void);
# 216 "include/linux/rcupdate.h"
void call_rcu_tasks(struct callback_head *head, void (*func)(struct callback_head *head));
void synchronize_rcu_tasks(void);
void rcu_barrier_tasks(void);
# 237 "include/linux/rcupdate.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __rcu_read_lock(void)
{
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __rcu_read_unlock(void)
{
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void synchronize_rcu(void)
{
synchronize_sched();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int rcu_preempt_depth(void)
{
return 0;
}
void rcu_init(void);
void rcu_sched_qs(void);
void rcu_bh_qs(void);
void rcu_check_callbacks(int cpu, int user);
struct notifier_block;
void rcu_idle_enter(void);
void rcu_idle_exit(void);
void rcu_irq_enter(void);
void rcu_irq_exit(void);
void rcu_sysrq_start(void);
void rcu_sysrq_end(void);
# 286 "include/linux/rcupdate.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_user_enter(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_user_exit(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_user_hooks_switch(struct task_struct *prev,
struct task_struct *next) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_init_nohz(void)
{
}
# 356 "include/linux/rcupdate.h"
bool __rcu_is_watching(void);
typedef void call_rcu_func_t(struct callback_head *head,
void (*func)(struct callback_head *head));
void wait_rcu_gp(call_rcu_func_t crf);
# 1 "include/linux/rcutree.h" 1
# 33 "include/linux/rcutree.h"
void rcu_note_context_switch(int cpu);
int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies);
void rcu_cpu_stall_reset(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_virt_note_context_switch(int cpu)
{
rcu_note_context_switch(cpu);
}
void synchronize_rcu_bh(void);
void synchronize_sched_expedited(void);
void synchronize_rcu_expedited(void);
void kfree_call_rcu(struct callback_head *head, void (*func)(struct callback_head *rcu));
# 71 "include/linux/rcutree.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void synchronize_rcu_bh_expedited(void)
{
synchronize_sched_expedited();
}
void rcu_barrier(void);
void rcu_barrier_bh(void);
void rcu_barrier_sched(void);
unsigned long get_state_synchronize_rcu(void);
void cond_synchronize_rcu(unsigned long oldstate);
extern unsigned long rcutorture_testseq;
extern unsigned long rcutorture_vernum;
long rcu_batches_completed(void);
long rcu_batches_completed_bh(void);
long rcu_batches_completed_sched(void);
void show_rcu_gp_kthreads(void);
void rcu_force_quiescent_state(void);
void rcu_bh_force_quiescent_state(void);
void rcu_sched_force_quiescent_state(void);
void exit_rcu(void);
void rcu_scheduler_starting(void);
extern int rcu_scheduler_active __attribute__((__section__(".data..read_mostly")));
bool rcu_is_watching(void);
# 370 "include/linux/rcupdate.h" 2
# 388 "include/linux/rcupdate.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_rcu_head(struct callback_head *head)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void destroy_rcu_head(struct callback_head *head)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_rcu_head_on_stack(struct callback_head *head)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void destroy_rcu_head_on_stack(struct callback_head *head)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool rcu_lockdep_current_cpu_online(void)
{
return true;
}
# 493 "include/linux/rcupdate.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int rcu_read_lock_held(void)
{
return 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int rcu_read_lock_bh_held(void)
{
return 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int rcu_read_lock_sched_held(void)
{
return 1;
}
# 877 "include/linux/rcupdate.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_read_lock(void)
{
__rcu_read_lock();
(void)0;
do { } while (0);
do { } while (0)
;
}
# 929 "include/linux/rcupdate.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_read_unlock(void)
{
do { } while (0)
;
do { } while (0);
(void)0;
__rcu_read_unlock();
}
# 955 "include/linux/rcupdate.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_read_lock_bh(void)
{
local_bh_disable();
(void)0;
do { } while (0);
do { } while (0)
;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_read_unlock_bh(void)
{
do { } while (0)
;
do { } while (0);
(void)0;
local_bh_enable();
}
# 991 "include/linux/rcupdate.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_read_lock_sched(void)
{
__asm__ __volatile__("": : :"memory");
(void)0;
do { } while (0);
do { } while (0)
;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((no_instrument_function)) void rcu_read_lock_sched_notrace(void)
{
__asm__ __volatile__("": : :"memory");
(void)0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_read_unlock_sched(void)
{
do { } while (0)
;
do { } while (0);
(void)0;
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((no_instrument_function)) void rcu_read_unlock_sched_notrace(void)
{
(void)0;
__asm__ __volatile__("": : :"memory");
}
# 1133 "include/linux/rcupdate.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool rcu_is_nocb_cpu(int cpu) { return false; }
# 1143 "include/linux/rcupdate.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool rcu_sys_is_idle(void)
{
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_sysidle_force_exit(void)
{
}
# 34 "include/linux/srcu.h" 2
# 1 "include/linux/workqueue.h" 1
# 1 "include/linux/timer.h" 1
# 1 "include/linux/ktime.h" 1
# 24 "include/linux/ktime.h"
# 1 "include/linux/time.h" 1
# 1 "include/linux/math64.h" 1
# 64 "include/linux/math64.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder)
{
*remainder = ({ uint32_t __base = (divisor); uint32_t __rem; (void)(((typeof((dividend)) *)0) == ((uint64_t *)0)); if (__builtin_expect(!!(((dividend) >> 32) == 0), 1)) { __rem = (uint32_t)(dividend) % __base; (dividend) = (uint32_t)(dividend) / __base; } else __rem = __div64_32(&(dividend), __base); __rem; });
return dividend;
}
extern s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder);
extern u64 div64_u64_rem(u64 dividend, u64 divisor, u64 *remainder);
extern u64 div64_u64(u64 dividend, u64 divisor);
extern s64 div64_s64(s64 dividend, s64 divisor);
# 97 "include/linux/math64.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 div_u64(u64 dividend, u32 divisor)
{
u32 remainder;
return div_u64_rem(dividend, divisor, &remainder);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 div_s64(s64 dividend, s32 divisor)
{
s32 remainder;
return div_s64_rem(dividend, divisor, &remainder);
}
u32 iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) u32
__iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder)
{
u32 ret = 0;
while (dividend >= divisor) {
asm("" : "+rm"(dividend));
dividend -= divisor;
ret++;
}
*remainder = dividend;
return ret;
}
# 148 "include/linux/math64.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 mul_u64_u32_shr(u64 a, u32 mul, unsigned int shift)
{
u32 ah, al;
u64 ret;
al = a;
ah = a >> 32;
ret = ((u64)al * mul) >> shift;
if (ah)
ret += ((u64)ah * mul) << (32 - shift);
return ret;
}
# 7 "include/linux/time.h" 2
# 1 "include/linux/time64.h" 1
# 1 "include/uapi/linux/time.h" 1
# 9 "include/uapi/linux/time.h"
struct timespec {
__kernel_time_t tv_sec;
long tv_nsec;
};
struct timeval {
__kernel_time_t tv_sec;
__kernel_suseconds_t tv_usec;
};
struct timezone {
int tz_minuteswest;
int tz_dsttime;
};
# 34 "include/uapi/linux/time.h"
struct itimerspec {
struct timespec it_interval;
struct timespec it_value;
};
struct itimerval {
struct timeval it_interval;
struct timeval it_value;
};
# 5 "include/linux/time64.h" 2
typedef __s64 time64_t;
# 15 "include/linux/time64.h"
struct timespec64 {
time64_t tv_sec;
long tv_nsec;
};
# 60 "include/linux/time64.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct timespec timespec64_to_timespec(const struct timespec64 ts64)
{
struct timespec ret;
ret.tv_sec = (time_t)ts64.tv_sec;
ret.tv_nsec = ts64.tv_nsec;
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct timespec64 timespec_to_timespec64(const struct timespec ts)
{
struct timespec64 ret;
ret.tv_sec = ts.tv_sec;
ret.tv_nsec = ts.tv_nsec;
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int timespec64_equal(const struct timespec64 *a,
const struct timespec64 *b)
{
return (a->tv_sec == b->tv_sec) && (a->tv_nsec == b->tv_nsec);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int timespec64_compare(const struct timespec64 *lhs, const struct timespec64 *rhs)
{
if (lhs->tv_sec < rhs->tv_sec)
return -1;
if (lhs->tv_sec > rhs->tv_sec)
return 1;
return lhs->tv_nsec - rhs->tv_nsec;
}
extern void set_normalized_timespec64(struct timespec64 *ts, time64_t sec, s64 nsec);
extern struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
const struct timespec64 rhs);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct timespec64 timespec64_add(struct timespec64 lhs,
struct timespec64 rhs)
{
struct timespec64 ts_delta;
set_normalized_timespec64(&ts_delta, lhs.tv_sec + rhs.tv_sec,
lhs.tv_nsec + rhs.tv_nsec);
return ts_delta;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct timespec64 timespec64_sub(struct timespec64 lhs,
struct timespec64 rhs)
{
struct timespec64 ts_delta;
set_normalized_timespec64(&ts_delta, lhs.tv_sec - rhs.tv_sec,
lhs.tv_nsec - rhs.tv_nsec);
return ts_delta;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool timespec64_valid(const struct timespec64 *ts)
{
if (ts->tv_sec < 0)
return false;
if ((unsigned long)ts->tv_nsec >= 1000000000L)
return false;
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool timespec64_valid_strict(const struct timespec64 *ts)
{
if (!timespec64_valid(ts))
return false;
if ((unsigned long long)ts->tv_sec >= (((s64)~((u64)1 << 63)) / 1000000000L))
return false;
return true;
}
# 161 "include/linux/time64.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 timespec64_to_ns(const struct timespec64 *ts)
{
return ((s64) ts->tv_sec * 1000000000L) + ts->tv_nsec;
}
extern struct timespec64 ns_to_timespec64(const s64 nsec);
# 182 "include/linux/time64.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void timespec64_add_ns(struct timespec64 *a, u64 ns)
{
a->tv_sec += __iter_div_u64_rem(a->tv_nsec + ns, 1000000000L, &ns);
a->tv_nsec = ns;
}
# 8 "include/linux/time.h" 2
extern struct timezone sys_tz;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int timespec_equal(const struct timespec *a,
const struct timespec *b)
{
return (a->tv_sec == b->tv_sec) && (a->tv_nsec == b->tv_nsec);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int timespec_compare(const struct timespec *lhs, const struct timespec *rhs)
{
if (lhs->tv_sec < rhs->tv_sec)
return -1;
if (lhs->tv_sec > rhs->tv_sec)
return 1;
return lhs->tv_nsec - rhs->tv_nsec;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int timeval_compare(const struct timeval *lhs, const struct timeval *rhs)
{
if (lhs->tv_sec < rhs->tv_sec)
return -1;
if (lhs->tv_sec > rhs->tv_sec)
return 1;
return lhs->tv_usec - rhs->tv_usec;
}
extern unsigned long mktime(const unsigned int year, const unsigned int mon,
const unsigned int day, const unsigned int hour,
const unsigned int min, const unsigned int sec);
extern void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec);
extern struct timespec timespec_add_safe(const struct timespec lhs,
const struct timespec rhs);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct timespec timespec_add(struct timespec lhs,
struct timespec rhs)
{
struct timespec ts_delta;
set_normalized_timespec(&ts_delta, lhs.tv_sec + rhs.tv_sec,
lhs.tv_nsec + rhs.tv_nsec);
return ts_delta;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct timespec timespec_sub(struct timespec lhs,
struct timespec rhs)
{
struct timespec ts_delta;
set_normalized_timespec(&ts_delta, lhs.tv_sec - rhs.tv_sec,
lhs.tv_nsec - rhs.tv_nsec);
return ts_delta;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool timespec_valid(const struct timespec *ts)
{
if (ts->tv_sec < 0)
return false;
if ((unsigned long)ts->tv_nsec >= 1000000000L)
return false;
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool timespec_valid_strict(const struct timespec *ts)
{
if (!timespec_valid(ts))
return false;
if ((unsigned long long)ts->tv_sec >= (((s64)~((u64)1 << 63)) / 1000000000L))
return false;
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool timeval_valid(const struct timeval *tv)
{
if (tv->tv_sec < 0)
return false;
if (tv->tv_usec < 0 || tv->tv_usec >= 1000000L)
return false;
return true;
}
extern struct timespec timespec_trunc(struct timespec t, unsigned gran);
# 133 "include/linux/time.h"
struct itimerval;
extern int do_setitimer(int which, struct itimerval *value,
struct itimerval *ovalue);
extern int do_getitimer(int which, struct itimerval *value);
extern unsigned int alarm_setitimer(unsigned int seconds);
extern long do_utimes(int dfd, const char *filename, struct timespec *times, int flags);
struct tms;
extern void do_sys_times(struct tms *);
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
long tm_year;
int tm_wday;
int tm_yday;
};
void time_to_tm(time_t totalsecs, int offset, struct tm *result);
# 180 "include/linux/time.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 timespec_to_ns(const struct timespec *ts)
{
return ((s64) ts->tv_sec * 1000000000L) + ts->tv_nsec;
}
# 192 "include/linux/time.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 timeval_to_ns(const struct timeval *tv)
{
return ((s64) tv->tv_sec * 1000000000L) +
tv->tv_usec * 1000L;
}
extern struct timespec ns_to_timespec(const s64 nsec);
extern struct timeval ns_to_timeval(const s64 nsec);
# 222 "include/linux/time.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void timespec_add_ns(struct timespec *a, u64 ns)
{
a->tv_sec += __iter_div_u64_rem(a->tv_nsec + ns, 1000000000L, &ns);
a->tv_nsec = ns;
}
# 25 "include/linux/ktime.h" 2
# 1 "include/linux/jiffies.h" 1
# 1 "include/linux/timex.h" 1
# 56 "include/linux/timex.h"
# 1 "include/uapi/linux/timex.h" 1
# 64 "include/uapi/linux/timex.h"
struct timex {
unsigned int modes;
__kernel_long_t offset;
__kernel_long_t freq;
__kernel_long_t maxerror;
__kernel_long_t esterror;
int status;
__kernel_long_t constant;
__kernel_long_t precision;
__kernel_long_t tolerance;
struct timeval time;
__kernel_long_t tick;
__kernel_long_t ppsfreq;
__kernel_long_t jitter;
int shift;
__kernel_long_t stabil;
__kernel_long_t jitcnt;
__kernel_long_t calcnt;
__kernel_long_t errcnt;
__kernel_long_t stbcnt;
int tai;
int :32; int :32; int :32; int :32;
int :32; int :32; int :32; int :32;
int :32; int :32; int :32;
};
# 57 "include/linux/timex.h" 2
# 1 "./include/uapi/linux/param.h" 1
# 1 "./arch/mips/include/uapi/asm/param.h" 1
# 14 "./arch/mips/include/uapi/asm/param.h"
# 1 "include/asm-generic/param.h" 1
# 1 "include/uapi/asm-generic/param.h" 1
# 5 "include/asm-generic/param.h" 2
# 15 "./arch/mips/include/uapi/asm/param.h" 2
# 5 "./include/uapi/linux/param.h" 2
# 64 "include/linux/timex.h" 2
# 1 "./arch/mips/include/asm/timex.h" 1
# 19 "./arch/mips/include/asm/timex.h"
# 1 "./arch/mips/include/asm/cpu-type.h" 1
# 12 "./arch/mips/include/asm/cpu-type.h"
# 1 "include/linux/smp.h" 1
# 14 "include/linux/smp.h"
# 1 "include/linux/llist.h" 1
# 61 "include/linux/llist.h"
struct llist_head {
struct llist_node *first;
};
struct llist_node {
struct llist_node *next;
};
# 76 "include/linux/llist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_llist_head(struct llist_head *list)
{
list->first = ((void *)0);
}
# 158 "include/linux/llist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool llist_empty(const struct llist_head *head)
{
return (*(volatile typeof(head->first) *)&(head->first)) == ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct llist_node *llist_next(struct llist_node *node)
{
return node->next;
}
extern bool llist_add_batch(struct llist_node *new_first,
struct llist_node *new_last,
struct llist_head *head);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool llist_add(struct llist_node *new, struct llist_head *head)
{
return llist_add_batch(new, new, head);
}
# 191 "include/linux/llist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct llist_node *llist_del_all(struct llist_head *head)
{
return ({ ((void)sizeof(char[1 - 2*!!(sizeof(*(&head->first)) & ~0xc)])); ((__typeof__(*(&head->first))) __xchg((unsigned long)(((void *)0)), (&head->first), sizeof(*(&head->first)))); });
}
extern struct llist_node *llist_del_first(struct llist_head *head);
struct llist_node *llist_reverse_order(struct llist_node *head);
# 15 "include/linux/smp.h" 2
typedef void (*smp_call_func_t)(void *info);
struct call_single_data {
struct llist_node llist;
smp_call_func_t func;
void *info;
u16 flags;
};
extern unsigned int total_cpus;
int smp_call_function_single(int cpuid, smp_call_func_t func, void *info,
int wait);
int on_each_cpu(smp_call_func_t func, void *info, int wait);
void on_each_cpu_mask(const struct cpumask *mask, smp_call_func_t func,
void *info, bool wait);
void on_each_cpu_cond(bool (*cond_func)(int cpu, void *info),
smp_call_func_t func, void *info, bool wait,
gfp_t gfp_flags);
int smp_call_function_single_async(int cpu, struct call_single_data *csd);
# 1 "./arch/mips/include/asm/smp.h" 1
# 16 "./arch/mips/include/asm/smp.h"
# 1 "include/linux/smp.h" 1
# 17 "./arch/mips/include/asm/smp.h" 2
# 1 "./arch/mips/include/asm/smp-ops.h" 1
# 16 "./arch/mips/include/asm/smp-ops.h"
# 1 "./arch/mips/include/asm/mips-cm.h" 1
# 14 "./arch/mips/include/asm/mips-cm.h"
# 1 "include/linux/io.h" 1
# 25 "include/linux/io.h"
struct device;
__attribute__((externally_visible)) void __iowrite32_copy(void *to, const void *from, size_t count);
void __iowrite64_copy(void *to, const void *from, size_t count);
int ioremap_page_range(unsigned long addr, unsigned long end,
phys_addr_t phys_addr, pgprot_t prot);
# 45 "include/linux/io.h"
void * devm_ioport_map(struct device *dev, unsigned long port,
unsigned int nr);
void devm_ioport_unmap(struct device *dev, void *addr);
# 63 "include/linux/io.h"
void *devm_ioremap(struct device *dev, resource_size_t offset,
unsigned long size);
void *devm_ioremap_nocache(struct device *dev, resource_size_t offset,
unsigned long size);
void devm_iounmap(struct device *dev, void *addr);
int check_signature(const volatile void *io_addr,
const unsigned char *signature, int length);
void devm_ioremap_release(struct device *dev, void *res);
# 93 "include/linux/io.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) arch_phys_wc_add(unsigned long base,
unsigned long size)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_phys_wc_del(int handle)
{
}
# 15 "./arch/mips/include/asm/mips-cm.h" 2
extern void *mips_cm_base;
extern void *mips_cm_l2sync_base;
# 33 "./arch/mips/include/asm/mips-cm.h"
extern phys_t __mips_cm_phys_base(void);
# 44 "./arch/mips/include/asm/mips-cm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int mips_cm_probe(void)
{
return -19;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool mips_cm_present(void)
{
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool mips_cm_has_l2sync(void)
{
return false;
}
# 125 "./arch/mips/include/asm/mips-cm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_config(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x00)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_config(void) { return __raw_readl(addr_gcr_config()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_base(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x08)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_base(void) { return __raw_readl(addr_gcr_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_base(u32 value) { __raw_writel(value, addr_gcr_base()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_access(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x20)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_access(void) { return __raw_readl(addr_gcr_access()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_access(u32 value) { __raw_writel(value, addr_gcr_access()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_rev(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x30)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_rev(void) { return __raw_readl(addr_gcr_rev()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_error_mask(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x40)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_error_mask(void) { return __raw_readl(addr_gcr_error_mask()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_error_mask(u32 value) { __raw_writel(value, addr_gcr_error_mask()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_error_cause(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x48)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_error_cause(void) { return __raw_readl(addr_gcr_error_cause()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_error_cause(u32 value) { __raw_writel(value, addr_gcr_error_cause()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_error_addr(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x50)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_error_addr(void) { return __raw_readl(addr_gcr_error_addr()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_error_addr(u32 value) { __raw_writel(value, addr_gcr_error_addr()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_error_mult(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x58)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_error_mult(void) { return __raw_readl(addr_gcr_error_mult()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_error_mult(u32 value) { __raw_writel(value, addr_gcr_error_mult()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_l2_only_sync_base(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x70)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_l2_only_sync_base(void) { return __raw_readl(addr_gcr_l2_only_sync_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_l2_only_sync_base(u32 value) { __raw_writel(value, addr_gcr_l2_only_sync_base()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_gic_base(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x80)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_gic_base(void) { return __raw_readl(addr_gcr_gic_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_gic_base(u32 value) { __raw_writel(value, addr_gcr_gic_base()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cpc_base(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x88)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cpc_base(void) { return __raw_readl(addr_gcr_cpc_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_cpc_base(u32 value) { __raw_writel(value, addr_gcr_cpc_base()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_reg0_base(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x90)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_reg0_base(void) { return __raw_readl(addr_gcr_reg0_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_reg0_base(u32 value) { __raw_writel(value, addr_gcr_reg0_base()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_reg0_mask(void) { return (u32 *)(mips_cm_base + (0x0000 + 0x98)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_reg0_mask(void) { return __raw_readl(addr_gcr_reg0_mask()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_reg0_mask(u32 value) { __raw_writel(value, addr_gcr_reg0_mask()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_reg1_base(void) { return (u32 *)(mips_cm_base + (0x0000 + 0xa0)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_reg1_base(void) { return __raw_readl(addr_gcr_reg1_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_reg1_base(u32 value) { __raw_writel(value, addr_gcr_reg1_base()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_reg1_mask(void) { return (u32 *)(mips_cm_base + (0x0000 + 0xa8)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_reg1_mask(void) { return __raw_readl(addr_gcr_reg1_mask()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_reg1_mask(u32 value) { __raw_writel(value, addr_gcr_reg1_mask()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_reg2_base(void) { return (u32 *)(mips_cm_base + (0x0000 + 0xb0)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_reg2_base(void) { return __raw_readl(addr_gcr_reg2_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_reg2_base(u32 value) { __raw_writel(value, addr_gcr_reg2_base()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_reg2_mask(void) { return (u32 *)(mips_cm_base + (0x0000 + 0xb8)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_reg2_mask(void) { return __raw_readl(addr_gcr_reg2_mask()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_reg2_mask(u32 value) { __raw_writel(value, addr_gcr_reg2_mask()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_reg3_base(void) { return (u32 *)(mips_cm_base + (0x0000 + 0xc0)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_reg3_base(void) { return __raw_readl(addr_gcr_reg3_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_reg3_base(u32 value) { __raw_writel(value, addr_gcr_reg3_base()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_reg3_mask(void) { return (u32 *)(mips_cm_base + (0x0000 + 0xc8)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_reg3_mask(void) { return __raw_readl(addr_gcr_reg3_mask()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_reg3_mask(u32 value) { __raw_writel(value, addr_gcr_reg3_mask()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_gic_status(void) { return (u32 *)(mips_cm_base + (0x0000 + 0xd0)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_gic_status(void) { return __raw_readl(addr_gcr_gic_status()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cpc_status(void) { return (u32 *)(mips_cm_base + (0x0000 + 0xf0)); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cpc_status(void) { return __raw_readl(addr_gcr_cpc_status()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_reset_release(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x00))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_reset_release(void) { return __raw_readl(addr_gcr_cl_reset_release()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_reset_release(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x00))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_reset_release(void) { return __raw_readl(addr_gcr_co_reset_release()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_cl_reset_release(u32 value) { __raw_writel(value, addr_gcr_cl_reset_release()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_co_reset_release(u32 value) { __raw_writel(value, addr_gcr_co_reset_release()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_coherence(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x08))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_coherence(void) { return __raw_readl(addr_gcr_cl_coherence()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_coherence(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x08))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_coherence(void) { return __raw_readl(addr_gcr_co_coherence()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_cl_coherence(u32 value) { __raw_writel(value, addr_gcr_cl_coherence()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_co_coherence(u32 value) { __raw_writel(value, addr_gcr_co_coherence()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_config(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x10))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_config(void) { return __raw_readl(addr_gcr_cl_config()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_config(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x10))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_config(void) { return __raw_readl(addr_gcr_co_config()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_other(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x18))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_other(void) { return __raw_readl(addr_gcr_cl_other()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_other(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x18))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_other(void) { return __raw_readl(addr_gcr_co_other()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_cl_other(u32 value) { __raw_writel(value, addr_gcr_cl_other()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_co_other(u32 value) { __raw_writel(value, addr_gcr_co_other()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_reset_base(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x20))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_reset_base(void) { return __raw_readl(addr_gcr_cl_reset_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_reset_base(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x20))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_reset_base(void) { return __raw_readl(addr_gcr_co_reset_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_cl_reset_base(u32 value) { __raw_writel(value, addr_gcr_cl_reset_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_co_reset_base(u32 value) { __raw_writel(value, addr_gcr_co_reset_base()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_id(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x28))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_id(void) { return __raw_readl(addr_gcr_cl_id()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_id(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x28))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_id(void) { return __raw_readl(addr_gcr_co_id()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_reset_ext_base(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x30))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_reset_ext_base(void) { return __raw_readl(addr_gcr_cl_reset_ext_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_reset_ext_base(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x30))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_reset_ext_base(void) { return __raw_readl(addr_gcr_co_reset_ext_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_cl_reset_ext_base(u32 value) { __raw_writel(value, addr_gcr_cl_reset_ext_base()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void write_gcr_co_reset_ext_base(u32 value) { __raw_writel(value, addr_gcr_co_reset_ext_base()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_tcid_0_priority(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x40))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_tcid_0_priority(void) { return __raw_readl(addr_gcr_cl_tcid_0_priority()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_tcid_0_priority(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x40))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_tcid_0_priority(void) { return __raw_readl(addr_gcr_co_tcid_0_priority()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_tcid_1_priority(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x48))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_tcid_1_priority(void) { return __raw_readl(addr_gcr_cl_tcid_1_priority()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_tcid_1_priority(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x48))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_tcid_1_priority(void) { return __raw_readl(addr_gcr_co_tcid_1_priority()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_tcid_2_priority(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x50))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_tcid_2_priority(void) { return __raw_readl(addr_gcr_cl_tcid_2_priority()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_tcid_2_priority(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x50))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_tcid_2_priority(void) { return __raw_readl(addr_gcr_co_tcid_2_priority()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_tcid_3_priority(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x58))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_tcid_3_priority(void) { return __raw_readl(addr_gcr_cl_tcid_3_priority()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_tcid_3_priority(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x58))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_tcid_3_priority(void) { return __raw_readl(addr_gcr_co_tcid_3_priority()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_tcid_4_priority(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x60))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_tcid_4_priority(void) { return __raw_readl(addr_gcr_cl_tcid_4_priority()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_tcid_4_priority(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x60))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_tcid_4_priority(void) { return __raw_readl(addr_gcr_co_tcid_4_priority()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_tcid_5_priority(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x68))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_tcid_5_priority(void) { return __raw_readl(addr_gcr_cl_tcid_5_priority()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_tcid_5_priority(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x68))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_tcid_5_priority(void) { return __raw_readl(addr_gcr_co_tcid_5_priority()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_tcid_6_priority(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x70))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_tcid_6_priority(void) { return __raw_readl(addr_gcr_cl_tcid_6_priority()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_tcid_6_priority(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x70))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_tcid_6_priority(void) { return __raw_readl(addr_gcr_co_tcid_6_priority()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_tcid_7_priority(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x78))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_tcid_7_priority(void) { return __raw_readl(addr_gcr_cl_tcid_7_priority()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_tcid_7_priority(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x78))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_tcid_7_priority(void) { return __raw_readl(addr_gcr_co_tcid_7_priority()); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_cl_tcid_8_priority(void) { return (u32 *)(mips_cm_base + (0x2000 + (0x80))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_cl_tcid_8_priority(void) { return __raw_readl(addr_gcr_cl_tcid_8_priority()); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 *addr_gcr_co_tcid_8_priority(void) { return (u32 *)(mips_cm_base + (0x4000 + (0x80))); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 read_gcr_co_tcid_8_priority(void) { return __raw_readl(addr_gcr_co_tcid_8_priority()); }
# 283 "./arch/mips/include/asm/mips-cm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned mips_cm_numcores(void)
{
if (!mips_cm_present())
return 0;
return ((read_gcr_config() & ((unsigned long)(0xff) << 0))
>> 0) + 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned mips_cm_numiocu(void)
{
if (!mips_cm_present())
return 0;
return (read_gcr_config() & ((unsigned long)(0xf) << 8))
>> 8;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int mips_cm_l2sync(void)
{
if (!mips_cm_has_l2sync())
return -19;
writel(0, mips_cm_l2sync_base);
return 0;
}
# 17 "./arch/mips/include/asm/smp-ops.h" 2
struct task_struct;
struct plat_smp_ops {
void (*send_ipi_single)(int cpu, unsigned int action);
void (*send_ipi_mask)(const struct cpumask *mask, unsigned int action);
void (*init_secondary)(void);
void (*smp_finish)(void);
void (*boot_secondary)(int cpu, struct task_struct *idle);
void (*smp_setup)(void);
void (*prepare_cpus)(unsigned int max_cpus);
};
extern void register_smp_ops(struct plat_smp_ops *ops);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void plat_smp_setup(void)
{
extern struct plat_smp_ops *mp_ops;
mp_ops->smp_setup();
}
extern void gic_send_ipi_single(int cpu, unsigned int action);
extern void gic_send_ipi_mask(const struct cpumask *mask, unsigned int action);
# 65 "./arch/mips/include/asm/smp-ops.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int register_up_smp_ops(void)
{
extern struct plat_smp_ops up_smp_ops;
register_smp_ops(&up_smp_ops);
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int register_cmp_smp_ops(void)
{
# 90 "./arch/mips/include/asm/smp-ops.h"
return -19;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int register_vsmp_smp_ops(void)
{
extern struct plat_smp_ops vsmp_smp_ops;
register_smp_ops(&vsmp_smp_ops);
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int register_cps_smp_ops(void)
{
return -19;
}
# 22 "./arch/mips/include/asm/smp.h" 2
extern int smp_num_siblings;
extern cpumask_t cpu_sibling_map[];
extern cpumask_t cpu_core_map[];
extern int __cpu_number_map[2];
extern int __cpu_logical_map[2];
# 48 "./arch/mips/include/asm/smp.h"
extern volatile cpumask_t cpu_callin_map;
extern cpumask_t cpu_coherent_mask;
extern void smp_bootstrap(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void smp_send_reschedule(int cpu)
{
extern struct plat_smp_ops *mp_ops;
mp_ops->send_ipi_single(cpu, 0x1);
}
# 85 "./arch/mips/include/asm/smp.h"
extern void smp_call_function_interrupt(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_send_call_function_single_ipi(int cpu)
{
extern struct plat_smp_ops *mp_ops;
mp_ops->send_ipi_mask(&(*get_cpu_mask(cpu)), 0x2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_send_call_function_ipi_mask(const struct cpumask *mask)
{
extern struct plat_smp_ops *mp_ops;
mp_ops->send_ipi_mask(mask, 0x2);
}
# 60 "include/linux/smp.h" 2
# 69 "include/linux/smp.h"
extern void smp_send_stop(void);
extern void smp_send_reschedule(int cpu);
extern void smp_prepare_cpus(unsigned int max_cpus);
extern int __cpu_up(unsigned int cpunum, struct task_struct *tidle);
extern void smp_cpus_done(unsigned int max_cpus);
int smp_call_function(smp_call_func_t func, void *info, int wait);
void smp_call_function_many(const struct cpumask *mask,
smp_call_func_t func, void *info, bool wait);
int smp_call_function_any(const struct cpumask *mask,
smp_call_func_t func, void *info, int wait);
void kick_all_cpus_sync(void);
void wake_up_all_idle_cpus(void);
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) call_function_init(void);
void generic_smp_call_function_single_interrupt(void);
void smp_prepare_boot_cpu(void);
extern unsigned int setup_max_cpus;
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) setup_nr_cpu_ids(void);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) smp_init(void);
# 185 "include/linux/smp.h"
extern void arch_disable_smp_support(void);
extern void arch_enable_nonboot_cpus_begin(void);
extern void arch_enable_nonboot_cpus_end(void);
void smp_setup_processor_id(void);
# 13 "./arch/mips/include/asm/cpu-type.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((pure)) __get_cpu_type(const int cpu_type)
{
switch (cpu_type) {
# 32 "./arch/mips/include/asm/cpu-type.h"
case CPU_4KC:
case CPU_ALCHEMY:
case CPU_PR4450:
case CPU_JZRISC:
case CPU_4KEC:
case CPU_4KSC:
case CPU_24K:
case CPU_34K:
case CPU_1004K:
case CPU_74K:
case CPU_M14KC:
case CPU_M14KEC:
case CPU_INTERAPTIV:
case CPU_PROAPTIV:
case CPU_P5600:
case CPU_M5150:
case CPU_5KC:
case CPU_5KE:
case CPU_20KC:
case CPU_25KF:
case CPU_SB1:
case CPU_SB1A:
# 171 "./arch/mips/include/asm/cpu-type.h"
case CPU_BMIPS32:
case CPU_BMIPS3300:
# 194 "./arch/mips/include/asm/cpu-type.h"
break;
default:
__builtin_unreachable();
}
return cpu_type;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((pure)) current_cpu_type(void)
{
const int cpu_type = cpu_data[(current_thread_info()->cpu)].cputype;
return __get_cpu_type(cpu_type);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((pure)) boot_cpu_type(void)
{
const int cpu_type = cpu_data[0].cputype;
return __get_cpu_type(cpu_type);
}
# 20 "./arch/mips/include/asm/timex.h" 2
# 40 "./arch/mips/include/asm/timex.h"
typedef unsigned int cycles_t;
# 52 "./arch/mips/include/asm/timex.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int can_use_mips_counter(unsigned int prid)
{
int comp = (prid & 0xff0000) != 0x000000;
if (__builtin_constant_p(1) && !1)
return 0;
else if (__builtin_constant_p(((cpu_data[0].isa_level & 0x00000010) | (cpu_data[0].isa_level & 0x00000020) | (cpu_data[0].isa_level & 0x00000040) | (cpu_data[0].isa_level & 0x00000080))) && ((cpu_data[0].isa_level & 0x00000010) | (cpu_data[0].isa_level & 0x00000020) | (cpu_data[0].isa_level & 0x00000040) | (cpu_data[0].isa_level & 0x00000080)))
return 1;
else if (__builtin_expect(!!(!__builtin_constant_p(((cpu_data[0].isa_level & 0x00000010) | (cpu_data[0].isa_level & 0x00000020) | (cpu_data[0].isa_level & 0x00000040) | (cpu_data[0].isa_level & 0x00000080))) && comp), 1))
return 1;
if (!__builtin_constant_p(1))
asm volatile("" : "=m" (cpu_data[0].options));
if (__builtin_expect(!!(1 && prid >= (0x0400 | ((5) << 4 | (0)))), 1)
)
return 1;
else
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) cycles_t get_cycles(void)
{
if (can_use_mips_counter(({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$15" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$15" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; })))
return ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$9" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$9" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; });
else
return 0;
}
# 87 "./arch/mips/include/asm/timex.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long random_get_entropy(void)
{
unsigned int prid = ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$15" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$15" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; });
unsigned int imp = prid & 0xff00;
if (can_use_mips_counter(prid))
return ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$9" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$9" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; });
else if (__builtin_expect(!!(imp != 0x0300 && imp != 0x0600), 1))
return ({ int __res; if (0 == 0) __asm__ __volatile__( "mfc0\t%0, " "$1" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$1" ", " "0" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; });
else
return 0;
}
# 66 "include/linux/timex.h" 2
# 139 "include/linux/timex.h"
extern unsigned long tick_usec;
extern unsigned long tick_nsec;
# 154 "include/linux/timex.h"
extern int do_adjtimex(struct timex *);
extern void hardpps(const struct timespec *, const struct timespec *);
int read_current_timer(unsigned long *timer_val);
void ntp_notify_cmos_timer(void);
# 9 "include/linux/jiffies.h" 2
# 57 "include/linux/jiffies.h"
extern int register_refined_jiffies(long clock_tick_rate);
# 76 "include/linux/jiffies.h"
extern u64 __attribute__((section(".data"))) jiffies_64;
extern unsigned long volatile __attribute__((section(".data"))) jiffies;
u64 get_jiffies_64(void);
# 182 "include/linux/jiffies.h"
extern unsigned long preset_lpj;
# 283 "include/linux/jiffies.h"
extern unsigned int jiffies_to_msecs(const unsigned long j);
extern unsigned int jiffies_to_usecs(const unsigned long j);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 jiffies_to_nsecs(const unsigned long j)
{
return (u64)jiffies_to_usecs(j) * 1000L;
}
extern unsigned long msecs_to_jiffies(const unsigned int m);
extern unsigned long usecs_to_jiffies(const unsigned int u);
extern unsigned long timespec_to_jiffies(const struct timespec *value);
extern void jiffies_to_timespec(const unsigned long jiffies,
struct timespec *value);
extern unsigned long timeval_to_jiffies(const struct timeval *value);
extern void jiffies_to_timeval(const unsigned long jiffies,
struct timeval *value);
extern clock_t jiffies_to_clock_t(unsigned long x);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) clock_t jiffies_delta_to_clock_t(long delta)
{
return jiffies_to_clock_t(({ typeof(0L) _max1 = (0L); typeof(delta) _max2 = (delta); (void) (&_max1 == &_max2); _max1 > _max2 ? _max1 : _max2; }));
}
extern unsigned long clock_t_to_jiffies(unsigned long x);
extern u64 jiffies_64_to_clock_t(u64 x);
extern u64 nsec_to_clock_t(u64 x);
extern u64 nsecs_to_jiffies64(u64 n);
extern unsigned long nsecs_to_jiffies(u64 n);
# 26 "include/linux/ktime.h" 2
# 37 "include/linux/ktime.h"
union ktime {
s64 tv64;
};
typedef union ktime ktime_t;
# 50 "include/linux/ktime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t ktime_set(const s64 secs, const unsigned long nsecs)
{
if (__builtin_expect(!!(secs >= (((s64)~((u64)1 << 63)) / 1000000000L)), 0))
return (ktime_t){ .tv64 = ((s64)~((u64)1 << 63)) };
return (ktime_t) { .tv64 = secs * 1000000000L + (s64)nsecs };
}
# 81 "include/linux/ktime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t timespec_to_ktime(struct timespec ts)
{
return ktime_set(ts.tv_sec, ts.tv_nsec);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t timespec64_to_ktime(struct timespec64 ts)
{
return ktime_set(ts.tv_sec, ts.tv_nsec);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t timeval_to_ktime(struct timeval tv)
{
return ktime_set(tv.tv_sec, tv.tv_usec * 1000L);
}
# 120 "include/linux/ktime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int ktime_equal(const ktime_t cmp1, const ktime_t cmp2)
{
return cmp1.tv64 == cmp2.tv64;
}
# 135 "include/linux/ktime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int ktime_compare(const ktime_t cmp1, const ktime_t cmp2)
{
if (cmp1.tv64 < cmp2.tv64)
return -1;
if (cmp1.tv64 > cmp2.tv64)
return 1;
return 0;
}
# 151 "include/linux/ktime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ktime_after(const ktime_t cmp1, const ktime_t cmp2)
{
return ktime_compare(cmp1, cmp2) > 0;
}
# 163 "include/linux/ktime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ktime_before(const ktime_t cmp1, const ktime_t cmp2)
{
return ktime_compare(cmp1, cmp2) < 0;
}
extern s64 __ktime_divns(const ktime_t kt, s64 div);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 ktime_divns(const ktime_t kt, s64 div)
{
__BUG_ON((unsigned long)(div < 0));
if (__builtin_constant_p(div) && !(div >> 32)) {
s64 ns = kt.tv64;
u64 tmp = ns < 0 ? -ns : ns;
({ uint32_t __base = (div); uint32_t __rem; (void)(((typeof((tmp)) *)0) == ((uint64_t *)0)); if (__builtin_expect(!!(((tmp) >> 32) == 0), 1)) { __rem = (uint32_t)(tmp) % __base; (tmp) = (uint32_t)(tmp) / __base; } else __rem = __div64_32(&(tmp), __base); __rem; });
return ns < 0 ? -tmp : tmp;
} else {
return __ktime_divns(kt, div);
}
}
# 199 "include/linux/ktime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 ktime_to_us(const ktime_t kt)
{
return ktime_divns(kt, 1000L);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 ktime_to_ms(const ktime_t kt)
{
return ktime_divns(kt, 1000000L);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 ktime_us_delta(const ktime_t later, const ktime_t earlier)
{
return ktime_to_us(({ (ktime_t){ .tv64 = (later).tv64 - (earlier).tv64 }; }));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t ktime_add_us(const ktime_t kt, const u64 usec)
{
return ({ (ktime_t){ .tv64 = (kt).tv64 + (usec * 1000L) }; });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t ktime_add_ms(const ktime_t kt, const u64 msec)
{
return ({ (ktime_t){ .tv64 = (kt).tv64 + (msec * 1000000L) }; });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t ktime_sub_us(const ktime_t kt, const u64 usec)
{
return ({ (ktime_t){ .tv64 = (kt).tv64 - (usec * 1000L) }; });
}
extern ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs);
# 239 "include/linux/ktime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((warn_unused_result)) bool ktime_to_timespec_cond(const ktime_t kt,
struct timespec *ts)
{
if (kt.tv64) {
*ts = ns_to_timespec((kt).tv64);
return true;
} else {
return false;
}
}
# 258 "include/linux/ktime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((warn_unused_result)) bool ktime_to_timespec64_cond(const ktime_t kt,
struct timespec64 *ts)
{
if (kt.tv64) {
*ts = ns_to_timespec64((kt).tv64);
return true;
} else {
return false;
}
}
# 278 "include/linux/ktime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t ns_to_ktime(u64 ns)
{
static const ktime_t ktime_zero = { .tv64 = 0 };
return ({ (ktime_t){ .tv64 = (ktime_zero).tv64 + (ns) }; });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t ms_to_ktime(u64 ms)
{
static const ktime_t ktime_zero = { .tv64 = 0 };
return ktime_add_ms(ktime_zero, ms);
}
# 1 "include/linux/timekeeping.h" 1
void timekeeping_init(void);
extern int timekeeping_suspended;
extern void do_gettimeofday(struct timeval *tv);
extern int do_settimeofday(const struct timespec *tv);
extern int do_sys_settimeofday(const struct timespec *tv,
const struct timezone *tz);
unsigned long get_seconds(void);
struct timespec current_kernel_time(void);
struct timespec __current_kernel_time(void);
struct timespec get_monotonic_coarse(void);
extern void getrawmonotonic(struct timespec *ts);
extern void ktime_get_ts64(struct timespec64 *ts);
extern int __getnstimeofday64(struct timespec64 *tv);
extern void getnstimeofday64(struct timespec64 *tv);
# 57 "include/linux/timekeeping.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __getnstimeofday(struct timespec *ts)
{
struct timespec64 ts64;
int ret = __getnstimeofday64(&ts64);
*ts = timespec64_to_timespec(ts64);
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void getnstimeofday(struct timespec *ts)
{
struct timespec64 ts64;
getnstimeofday64(&ts64);
*ts = timespec64_to_timespec(ts64);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ktime_get_ts(struct timespec *ts)
{
struct timespec64 ts64;
ktime_get_ts64(&ts64);
*ts = timespec64_to_timespec(ts64);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ktime_get_real_ts(struct timespec *ts)
{
struct timespec64 ts64;
getnstimeofday64(&ts64);
*ts = timespec64_to_timespec(ts64);
}
extern void getboottime(struct timespec *ts);
# 100 "include/linux/timekeeping.h"
enum tk_offsets {
TK_OFFS_REAL,
TK_OFFS_BOOT,
TK_OFFS_TAI,
TK_OFFS_MAX,
};
extern ktime_t ktime_get(void);
extern ktime_t ktime_get_with_offset(enum tk_offsets offs);
extern ktime_t ktime_mono_to_any(ktime_t tmono, enum tk_offsets offs);
extern ktime_t ktime_get_raw(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t ktime_get_real(void)
{
return ktime_get_with_offset(TK_OFFS_REAL);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t ktime_get_boottime(void)
{
return ktime_get_with_offset(TK_OFFS_BOOT);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t ktime_get_clocktai(void)
{
return ktime_get_with_offset(TK_OFFS_TAI);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t ktime_mono_to_real(ktime_t mono)
{
return ktime_mono_to_any(mono, TK_OFFS_REAL);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 ktime_get_ns(void)
{
return ((ktime_get()).tv64);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 ktime_get_real_ns(void)
{
return ((ktime_get_real()).tv64);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 ktime_get_boot_ns(void)
{
return ((ktime_get_boottime()).tv64);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 ktime_get_raw_ns(void)
{
return ((ktime_get_raw()).tv64);
}
extern u64 ktime_get_mono_fast_ns(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void get_monotonic_boottime(struct timespec *ts)
{
*ts = ns_to_timespec((ktime_get_boottime()).tv64);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void timekeeping_clocktai(struct timespec *ts)
{
*ts = ns_to_timespec((ktime_get_clocktai()).tv64);
}
extern void timekeeping_inject_sleeptime(struct timespec *delta);
extern void getnstime_raw_and_real(struct timespec *ts_raw,
struct timespec *ts_real);
extern bool persistent_clock_exist;
extern int persistent_clock_is_local;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool has_persistent_clock(void)
{
return persistent_clock_exist;
}
extern void read_persistent_clock(struct timespec *ts);
extern void read_boot_clock(struct timespec *ts);
extern int update_persistent_clock(struct timespec now);
# 293 "include/linux/ktime.h" 2
# 6 "include/linux/timer.h" 2
struct tvec_base;
struct timer_list {
struct list_head entry;
unsigned long expires;
struct tvec_base *base;
void (*function)(unsigned long);
unsigned long data;
int slack;
# 34 "include/linux/timer.h"
};
extern struct tvec_base boot_tvec_bases;
# 94 "include/linux/timer.h"
void init_timer_key(struct timer_list *timer, unsigned int flags,
const char *name, struct lock_class_key *key);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void destroy_timer_on_stack(struct timer_list *timer) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_timer_on_stack_key(struct timer_list *timer,
unsigned int flags, const char *name,
struct lock_class_key *key)
{
init_timer_key(timer, flags, name, key);
}
# 169 "include/linux/timer.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int timer_pending(const struct timer_list * timer)
{
return timer->entry.next != ((void *)0);
}
extern void add_timer_on(struct timer_list *timer, int cpu);
extern int del_timer(struct timer_list * timer);
extern int mod_timer(struct timer_list *timer, unsigned long expires);
extern int mod_timer_pending(struct timer_list *timer, unsigned long expires);
extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires);
extern void set_timer_slack(struct timer_list *time, int slack_hz);
# 195 "include/linux/timer.h"
extern unsigned long get_next_timer_interrupt(unsigned long now);
# 227 "include/linux/timer.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_timer_stats(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void timer_stats_timer_set_start_info(struct timer_list *timer)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void timer_stats_timer_clear_start_info(struct timer_list *timer)
{
}
extern void add_timer(struct timer_list *timer);
extern int try_to_del_timer_sync(struct timer_list *timer);
extern int del_timer_sync(struct timer_list *timer);
extern void init_timers(void);
extern void run_local_timers(void);
struct hrtimer;
extern enum hrtimer_restart it_real_fn(struct hrtimer *);
unsigned long __round_jiffies(unsigned long j, int cpu);
unsigned long __round_jiffies_relative(unsigned long j, int cpu);
unsigned long round_jiffies(unsigned long j);
unsigned long round_jiffies_relative(unsigned long j);
unsigned long __round_jiffies_up(unsigned long j, int cpu);
unsigned long __round_jiffies_up_relative(unsigned long j, int cpu);
unsigned long round_jiffies_up(unsigned long j);
unsigned long round_jiffies_up_relative(unsigned long j);
# 9 "include/linux/workqueue.h" 2
struct workqueue_struct;
struct work_struct;
typedef void (*work_func_t)(struct work_struct *work);
void delayed_work_timer_fn(unsigned long __data);
enum {
WORK_STRUCT_PENDING_BIT = 0,
WORK_STRUCT_DELAYED_BIT = 1,
WORK_STRUCT_PWQ_BIT = 2,
WORK_STRUCT_LINKED_BIT = 3,
WORK_STRUCT_COLOR_SHIFT = 4,
WORK_STRUCT_COLOR_BITS = 4,
WORK_STRUCT_PENDING = 1 << WORK_STRUCT_PENDING_BIT,
WORK_STRUCT_DELAYED = 1 << WORK_STRUCT_DELAYED_BIT,
WORK_STRUCT_PWQ = 1 << WORK_STRUCT_PWQ_BIT,
WORK_STRUCT_LINKED = 1 << WORK_STRUCT_LINKED_BIT,
WORK_STRUCT_STATIC = 0,
WORK_NR_COLORS = (1 << WORK_STRUCT_COLOR_BITS) - 1,
WORK_NO_COLOR = WORK_NR_COLORS,
WORK_CPU_UNBOUND = 2,
WORK_STRUCT_FLAG_BITS = WORK_STRUCT_COLOR_SHIFT +
WORK_STRUCT_COLOR_BITS,
WORK_OFFQ_FLAG_BASE = WORK_STRUCT_COLOR_SHIFT,
__WORK_OFFQ_CANCELING = WORK_OFFQ_FLAG_BASE,
WORK_OFFQ_CANCELING = (1 << __WORK_OFFQ_CANCELING),
WORK_OFFQ_FLAG_BITS = 1,
WORK_OFFQ_POOL_SHIFT = WORK_OFFQ_FLAG_BASE + WORK_OFFQ_FLAG_BITS,
WORK_OFFQ_LEFT = 32 - WORK_OFFQ_POOL_SHIFT,
WORK_OFFQ_POOL_BITS = WORK_OFFQ_LEFT <= 31 ? WORK_OFFQ_LEFT : 31,
WORK_OFFQ_POOL_NONE = (1LU << WORK_OFFQ_POOL_BITS) - 1,
WORK_STRUCT_FLAG_MASK = (1UL << WORK_STRUCT_FLAG_BITS) - 1,
WORK_STRUCT_WQ_DATA_MASK = ~WORK_STRUCT_FLAG_MASK,
WORK_STRUCT_NO_POOL = (unsigned long)WORK_OFFQ_POOL_NONE << WORK_OFFQ_POOL_SHIFT,
WORK_BUSY_PENDING = 1 << 0,
WORK_BUSY_RUNNING = 1 << 1,
WORKER_DESC_LEN = 24,
};
struct work_struct {
atomic_long_t data;
struct list_head entry;
work_func_t func;
};
struct delayed_work {
struct work_struct work;
struct timer_list timer;
struct workqueue_struct *wq;
int cpu;
};
# 130 "include/linux/workqueue.h"
struct workqueue_attrs {
int nice;
cpumask_var_t cpumask;
bool no_numa;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct delayed_work *to_delayed_work(struct work_struct *work)
{
return ({ const typeof( ((struct delayed_work *)0)->work ) *__mptr = (work); (struct delayed_work *)( (char *)__mptr - __builtin_offsetof(struct delayed_work,work) );});
}
struct execute_work {
struct work_struct work;
};
# 189 "include/linux/workqueue.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __init_work(struct work_struct *work, int onstack) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void destroy_work_on_stack(struct work_struct *work) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void destroy_delayed_work_on_stack(struct delayed_work *work) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int work_static(struct work_struct *work) { return 0; }
# 281 "include/linux/workqueue.h"
enum {
WQ_UNBOUND = 1 << 1,
WQ_FREEZABLE = 1 << 2,
WQ_MEM_RECLAIM = 1 << 3,
WQ_HIGHPRI = 1 << 4,
WQ_CPU_INTENSIVE = 1 << 5,
WQ_SYSFS = 1 << 6,
# 314 "include/linux/workqueue.h"
WQ_POWER_EFFICIENT = 1 << 7,
__WQ_DRAINING = 1 << 16,
__WQ_ORDERED = 1 << 17,
WQ_MAX_ACTIVE = 512,
WQ_MAX_UNBOUND_PER_CPU = 4,
WQ_DFL_ACTIVE = WQ_MAX_ACTIVE / 2,
};
# 356 "include/linux/workqueue.h"
extern struct workqueue_struct *system_wq;
extern struct workqueue_struct *system_highpri_wq;
extern struct workqueue_struct *system_long_wq;
extern struct workqueue_struct *system_unbound_wq;
extern struct workqueue_struct *system_freezable_wq;
extern struct workqueue_struct *system_power_efficient_wq;
extern struct workqueue_struct *system_freezable_power_efficient_wq;
extern struct workqueue_struct *
__alloc_workqueue_key(const char *fmt, unsigned int flags, int max_active,
struct lock_class_key *key, const char *lock_name, ...) __attribute__((format(printf, 1, 6)));
# 425 "include/linux/workqueue.h"
extern void destroy_workqueue(struct workqueue_struct *wq);
struct workqueue_attrs *alloc_workqueue_attrs(gfp_t gfp_mask);
void free_workqueue_attrs(struct workqueue_attrs *attrs);
int apply_workqueue_attrs(struct workqueue_struct *wq,
const struct workqueue_attrs *attrs);
extern bool queue_work_on(int cpu, struct workqueue_struct *wq,
struct work_struct *work);
extern bool queue_delayed_work_on(int cpu, struct workqueue_struct *wq,
struct delayed_work *work, unsigned long delay);
extern bool mod_delayed_work_on(int cpu, struct workqueue_struct *wq,
struct delayed_work *dwork, unsigned long delay);
extern void flush_workqueue(struct workqueue_struct *wq);
extern void drain_workqueue(struct workqueue_struct *wq);
extern void flush_scheduled_work(void);
extern int schedule_on_each_cpu(work_func_t func);
int execute_in_process_context(work_func_t fn, struct execute_work *);
extern bool flush_work(struct work_struct *work);
extern bool cancel_work_sync(struct work_struct *work);
extern bool flush_delayed_work(struct delayed_work *dwork);
extern bool cancel_delayed_work(struct delayed_work *dwork);
extern bool cancel_delayed_work_sync(struct delayed_work *dwork);
extern void workqueue_set_max_active(struct workqueue_struct *wq,
int max_active);
extern bool current_is_workqueue_rescuer(void);
extern bool workqueue_congested(int cpu, struct workqueue_struct *wq);
extern unsigned int work_busy(struct work_struct *work);
extern __attribute__((format(printf, 1, 2))) void set_worker_desc(const char *fmt, ...);
extern void print_worker_info(const char *log_lvl, struct task_struct *task);
# 472 "include/linux/workqueue.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool queue_work(struct workqueue_struct *wq,
struct work_struct *work)
{
return queue_work_on(WORK_CPU_UNBOUND, wq, work);
}
# 486 "include/linux/workqueue.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool queue_delayed_work(struct workqueue_struct *wq,
struct delayed_work *dwork,
unsigned long delay)
{
return queue_delayed_work_on(WORK_CPU_UNBOUND, wq, dwork, delay);
}
# 501 "include/linux/workqueue.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool mod_delayed_work(struct workqueue_struct *wq,
struct delayed_work *dwork,
unsigned long delay)
{
return mod_delayed_work_on(WORK_CPU_UNBOUND, wq, dwork, delay);
}
# 515 "include/linux/workqueue.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool schedule_work_on(int cpu, struct work_struct *work)
{
return queue_work_on(cpu, system_wq, work);
}
# 531 "include/linux/workqueue.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool schedule_work(struct work_struct *work)
{
return queue_work(system_wq, work);
}
# 545 "include/linux/workqueue.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool schedule_delayed_work_on(int cpu, struct delayed_work *dwork,
unsigned long delay)
{
return queue_delayed_work_on(cpu, system_wq, dwork, delay);
}
# 559 "include/linux/workqueue.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool schedule_delayed_work(struct delayed_work *dwork,
unsigned long delay)
{
return queue_delayed_work(system_wq, dwork, delay);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool keventd_up(void)
{
return system_wq != ((void *)0);
}
long work_on_cpu(int cpu, long (*fn)(void *), void *arg);
extern void freeze_workqueues_begin(void);
extern bool freeze_workqueues_busy(void);
extern void thaw_workqueues(void);
int workqueue_sysfs_register(struct workqueue_struct *wq);
# 35 "include/linux/srcu.h" 2
struct srcu_struct_array {
unsigned long c[2];
unsigned long seq[2];
};
struct rcu_batch {
struct callback_head *head, **tail;
};
struct srcu_struct {
unsigned completed;
struct srcu_struct_array *per_cpu_ref;
spinlock_t queue_lock;
bool running;
struct rcu_batch batch_queue;
struct rcu_batch batch_check0;
struct rcu_batch batch_check1;
struct rcu_batch batch_done;
struct delayed_work work;
};
# 80 "include/linux/srcu.h"
int init_srcu_struct(struct srcu_struct *sp);
void process_srcu(struct work_struct *work);
# 130 "include/linux/srcu.h"
void call_srcu(struct srcu_struct *sp, struct callback_head *head,
void (*func)(struct callback_head *head));
void cleanup_srcu_struct(struct srcu_struct *sp);
int __srcu_read_lock(struct srcu_struct *sp) ;
void __srcu_read_unlock(struct srcu_struct *sp, int idx) ;
void synchronize_srcu(struct srcu_struct *sp);
void synchronize_srcu_expedited(struct srcu_struct *sp);
long srcu_batches_completed(struct srcu_struct *sp);
void srcu_barrier(struct srcu_struct *sp);
# 167 "include/linux/srcu.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int srcu_read_lock_held(struct srcu_struct *sp)
{
return 1;
}
# 218 "include/linux/srcu.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int srcu_read_lock(struct srcu_struct *sp)
{
int retval = __srcu_read_lock(sp);
do { } while (0);
return retval;
}
# 233 "include/linux/srcu.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void srcu_read_unlock(struct srcu_struct *sp, int idx)
{
do { } while (0);
__srcu_read_unlock(sp, idx);
}
# 249 "include/linux/srcu.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void smp_mb__after_srcu_read_unlock(void)
{
}
# 16 "include/linux/notifier.h" 2
# 50 "include/linux/notifier.h"
typedef int (*notifier_fn_t)(struct notifier_block *nb,
unsigned long action, void *data);
struct notifier_block {
notifier_fn_t notifier_call;
struct notifier_block *next;
int priority;
};
struct atomic_notifier_head {
spinlock_t lock;
struct notifier_block *head;
};
struct blocking_notifier_head {
struct rw_semaphore rwsem;
struct notifier_block *head;
};
struct raw_notifier_head {
struct notifier_block *head;
};
struct srcu_notifier_head {
struct mutex mutex;
struct srcu_struct srcu;
struct notifier_block *head;
};
# 92 "include/linux/notifier.h"
extern void srcu_init_notifier_head(struct srcu_notifier_head *nh);
# 118 "include/linux/notifier.h"
extern int atomic_notifier_chain_register(struct atomic_notifier_head *nh,
struct notifier_block *nb);
extern int blocking_notifier_chain_register(struct blocking_notifier_head *nh,
struct notifier_block *nb);
extern int raw_notifier_chain_register(struct raw_notifier_head *nh,
struct notifier_block *nb);
extern int srcu_notifier_chain_register(struct srcu_notifier_head *nh,
struct notifier_block *nb);
extern int blocking_notifier_chain_cond_register(
struct blocking_notifier_head *nh,
struct notifier_block *nb);
extern int atomic_notifier_chain_unregister(struct atomic_notifier_head *nh,
struct notifier_block *nb);
extern int blocking_notifier_chain_unregister(struct blocking_notifier_head *nh,
struct notifier_block *nb);
extern int raw_notifier_chain_unregister(struct raw_notifier_head *nh,
struct notifier_block *nb);
extern int srcu_notifier_chain_unregister(struct srcu_notifier_head *nh,
struct notifier_block *nb);
extern int atomic_notifier_call_chain(struct atomic_notifier_head *nh,
unsigned long val, void *v);
extern int __atomic_notifier_call_chain(struct atomic_notifier_head *nh,
unsigned long val, void *v, int nr_to_call, int *nr_calls);
extern int blocking_notifier_call_chain(struct blocking_notifier_head *nh,
unsigned long val, void *v);
extern int __blocking_notifier_call_chain(struct blocking_notifier_head *nh,
unsigned long val, void *v, int nr_to_call, int *nr_calls);
extern int raw_notifier_call_chain(struct raw_notifier_head *nh,
unsigned long val, void *v);
extern int __raw_notifier_call_chain(struct raw_notifier_head *nh,
unsigned long val, void *v, int nr_to_call, int *nr_calls);
extern int srcu_notifier_call_chain(struct srcu_notifier_head *nh,
unsigned long val, void *v);
extern int __srcu_notifier_call_chain(struct srcu_notifier_head *nh,
unsigned long val, void *v, int nr_to_call, int *nr_calls);
# 168 "include/linux/notifier.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int notifier_from_errno(int err)
{
if (err)
return 0x8000 | (0x0001 - err);
return 0x0001;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int notifier_to_errno(int ret)
{
ret &= ~0x8000;
return ret > 0x0001 ? 0x0001 - ret : 0;
}
# 212 "include/linux/notifier.h"
extern struct blocking_notifier_head reboot_notifier_list;
# 7 "include/linux/memory_hotplug.h" 2
struct page;
struct zone;
struct pglist_data;
struct mem_section;
struct memory_block;
# 199 "include/linux/memory_hotplug.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pgdat_resize_lock(struct pglist_data *p, unsigned long *f) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pgdat_resize_unlock(struct pglist_data *p, unsigned long *f) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pgdat_resize_init(struct pglist_data *pgdat) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned zone_span_seqbegin(struct zone *zone)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int zone_span_seqretry(struct zone *zone, unsigned iv)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void zone_span_writelock(struct zone *zone) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void zone_span_writeunlock(struct zone *zone) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void zone_seqlock_init(struct zone *zone) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int mhp_notimplemented(const char *func)
{
printk("\001" "4" "%s() called, with CONFIG_MEMORY_HOTPLUG disabled\n", func);
dump_stack();
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void register_page_bootmem_info_node(struct pglist_data *pgdat)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int try_online_node(int nid)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void get_online_mems(void) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void put_online_mems(void) {}
# 244 "include/linux/memory_hotplug.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_mem_section_removable(unsigned long pfn,
unsigned long nr_pages)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void try_offline_node(int nid) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int offline_pages(unsigned long start_pfn, unsigned long nr_pages)
{
return -22;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void remove_memory(int nid, u64 start, u64 size) {}
extern int walk_memory_range(unsigned long start_pfn, unsigned long end_pfn,
void *arg, int (*func)(struct memory_block *, void *));
extern int add_memory(int nid, u64 start, u64 size);
extern int zone_for_memory(int nid, u64 start, u64 size, int zone_default);
extern int arch_add_memory(int nid, u64 start, u64 size);
extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages);
extern bool is_memblock_offlined(struct memory_block *mem);
extern void remove_memory(int nid, u64 start, u64 size);
extern int sparse_add_one_section(struct zone *zone, unsigned long start_pfn);
extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms);
extern struct page *sparse_decode_mem_map(unsigned long coded_mem_map,
unsigned long pnum);
# 791 "include/linux/mmzone.h" 2
extern struct mutex zonelists_mutex;
void build_all_zonelists(pg_data_t *pgdat, struct zone *zone);
void wakeup_kswapd(struct zone *zone, int order, enum zone_type classzone_idx);
bool zone_watermark_ok(struct zone *z, unsigned int order,
unsigned long mark, int classzone_idx, int alloc_flags);
bool zone_watermark_ok_safe(struct zone *z, unsigned int order,
unsigned long mark, int classzone_idx, int alloc_flags);
enum memmap_context {
MEMMAP_EARLY,
MEMMAP_HOTPLUG,
};
extern int init_currently_empty_zone(struct zone *zone, unsigned long start_pfn,
unsigned long size,
enum memmap_context context);
extern void lruvec_init(struct lruvec *lruvec);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct zone *lruvec_zone(struct lruvec *lruvec)
{
return ({ const typeof( ((struct zone *)0)->lruvec ) *__mptr = (lruvec); (struct zone *)( (char *)__mptr - __builtin_offsetof(struct zone,lruvec) );});
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void memory_present(int nid, unsigned long start, unsigned long end) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int local_memory_node(int node_id) { return node_id; };
# 839 "include/linux/mmzone.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int populated_zone(struct zone *zone)
{
return (!!zone->present_pages);
}
extern int movable_zone;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int zone_movable_is_highmem(void)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_highmem_idx(enum zone_type idx)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_highmem(struct zone *zone)
{
return 0;
}
struct ctl_table;
int min_free_kbytes_sysctl_handler(struct ctl_table *, int,
void *, size_t *, loff_t *);
extern int sysctl_lowmem_reserve_ratio[2 -1];
int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int,
void *, size_t *, loff_t *);
int percpu_pagelist_fraction_sysctl_handler(struct ctl_table *, int,
void *, size_t *, loff_t *);
int sysctl_min_unmapped_ratio_sysctl_handler(struct ctl_table *, int,
void *, size_t *, loff_t *);
int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *, int,
void *, size_t *, loff_t *);
extern int numa_zonelist_order_handler(struct ctl_table *, int,
void *, size_t *, loff_t *);
extern char numa_zonelist_order[];
extern struct pglist_data contig_page_data;
# 916 "include/linux/mmzone.h"
extern struct pglist_data *first_online_pgdat(void);
extern struct pglist_data *next_online_pgdat(struct pglist_data *pgdat);
extern struct zone *next_zone(struct zone *zone);
# 948 "include/linux/mmzone.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct zone *zonelist_zone(struct zoneref *zoneref)
{
return zoneref->zone;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int zonelist_zone_idx(struct zoneref *zoneref)
{
return zoneref->zone_idx;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int zonelist_node_idx(struct zoneref *zoneref)
{
return 0;
}
# 981 "include/linux/mmzone.h"
struct zoneref *next_zones_zonelist(struct zoneref *z,
enum zone_type highest_zoneidx,
nodemask_t *nodes,
struct zone **zone);
# 998 "include/linux/mmzone.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct zoneref *first_zones_zonelist(struct zonelist *zonelist,
enum zone_type highest_zoneidx,
nodemask_t *nodes,
struct zone **zone)
{
return next_zones_zonelist(zonelist->_zonerefs, highest_zoneidx, nodes,
zone);
}
# 1229 "include/linux/mmzone.h"
void memory_present(int nid, unsigned long start, unsigned long end);
unsigned long __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) node_memmap_size_bytes(int, unsigned long, unsigned long);
# 1263 "include/linux/mmzone.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int memmap_valid_within(unsigned long pfn,
struct page *page, struct zone *zone)
{
return 1;
}
# 6 "include/linux/gfp.h" 2
# 1 "include/linux/topology.h" 1
# 34 "include/linux/topology.h"
# 1 "include/linux/percpu.h" 1
# 11 "include/linux/percpu.h"
# 1 "arch/mips/include/generated/asm/percpu.h" 1
# 1 "include/asm-generic/percpu.h" 1
# 1 "include/linux/percpu-defs.h" 1
# 297 "include/linux/percpu-defs.h"
extern void __bad_size_call_parameter(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __this_cpu_preempt_check(const char *op) { }
# 7 "include/asm-generic/percpu.h" 2
# 18 "include/asm-generic/percpu.h"
extern unsigned long __per_cpu_offset[2];
# 1 "arch/mips/include/generated/asm/percpu.h" 2
# 12 "include/linux/percpu.h" 2
# 56 "include/linux/percpu.h"
extern void *pcpu_base_addr;
extern const unsigned long *pcpu_unit_offsets;
struct pcpu_group_info {
int nr_units;
unsigned long base_offset;
unsigned int *cpu_map;
};
struct pcpu_alloc_info {
size_t static_size;
size_t reserved_size;
size_t dyn_size;
size_t unit_size;
size_t atom_size;
size_t alloc_size;
size_t __ai_size;
int nr_groups;
struct pcpu_group_info groups[];
};
enum pcpu_fc {
PCPU_FC_AUTO,
PCPU_FC_EMBED,
PCPU_FC_PAGE,
PCPU_FC_NR,
};
extern const char * const pcpu_fc_names[PCPU_FC_NR];
extern enum pcpu_fc pcpu_chosen_fc;
typedef void * (*pcpu_fc_alloc_fn_t)(unsigned int cpu, size_t size,
size_t align);
typedef void (*pcpu_fc_free_fn_t)(void *ptr, size_t size);
typedef void (*pcpu_fc_populate_pte_fn_t)(unsigned long addr);
typedef int (pcpu_fc_cpu_distance_fn_t)(unsigned int from, unsigned int to);
extern struct pcpu_alloc_info * __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) pcpu_alloc_alloc_info(int nr_groups,
int nr_units);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) pcpu_free_alloc_info(struct pcpu_alloc_info *ai);
extern int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai,
void *base_addr);
# 117 "include/linux/percpu.h"
extern void *__alloc_reserved_percpu(size_t size, size_t align);
extern bool is_kernel_percpu_address(unsigned long addr);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) setup_per_cpu_areas(void);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) percpu_init_late(void);
extern void *__alloc_percpu_gfp(size_t size, size_t align, gfp_t gfp);
extern void *__alloc_percpu(size_t size, size_t align);
extern void free_percpu(void *__pdata);
extern phys_addr_t per_cpu_ptr_to_phys(void *addr);
# 35 "include/linux/topology.h" 2
# 1 "./arch/mips/include/asm/topology.h" 1
# 11 "./arch/mips/include/asm/topology.h"
# 1 "./arch/mips/include/asm/mach-generic/topology.h" 1
# 1 "include/asm-generic/topology.h" 1
# 1 "./arch/mips/include/asm/mach-generic/topology.h" 2
# 12 "./arch/mips/include/asm/topology.h" 2
# 36 "include/linux/topology.h" 2
# 49 "include/linux/topology.h"
int arch_update_cpu_topology(void);
# 106 "include/linux/topology.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int numa_node_id(void)
{
return ((void)((current_thread_info()->cpu)),0);
}
# 166 "include/linux/topology.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int numa_mem_id(void)
{
return numa_node_id();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int node_to_mem_node(int node)
{
return node;
}
# 208 "include/linux/topology.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const struct cpumask *cpu_cpu_mask(int cpu)
{
return ((void)((void)(cpu),0), cpu_online_mask);
}
# 9 "include/linux/gfp.h" 2
struct vm_area_struct;
# 159 "include/linux/gfp.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int gfpflags_to_migratetype(const gfp_t gfp_flags)
{
({ int __ret_warn_on = !!((gfp_flags & ((( gfp_t)0x80000u)|(( gfp_t)0x08u))) == ((( gfp_t)0x80000u)|(( gfp_t)0x08u))); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("include/linux/gfp.h", 161); __builtin_expect(!!(__ret_warn_on), 0); });
if (__builtin_expect(!!(page_group_by_mobility_disabled), 0))
return MIGRATE_UNMOVABLE;
return (((gfp_flags & (( gfp_t)0x08u)) != 0) << 1) |
((gfp_flags & (( gfp_t)0x80000u)) != 0);
}
# 254 "include/linux/gfp.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum zone_type gfp_zone(gfp_t flags)
{
enum zone_type z;
int bit = ( int) (flags & ((( gfp_t)0x01u)|(( gfp_t)0x02u)|(( gfp_t)0x04u)|(( gfp_t)0x08u)));
z = (( (ZONE_NORMAL << 0 * 1) | (ZONE_NORMAL << 0x01u * 1) | (ZONE_NORMAL << 0x02u * 1) | (ZONE_NORMAL << 0x04u * 1) | (ZONE_NORMAL << 0x08u * 1) | (ZONE_NORMAL << (0x08u | 0x01u) * 1) | (ZONE_MOVABLE << (0x08u | 0x02u) * 1) | (ZONE_NORMAL << (0x08u | 0x04u) * 1) ) >> (bit * 1)) &
((1 << 1) - 1);
((void)(sizeof(( long)((( 1 << (0x01u | 0x02u) | 1 << (0x01u | 0x04u) | 1 << (0x04u | 0x02u) | 1 << (0x01u | 0x04u | 0x02u) | 1 << (0x08u | 0x02u | 0x01u) | 1 << (0x08u | 0x04u | 0x01u) | 1 << (0x08u | 0x04u | 0x02u) | 1 << (0x08u | 0x04u | 0x01u | 0x02u) ) >> bit) & 1))));
return z;
}
# 272 "include/linux/gfp.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int gfp_zonelist(gfp_t flags)
{
if ((0 || 0) && __builtin_expect(!!(flags & (( gfp_t)0x40000u)), 0))
return 1;
return 0;
}
# 289 "include/linux/gfp.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct zonelist *node_zonelist(int nid, gfp_t flags)
{
return (&contig_page_data)->node_zonelists + gfp_zonelist(flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_free_page(struct page *page, int order) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void arch_alloc_page(struct page *page, int order) { }
struct page *
__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
struct zonelist *zonelist, nodemask_t *nodemask);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *
__alloc_pages(gfp_t gfp_mask, unsigned int order,
struct zonelist *zonelist)
{
return __alloc_pages_nodemask(gfp_mask, order, zonelist, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
unsigned int order)
{
if (nid < 0)
nid = numa_node_id();
return __alloc_pages(gfp_mask, order, node_zonelist(nid, gfp_mask));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *alloc_pages_exact_node(int nid, gfp_t gfp_mask,
unsigned int order)
{
((void)(sizeof(( long)(nid < 0 || nid >= (1 << 0) || !node_state((nid), N_ONLINE)))));
return __alloc_pages(gfp_mask, order, node_zonelist(nid, gfp_mask));
}
# 353 "include/linux/gfp.h"
extern struct page *alloc_kmem_pages(gfp_t gfp_mask, unsigned int order);
extern struct page *alloc_kmem_pages_node(int nid, gfp_t gfp_mask,
unsigned int order);
extern unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);
extern unsigned long get_zeroed_page(gfp_t gfp_mask);
void *alloc_pages_exact(size_t size, gfp_t gfp_mask);
void free_pages_exact(void *virt, size_t size);
void * __attribute__ ((__section__(".meminit.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask);
extern void __free_pages(struct page *page, unsigned int order);
extern void free_pages(unsigned long addr, unsigned int order);
extern void free_hot_cold_page(struct page *page, bool cold);
extern void free_hot_cold_page_list(struct list_head *list, bool cold);
extern void __free_kmem_pages(struct page *page, unsigned int order);
extern void free_kmem_pages(unsigned long addr, unsigned int order);
void page_alloc_init(void);
void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp);
void drain_all_pages(void);
void drain_local_pages(void *dummy);
# 394 "include/linux/gfp.h"
extern gfp_t gfp_allowed_mask;
bool gfp_pfmemalloc_allowed(gfp_t gfp_mask);
extern void pm_restrict_gfp_mask(void);
extern void pm_restore_gfp_mask(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool pm_suspended_storage(void)
{
return false;
}
# 15 "include/linux/slab.h" 2
# 106 "include/linux/slab.h"
# 1 "include/linux/kmemleak.h" 1
# 61 "include/linux/kmemleak.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_init(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_alloc(const void *ptr, size_t size, int min_count,
gfp_t gfp)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_alloc_recursive(const void *ptr, size_t size,
int min_count, unsigned long flags,
gfp_t gfp)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_alloc_percpu(const void *ptr, size_t size,
gfp_t gfp)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_free(const void *ptr)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_free_part(const void *ptr, size_t size)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_free_recursive(const void *ptr, unsigned long flags)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_free_percpu(const void *ptr)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_update_trace(const void *ptr)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_not_leak(const void *ptr)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_ignore(const void *ptr)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_erase(void **ptr)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemleak_no_scan(const void *ptr)
{
}
# 107 "include/linux/slab.h" 2
struct mem_cgroup;
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) kmem_cache_init(void);
int slab_is_available(void);
struct kmem_cache *kmem_cache_create(const char *, size_t, size_t,
unsigned long,
void (*)(void *));
void kmem_cache_destroy(struct kmem_cache *);
int kmem_cache_shrink(struct kmem_cache *);
void kmem_cache_free(struct kmem_cache *, void *);
# 142 "include/linux/slab.h"
void * __attribute__((warn_unused_result)) __krealloc(const void *, size_t, gfp_t);
void * __attribute__((warn_unused_result)) krealloc(const void *, size_t, gfp_t);
void kfree(const void *);
void kzfree(const void *);
size_t ksize(const void *);
# 234 "include/linux/slab.h"
extern struct kmem_cache *kmalloc_caches[(12 + 1) + 1];
# 247 "include/linux/slab.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) int kmalloc_index(size_t size)
{
if (!size)
return 0;
if (size <= 128)
return ( __builtin_constant_p(128) ? ( (128) < 1 ? ____ilog2_NaN() : (128) & (1ULL << 63) ? 63 : (128) & (1ULL << 62) ? 62 : (128) & (1ULL << 61) ? 61 : (128) & (1ULL << 60) ? 60 : (128) & (1ULL << 59) ? 59 : (128) & (1ULL << 58) ? 58 : (128) & (1ULL << 57) ? 57 : (128) & (1ULL << 56) ? 56 : (128) & (1ULL << 55) ? 55 : (128) & (1ULL << 54) ? 54 : (128) & (1ULL << 53) ? 53 : (128) & (1ULL << 52) ? 52 : (128) & (1ULL << 51) ? 51 : (128) & (1ULL << 50) ? 50 : (128) & (1ULL << 49) ? 49 : (128) & (1ULL << 48) ? 48 : (128) & (1ULL << 47) ? 47 : (128) & (1ULL << 46) ? 46 : (128) & (1ULL << 45) ? 45 : (128) & (1ULL << 44) ? 44 : (128) & (1ULL << 43) ? 43 : (128) & (1ULL << 42) ? 42 : (128) & (1ULL << 41) ? 41 : (128) & (1ULL << 40) ? 40 : (128) & (1ULL << 39) ? 39 : (128) & (1ULL << 38) ? 38 : (128) & (1ULL << 37) ? 37 : (128) & (1ULL << 36) ? 36 : (128) & (1ULL << 35) ? 35 : (128) & (1ULL << 34) ? 34 : (128) & (1ULL << 33) ? 33 : (128) & (1ULL << 32) ? 32 : (128) & (1ULL << 31) ? 31 : (128) & (1ULL << 30) ? 30 : (128) & (1ULL << 29) ? 29 : (128) & (1ULL << 28) ? 28 : (128) & (1ULL << 27) ? 27 : (128) & (1ULL << 26) ? 26 : (128) & (1ULL << 25) ? 25 : (128) & (1ULL << 24) ? 24 : (128) & (1ULL << 23) ? 23 : (128) & (1ULL << 22) ? 22 : (128) & (1ULL << 21) ? 21 : (128) & (1ULL << 20) ? 20 : (128) & (1ULL << 19) ? 19 : (128) & (1ULL << 18) ? 18 : (128) & (1ULL << 17) ? 17 : (128) & (1ULL << 16) ? 16 : (128) & (1ULL << 15) ? 15 : (128) & (1ULL << 14) ? 14 : (128) & (1ULL << 13) ? 13 : (128) & (1ULL << 12) ? 12 : (128) & (1ULL << 11) ? 11 : (128) & (1ULL << 10) ? 10 : (128) & (1ULL << 9) ? 9 : (128) & (1ULL << 8) ? 8 : (128) & (1ULL << 7) ? 7 : (128) & (1ULL << 6) ? 6 : (128) & (1ULL << 5) ? 5 : (128) & (1ULL << 4) ? 4 : (128) & (1ULL << 3) ? 3 : (128) & (1ULL << 2) ? 2 : (128) & (1ULL << 1) ? 1 : (128) & (1ULL << 0) ? 0 : ____ilog2_NaN() ) : (sizeof(128) <= 4) ? __ilog2_u32(128) : __ilog2_u64(128) );
if (128 <= 32 && size > 64 && size <= 96)
return 1;
if (128 <= 64 && size > 128 && size <= 192)
return 2;
if (size <= 8) return 3;
if (size <= 16) return 4;
if (size <= 32) return 5;
if (size <= 64) return 6;
if (size <= 128) return 7;
if (size <= 256) return 8;
if (size <= 512) return 9;
if (size <= 1024) return 10;
if (size <= 2 * 1024) return 11;
if (size <= 4 * 1024) return 12;
if (size <= 8 * 1024) return 13;
if (size <= 16 * 1024) return 14;
if (size <= 32 * 1024) return 15;
if (size <= 64 * 1024) return 16;
if (size <= 128 * 1024) return 17;
if (size <= 256 * 1024) return 18;
if (size <= 512 * 1024) return 19;
if (size <= 1024 * 1024) return 20;
if (size <= 2 * 1024 * 1024) return 21;
if (size <= 4 * 1024 * 1024) return 22;
if (size <= 8 * 1024 * 1024) return 23;
if (size <= 16 * 1024 * 1024) return 24;
if (size <= 32 * 1024 * 1024) return 25;
if (size <= 64 * 1024 * 1024) return 26;
BUG();
return -1;
}
void *__kmalloc(size_t size, gfp_t flags);
void *kmem_cache_alloc(struct kmem_cache *, gfp_t flags);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void *__kmalloc_node(size_t size, gfp_t flags, int node)
{
return __kmalloc(size, flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t flags, int node)
{
return kmem_cache_alloc(s, flags);
}
# 326 "include/linux/slab.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void *kmem_cache_alloc_trace(struct kmem_cache *s,
gfp_t flags, size_t size)
{
return kmem_cache_alloc(s, flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void *
kmem_cache_alloc_node_trace(struct kmem_cache *s,
gfp_t gfpflags,
int node, size_t size)
{
return kmem_cache_alloc_node(s, gfpflags, node);
}
extern void *kmalloc_order(size_t size, gfp_t flags, unsigned int order);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void *
kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order)
{
return kmalloc_order(size, flags, order);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void *kmalloc_large(size_t size, gfp_t flags)
{
unsigned int order = ( __builtin_constant_p(size) ? ( ((size) == 0UL) ? 32 - 12 : (((size) < (1UL << 12)) ? 0 : ( __builtin_constant_p((size) - 1) ? ( ((size) - 1) < 1 ? ____ilog2_NaN() : ((size) - 1) & (1ULL << 63) ? 63 : ((size) - 1) & (1ULL << 62) ? 62 : ((size) - 1) & (1ULL << 61) ? 61 : ((size) - 1) & (1ULL << 60) ? 60 : ((size) - 1) & (1ULL << 59) ? 59 : ((size) - 1) & (1ULL << 58) ? 58 : ((size) - 1) & (1ULL << 57) ? 57 : ((size) - 1) & (1ULL << 56) ? 56 : ((size) - 1) & (1ULL << 55) ? 55 : ((size) - 1) & (1ULL << 54) ? 54 : ((size) - 1) & (1ULL << 53) ? 53 : ((size) - 1) & (1ULL << 52) ? 52 : ((size) - 1) & (1ULL << 51) ? 51 : ((size) - 1) & (1ULL << 50) ? 50 : ((size) - 1) & (1ULL << 49) ? 49 : ((size) - 1) & (1ULL << 48) ? 48 : ((size) - 1) & (1ULL << 47) ? 47 : ((size) - 1) & (1ULL << 46) ? 46 : ((size) - 1) & (1ULL << 45) ? 45 : ((size) - 1) & (1ULL << 44) ? 44 : ((size) - 1) & (1ULL << 43) ? 43 : ((size) - 1) & (1ULL << 42) ? 42 : ((size) - 1) & (1ULL << 41) ? 41 : ((size) - 1) & (1ULL << 40) ? 40 : ((size) - 1) & (1ULL << 39) ? 39 : ((size) - 1) & (1ULL << 38) ? 38 : ((size) - 1) & (1ULL << 37) ? 37 : ((size) - 1) & (1ULL << 36) ? 36 : ((size) - 1) & (1ULL << 35) ? 35 : ((size) - 1) & (1ULL << 34) ? 34 : ((size) - 1) & (1ULL << 33) ? 33 : ((size) - 1) & (1ULL << 32) ? 32 : ((size) - 1) & (1ULL << 31) ? 31 : ((size) - 1) & (1ULL << 30) ? 30 : ((size) - 1) & (1ULL << 29) ? 29 : ((size) - 1) & (1ULL << 28) ? 28 : ((size) - 1) & (1ULL << 27) ? 27 : ((size) - 1) & (1ULL << 26) ? 26 : ((size) - 1) & (1ULL << 25) ? 25 : ((size) - 1) & (1ULL << 24) ? 24 : ((size) - 1) & (1ULL << 23) ? 23 : ((size) - 1) & (1ULL << 22) ? 22 : ((size) - 1) & (1ULL << 21) ? 21 : ((size) - 1) & (1ULL << 20) ? 20 : ((size) - 1) & (1ULL << 19) ? 19 : ((size) - 1) & (1ULL << 18) ? 18 : ((size) - 1) & (1ULL << 17) ? 17 : ((size) - 1) & (1ULL << 16) ? 16 : ((size) - 1) & (1ULL << 15) ? 15 : ((size) - 1) & (1ULL << 14) ? 14 : ((size) - 1) & (1ULL << 13) ? 13 : ((size) - 1) & (1ULL << 12) ? 12 : ((size) - 1) & (1ULL << 11) ? 11 : ((size) - 1) & (1ULL << 10) ? 10 : ((size) - 1) & (1ULL << 9) ? 9 : ((size) - 1) & (1ULL << 8) ? 8 : ((size) - 1) & (1ULL << 7) ? 7 : ((size) - 1) & (1ULL << 6) ? 6 : ((size) - 1) & (1ULL << 5) ? 5 : ((size) - 1) & (1ULL << 4) ? 4 : ((size) - 1) & (1ULL << 3) ? 3 : ((size) - 1) & (1ULL << 2) ? 2 : ((size) - 1) & (1ULL << 1) ? 1 : ((size) - 1) & (1ULL << 0) ? 0 : ____ilog2_NaN() ) : (sizeof((size) - 1) <= 4) ? __ilog2_u32((size) - 1) : __ilog2_u64((size) - 1) ) - 12 + 1) ) : __get_order(size) );
return kmalloc_order_trace(size, flags, order);
}
# 412 "include/linux/slab.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void *kmalloc(size_t size, gfp_t flags)
{
if (__builtin_constant_p(size)) {
if (size > (1UL << (12 + 1)))
return kmalloc_large(size, flags);
if (!(flags & (( gfp_t)0x01u))) {
int index = kmalloc_index(size);
if (!index)
return ((void *)16);
return kmem_cache_alloc_trace(kmalloc_caches[index],
flags, size);
}
}
return __kmalloc(size, flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) int kmalloc_size(int n)
{
if (n > 2)
return 1 << n;
if (n == 1 && 128 <= 32)
return 96;
if (n == 2 && 128 <= 64)
return 192;
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void *kmalloc_node(size_t size, gfp_t flags, int node)
{
if (__builtin_constant_p(size) &&
size <= (1UL << (12 + 1)) && !(flags & (( gfp_t)0x01u))) {
int i = kmalloc_index(size);
if (!i)
return ((void *)16);
return kmem_cache_alloc_node_trace(kmalloc_caches[i],
flags, node, size);
}
return __kmalloc_node(size, flags, node);
}
# 498 "include/linux/slab.h"
struct memcg_cache_params {
bool is_root_cache;
union {
struct {
struct callback_head callback_head;
struct kmem_cache *memcg_caches[0];
};
struct {
struct mem_cgroup *memcg;
struct list_head list;
struct kmem_cache *root_cache;
atomic_t nr_pages;
};
};
};
int memcg_update_all_caches(int num_memcgs);
struct seq_file;
int cache_show(struct kmem_cache *s, struct seq_file *m);
void print_slabinfo_header(struct seq_file *m);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *kmalloc_array(size_t n, size_t size, gfp_t flags)
{
if (size != 0 && n > (~(size_t)0) / size)
return ((void *)0);
return __kmalloc(n * size, flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *kcalloc(size_t n, size_t size, gfp_t flags)
{
return kmalloc_array(n, size, flags | (( gfp_t)0x8000u));
}
# 552 "include/linux/slab.h"
extern void *__kmalloc_track_caller(size_t, gfp_t, unsigned long);
# 572 "include/linux/slab.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *kmem_cache_zalloc(struct kmem_cache *k, gfp_t flags)
{
return kmem_cache_alloc(k, flags | (( gfp_t)0x8000u));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *kzalloc(size_t size, gfp_t flags)
{
return kmalloc(size, flags | (( gfp_t)0x8000u));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *kzalloc_node(size_t size, gfp_t flags, int node)
{
return kmalloc_node(size, flags | (( gfp_t)0x8000u), node);
}
unsigned int kmem_cache_size(struct kmem_cache *s);
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) kmem_cache_init_late(void);
# 3 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "include/linux/delay.h" 1
# 12 "include/linux/delay.h"
extern unsigned long loops_per_jiffy;
# 1 "./arch/mips/include/asm/delay.h" 1
# 16 "./arch/mips/include/asm/delay.h"
extern void __delay(unsigned long loops);
extern void __ndelay(unsigned long ns);
extern void __udelay(unsigned long us);
# 15 "include/linux/delay.h" 2
# 44 "include/linux/delay.h"
extern unsigned long lpj_fine;
void calibrate_delay(void);
void msleep(unsigned int msecs);
unsigned long msleep_interruptible(unsigned int msecs);
void usleep_range(unsigned long min, unsigned long max);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ssleep(unsigned int seconds)
{
msleep(seconds * 1000);
}
# 4 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "include/linux/proc_fs.h" 1
# 1 "include/linux/fs.h" 1
# 1 "include/linux/kdev_t.h" 1
# 1 "include/uapi/linux/kdev_t.h" 1
# 5 "include/linux/kdev_t.h" 2
# 23 "include/linux/kdev_t.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int old_valid_dev(dev_t dev)
{
return ((unsigned int) ((dev) >> 20)) < 256 && ((unsigned int) ((dev) & ((1U << 20) - 1))) < 256;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 old_encode_dev(dev_t dev)
{
return (((unsigned int) ((dev) >> 20)) << 8) | ((unsigned int) ((dev) & ((1U << 20) - 1)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dev_t old_decode_dev(u16 val)
{
return ((((val >> 8) & 255) << 20) | (val & 255));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int new_valid_dev(dev_t dev)
{
return 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 new_encode_dev(dev_t dev)
{
unsigned major = ((unsigned int) ((dev) >> 20));
unsigned minor = ((unsigned int) ((dev) & ((1U << 20) - 1)));
return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dev_t new_decode_dev(u32 dev)
{
unsigned major = (dev & 0xfff00) >> 8;
unsigned minor = (dev & 0xff) | ((dev >> 12) & 0xfff00);
return (((major) << 20) | (minor));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int huge_valid_dev(dev_t dev)
{
return 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 huge_encode_dev(dev_t dev)
{
return new_encode_dev(dev);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dev_t huge_decode_dev(u64 dev)
{
return new_decode_dev(dev);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int sysv_valid_dev(dev_t dev)
{
return ((unsigned int) ((dev) >> 20)) < (1<<14) && ((unsigned int) ((dev) & ((1U << 20) - 1))) < (1<<18);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 sysv_encode_dev(dev_t dev)
{
return ((unsigned int) ((dev) & ((1U << 20) - 1))) | (((unsigned int) ((dev) >> 20)) << 18);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned sysv_major(u32 dev)
{
return (dev >> 18) & 0x3fff;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned sysv_minor(u32 dev)
{
return dev & 0x3ffff;
}
# 8 "include/linux/fs.h" 2
# 1 "include/linux/dcache.h" 1
# 1 "include/linux/rculist.h" 1
# 30 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void INIT_LIST_HEAD_RCU(struct list_head *list)
{
(*(volatile typeof(list->next) *)&(list->next)) = list;
(*(volatile typeof(list->prev) *)&(list->prev)) = list;
}
# 49 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __list_add_rcu(struct list_head *new,
struct list_head *prev, struct list_head *next)
{
new->next = next;
new->prev = prev;
do { do { bool __cond = !((sizeof(*&(*((struct list_head **)(&(prev)->next)))) == sizeof(int) || sizeof(*&(*((struct list_head **)(&(prev)->next)))) == sizeof(long))); extern void __compiletime_assert_54(void) __attribute__((error("Need native word sized stores/loads for atomicity."))); if (__cond) __compiletime_assert_54(); do { } while (0); } while (0); __asm__ __volatile__("": : :"memory"); (*(volatile typeof(*&(*((struct list_head **)(&(prev)->next)))) *)&(*&(*((struct list_head **)(&(prev)->next))))) = ((typeof(*(new)) *)(new)); } while (0);
next->prev = new;
}
# 78 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_add_rcu(struct list_head *new, struct list_head *head)
{
__list_add_rcu(new, head, head->next);
}
# 99 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_add_tail_rcu(struct list_head *new,
struct list_head *head)
{
__list_add_rcu(new, head->prev, head);
}
# 129 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_del_rcu(struct list_head *entry)
{
__list_del_entry(entry);
entry->prev = ((void *) 0x00200200 + 0);
}
# 155 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_del_init_rcu(struct hlist_node *n)
{
if (!hlist_unhashed(n)) {
__hlist_del(n);
n->pprev = ((void *)0);
}
}
# 171 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_replace_rcu(struct list_head *old,
struct list_head *new)
{
new->next = old->next;
new->prev = old->prev;
do { do { bool __cond = !((sizeof(*&(*((struct list_head **)(&(new->prev)->next)))) == sizeof(int) || sizeof(*&(*((struct list_head **)(&(new->prev)->next)))) == sizeof(long))); extern void __compiletime_assert_176(void) __attribute__((error("Need native word sized stores/loads for atomicity."))); if (__cond) __compiletime_assert_176(); do { } while (0); } while (0); __asm__ __volatile__("": : :"memory"); (*(volatile typeof(*&(*((struct list_head **)(&(new->prev)->next)))) *)&(*&(*((struct list_head **)(&(new->prev)->next))))) = ((typeof(*(new)) *)(new)); } while (0);
new->next->prev = new;
old->prev = ((void *) 0x00200200 + 0);
}
# 198 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void list_splice_init_rcu(struct list_head *list,
struct list_head *head,
void (*sync)(void))
{
struct list_head *first = list->next;
struct list_head *last = list->prev;
struct list_head *at = head->next;
if (list_empty(list))
return;
INIT_LIST_HEAD_RCU(list);
# 224 "include/linux/rculist.h"
sync();
# 234 "include/linux/rculist.h"
last->next = at;
do { do { bool __cond = !((sizeof(*&(*((struct list_head **)(&(head)->next)))) == sizeof(int) || sizeof(*&(*((struct list_head **)(&(head)->next)))) == sizeof(long))); extern void __compiletime_assert_235(void) __attribute__((error("Need native word sized stores/loads for atomicity."))); if (__cond) __compiletime_assert_235(); do { } while (0); } while (0); __asm__ __volatile__("": : :"memory"); (*(volatile typeof(*&(*((struct list_head **)(&(head)->next)))) *)&(*&(*((struct list_head **)(&(head)->next))))) = ((typeof(*(first)) *)(first)); } while (0);
first->prev = head;
at->prev = last;
}
# 343 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_del_rcu(struct hlist_node *n)
{
__hlist_del(n);
n->pprev = ((void *) 0x00200200 + 0);
}
# 356 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_replace_rcu(struct hlist_node *old,
struct hlist_node *new)
{
struct hlist_node *next = old->next;
new->next = next;
new->pprev = old->pprev;
do { do { bool __cond = !((sizeof(*&*(struct hlist_node **)new->pprev) == sizeof(int) || sizeof(*&*(struct hlist_node **)new->pprev) == sizeof(long))); extern void __compiletime_assert_363(void) __attribute__((error("Need native word sized stores/loads for atomicity."))); if (__cond) __compiletime_assert_363(); do { } while (0); } while (0); __asm__ __volatile__("": : :"memory"); (*(volatile typeof(*&*(struct hlist_node **)new->pprev) *)&(*&*(struct hlist_node **)new->pprev)) = ((typeof(*(new)) *)(new)); } while (0);
if (next)
new->next->pprev = &new->next;
old->pprev = ((void *) 0x00200200 + 0);
}
# 395 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_add_head_rcu(struct hlist_node *n,
struct hlist_head *h)
{
struct hlist_node *first = h->first;
n->next = first;
n->pprev = &h->first;
do { do { bool __cond = !((sizeof(*&(*((struct hlist_node **)(&(h)->first)))) == sizeof(int) || sizeof(*&(*((struct hlist_node **)(&(h)->first)))) == sizeof(long))); extern void __compiletime_assert_402(void) __attribute__((error("Need native word sized stores/loads for atomicity."))); if (__cond) __compiletime_assert_402(); do { } while (0); } while (0); __asm__ __volatile__("": : :"memory"); (*(volatile typeof(*&(*((struct hlist_node **)(&(h)->first)))) *)&(*&(*((struct hlist_node **)(&(h)->first))))) = ((typeof(*(n)) *)(n)); } while (0);
if (first)
first->pprev = &n->next;
}
# 425 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_add_before_rcu(struct hlist_node *n,
struct hlist_node *next)
{
n->pprev = next->pprev;
n->next = next;
do { do { bool __cond = !((sizeof(*&(*((struct hlist_node **)((n)->pprev)))) == sizeof(int) || sizeof(*&(*((struct hlist_node **)((n)->pprev)))) == sizeof(long))); extern void __compiletime_assert_430(void) __attribute__((error("Need native word sized stores/loads for atomicity."))); if (__cond) __compiletime_assert_430(); do { } while (0); } while (0); __asm__ __volatile__("": : :"memory"); (*(volatile typeof(*&(*((struct hlist_node **)((n)->pprev)))) *)&(*&(*((struct hlist_node **)((n)->pprev))))) = ((typeof(*(n)) *)(n)); } while (0);
next->pprev = &n->next;
}
# 452 "include/linux/rculist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_add_behind_rcu(struct hlist_node *n,
struct hlist_node *prev)
{
n->next = prev->next;
n->pprev = &prev->next;
do { do { bool __cond = !((sizeof(*&(*((struct hlist_node **)(&(prev)->next)))) == sizeof(int) || sizeof(*&(*((struct hlist_node **)(&(prev)->next)))) == sizeof(long))); extern void __compiletime_assert_457(void) __attribute__((error("Need native word sized stores/loads for atomicity."))); if (__cond) __compiletime_assert_457(); do { } while (0); } while (0); __asm__ __volatile__("": : :"memory"); (*(volatile typeof(*&(*((struct hlist_node **)(&(prev)->next)))) *)&(*&(*((struct hlist_node **)(&(prev)->next))))) = ((typeof(*(n)) *)(n)); } while (0);
if (n->next)
n->next->pprev = &n->next;
}
# 7 "include/linux/dcache.h" 2
# 1 "include/linux/rculist_bl.h" 1
# 1 "include/linux/list_bl.h" 1
# 1 "include/linux/bit_spinlock.h" 1
# 15 "include/linux/bit_spinlock.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void bit_spin_lock(int bitnum, unsigned long *addr)
{
__asm__ __volatile__("": : :"memory");
while (__builtin_expect(!!(test_and_set_bit_lock(bitnum, addr)), 0)) {
__asm__ __volatile__("": : :"memory");
do {
__asm__ __volatile__("": : :"memory");
} while (test_bit(bitnum, addr));
__asm__ __volatile__("": : :"memory");
}
(void)0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bit_spin_trylock(int bitnum, unsigned long *addr)
{
__asm__ __volatile__("": : :"memory");
if (__builtin_expect(!!(test_and_set_bit_lock(bitnum, addr)), 0)) {
__asm__ __volatile__("": : :"memory");
return 0;
}
(void)0;
return 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void bit_spin_unlock(int bitnum, unsigned long *addr)
{
clear_bit_unlock(bitnum, addr);
__asm__ __volatile__("": : :"memory");
(void)0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __bit_spin_unlock(int bitnum, unsigned long *addr)
{
__clear_bit_unlock(bitnum, addr);
__asm__ __volatile__("": : :"memory");
(void)0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int bit_spin_is_locked(int bitnum, unsigned long *addr)
{
return test_bit(bitnum, addr);
}
# 6 "include/linux/list_bl.h" 2
# 33 "include/linux/list_bl.h"
struct hlist_bl_head {
struct hlist_bl_node *first;
};
struct hlist_bl_node {
struct hlist_bl_node *next, **pprev;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void INIT_HLIST_BL_NODE(struct hlist_bl_node *h)
{
h->next = ((void *)0);
h->pprev = ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hlist_bl_unhashed(const struct hlist_bl_node *h)
{
return !h->pprev;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct hlist_bl_node *hlist_bl_first(struct hlist_bl_head *h)
{
return (struct hlist_bl_node *)
((unsigned long)h->first & ~1UL);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_bl_set_first(struct hlist_bl_head *h,
struct hlist_bl_node *n)
{
;
;
h->first = (struct hlist_bl_node *)((unsigned long)n | 1UL);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hlist_bl_empty(const struct hlist_bl_head *h)
{
return !((unsigned long)h->first & ~1UL);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_bl_add_head(struct hlist_bl_node *n,
struct hlist_bl_head *h)
{
struct hlist_bl_node *first = hlist_bl_first(h);
n->next = first;
if (first)
first->pprev = &n->next;
n->pprev = &h->first;
hlist_bl_set_first(h, n);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __hlist_bl_del(struct hlist_bl_node *n)
{
struct hlist_bl_node *next = n->next;
struct hlist_bl_node **pprev = n->pprev;
;
*pprev = (struct hlist_bl_node *)
((unsigned long)next |
((unsigned long)*pprev & 1UL));
if (next)
next->pprev = pprev;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_bl_del(struct hlist_bl_node *n)
{
__hlist_bl_del(n);
n->next = ((void *) 0x00100100 + 0);
n->pprev = ((void *) 0x00200200 + 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_bl_del_init(struct hlist_bl_node *n)
{
if (!hlist_bl_unhashed(n)) {
__hlist_bl_del(n);
INIT_HLIST_BL_NODE(n);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_bl_lock(struct hlist_bl_head *b)
{
bit_spin_lock(0, (unsigned long *)b);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_bl_unlock(struct hlist_bl_head *b)
{
__bit_spin_unlock(0, (unsigned long *)b);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool hlist_bl_is_locked(struct hlist_bl_head *b)
{
return bit_spin_is_locked(0, (unsigned long *)b);
}
# 8 "include/linux/rculist_bl.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_bl_set_first_rcu(struct hlist_bl_head *h,
struct hlist_bl_node *n)
{
;
;
do { do { bool __cond = !((sizeof(*&h->first) == sizeof(int) || sizeof(*&h->first) == sizeof(long))); extern void __compiletime_assert_17(void) __attribute__((error("Need native word sized stores/loads for atomicity."))); if (__cond) __compiletime_assert_17(); do { } while (0); } while (0); __asm__ __volatile__("": : :"memory"); (*(volatile typeof(*&h->first) *)&(*&h->first)) = ((typeof(*((struct hlist_bl_node *)((unsigned long)n | 1UL))) *)((struct hlist_bl_node *)((unsigned long)n | 1UL))); } while (0)
;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct hlist_bl_node *hlist_bl_first_rcu(struct hlist_bl_head *h)
{
return (struct hlist_bl_node *)
((unsigned long)({ typeof(*(h->first)) *_________p1 = (typeof(*(h->first)) *)(*(volatile typeof((h->first)) *)&((h->first))); do { } while (0); ; do { } while(0); ((typeof(*(h->first)) *)(_________p1)); }) & ~1UL);
}
# 46 "include/linux/rculist_bl.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_bl_del_init_rcu(struct hlist_bl_node *n)
{
if (!hlist_bl_unhashed(n)) {
__hlist_bl_del(n);
n->pprev = ((void *)0);
}
}
# 73 "include/linux/rculist_bl.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_bl_del_rcu(struct hlist_bl_node *n)
{
__hlist_bl_del(n);
n->pprev = ((void *) 0x00200200 + 0);
}
# 98 "include/linux/rculist_bl.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_bl_add_head_rcu(struct hlist_bl_node *n,
struct hlist_bl_head *h)
{
struct hlist_bl_node *first;
first = hlist_bl_first(h);
n->next = first;
if (first)
first->pprev = &n->next;
n->pprev = &h->first;
hlist_bl_set_first_rcu(h, n);
}
# 8 "include/linux/dcache.h" 2
# 1 "include/linux/lockref.h" 1
# 24 "include/linux/lockref.h"
struct lockref {
union {
struct {
spinlock_t lock;
unsigned int count;
};
};
};
extern void lockref_get(struct lockref *);
extern int lockref_get_not_zero(struct lockref *);
extern int lockref_get_or_lock(struct lockref *);
extern int lockref_put_or_lock(struct lockref *);
extern void lockref_mark_dead(struct lockref *);
extern int lockref_get_not_dead(struct lockref *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __lockref_is_dead(const struct lockref *l)
{
return ((int)l->count < 0);
}
# 13 "include/linux/dcache.h" 2
struct path;
struct vfsmount;
# 44 "include/linux/dcache.h"
struct qstr {
union {
struct {
u32 len; u32 hash;;
};
u64 hash_len;
};
const unsigned char *name;
};
struct dentry_stat_t {
long nr_dentry;
long nr_unused;
long age_limit;
long want_pages;
long dummy[2];
};
extern struct dentry_stat_t dentry_stat;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long
partial_name_hash(unsigned long c, unsigned long prevhash)
{
return (prevhash + (c << 4) + (c >> 4)) * 11;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long end_name_hash(unsigned long hash)
{
return (unsigned int) hash;
}
extern unsigned int full_name_hash(const unsigned char *, unsigned int);
# 108 "include/linux/dcache.h"
struct dentry {
unsigned int d_flags;
seqcount_t d_seq;
struct hlist_bl_node d_hash;
struct dentry *d_parent;
struct qstr d_name;
struct inode *d_inode;
unsigned char d_iname[36];
struct lockref d_lockref;
const struct dentry_operations *d_op;
struct super_block *d_sb;
unsigned long d_time;
void *d_fsdata;
struct list_head d_lru;
struct list_head d_child;
struct list_head d_subdirs;
union {
struct hlist_node d_alias;
struct callback_head d_rcu;
} d_u;
};
enum dentry_d_lock_class
{
DENTRY_D_LOCK_NORMAL,
DENTRY_D_LOCK_NESTED
};
struct dentry_operations {
int (*d_revalidate)(struct dentry *, unsigned int);
int (*d_weak_revalidate)(struct dentry *, unsigned int);
int (*d_hash)(const struct dentry *, struct qstr *);
int (*d_compare)(const struct dentry *, const struct dentry *,
unsigned int, const char *, const struct qstr *);
int (*d_delete)(const struct dentry *);
void (*d_release)(struct dentry *);
void (*d_prune)(struct dentry *);
void (*d_iput)(struct dentry *, struct inode *);
char *(*d_dname)(struct dentry *, char *, int);
struct vfsmount *(*d_automount)(struct path *);
int (*d_manage)(struct dentry *, bool);
} __attribute__((__aligned__((1 << 5))));
# 226 "include/linux/dcache.h"
extern seqlock_t rename_lock;
extern void d_instantiate(struct dentry *, struct inode *);
extern struct dentry * d_instantiate_unique(struct dentry *, struct inode *);
extern struct dentry * d_materialise_unique(struct dentry *, struct inode *);
extern int d_instantiate_no_diralias(struct dentry *, struct inode *);
extern void __d_drop(struct dentry *dentry);
extern void d_drop(struct dentry *dentry);
extern void d_delete(struct dentry *);
extern void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op);
extern struct dentry * d_alloc(struct dentry *, const struct qstr *);
extern struct dentry * d_alloc_pseudo(struct super_block *, const struct qstr *);
extern struct dentry * d_splice_alias(struct inode *, struct dentry *);
extern struct dentry * d_add_ci(struct dentry *, struct inode *, struct qstr *);
extern struct dentry *d_find_any_alias(struct inode *inode);
extern struct dentry * d_obtain_alias(struct inode *);
extern struct dentry * d_obtain_root(struct inode *);
extern void shrink_dcache_sb(struct super_block *);
extern void shrink_dcache_parent(struct dentry *);
extern void shrink_dcache_for_umount(struct super_block *);
extern void d_invalidate(struct dentry *);
extern struct dentry * d_make_root(struct inode *);
extern void d_genocide(struct dentry *);
extern void d_tmpfile(struct dentry *, struct inode *);
extern struct dentry *d_find_alias(struct inode *);
extern void d_prune_aliases(struct inode *);
extern int have_submounts(struct dentry *);
extern void d_rehash(struct dentry *);
# 281 "include/linux/dcache.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void d_add(struct dentry *entry, struct inode *inode)
{
d_instantiate(entry, inode);
d_rehash(entry);
}
# 295 "include/linux/dcache.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dentry *d_add_unique(struct dentry *entry, struct inode *inode)
{
struct dentry *res;
res = d_instantiate_unique(entry, inode);
d_rehash(res != ((void *)0) ? res : entry);
return res;
}
extern void dentry_update_name_case(struct dentry *, struct qstr *);
extern void d_move(struct dentry *, struct dentry *);
extern void d_exchange(struct dentry *, struct dentry *);
extern struct dentry *d_ancestor(struct dentry *, struct dentry *);
extern struct dentry *d_lookup(const struct dentry *, const struct qstr *);
extern struct dentry *d_hash_and_lookup(struct dentry *, struct qstr *);
extern struct dentry *__d_lookup(const struct dentry *, const struct qstr *);
extern struct dentry *__d_lookup_rcu(const struct dentry *parent,
const struct qstr *name, unsigned *seq);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned d_count(const struct dentry *dentry)
{
return dentry->d_lockref.count;
}
extern int d_validate(struct dentry *, struct dentry *);
extern char *dynamic_dname(struct dentry *, char *, int, const char *, ...);
extern char *simple_dname(struct dentry *, char *, int);
extern char *__d_path(const struct path *, const struct path *, char *, int);
extern char *d_absolute_path(const struct path *, char *, int);
extern char *d_path(const struct path *, char *, int);
extern char *dentry_path_raw(struct dentry *, char *, int);
extern char *dentry_path(struct dentry *, char *, int);
# 348 "include/linux/dcache.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dentry *dget_dlock(struct dentry *dentry)
{
if (dentry)
dentry->d_lockref.count++;
return dentry;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dentry *dget(struct dentry *dentry)
{
if (dentry)
lockref_get(&dentry->d_lockref);
return dentry;
}
extern struct dentry *dget_parent(struct dentry *dentry);
# 371 "include/linux/dcache.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int d_unhashed(const struct dentry *dentry)
{
return hlist_bl_unhashed(&dentry->d_hash);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int d_unlinked(const struct dentry *dentry)
{
return d_unhashed(dentry) && !((dentry) == (dentry)->d_parent);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cant_mount(const struct dentry *dentry)
{
return (dentry->d_flags & 0x00000100);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dont_mount(struct dentry *dentry)
{
spin_lock(&dentry->d_lockref.lock);
dentry->d_flags |= 0x00000100;
spin_unlock(&dentry->d_lockref.lock);
}
extern void dput(struct dentry *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool d_managed(const struct dentry *dentry)
{
return dentry->d_flags & (0x00010000|0x00020000|0x00040000);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool d_mountpoint(const struct dentry *dentry)
{
return dentry->d_flags & 0x00010000;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __d_set_type(struct dentry *dentry, unsigned type)
{
dentry->d_flags = (dentry->d_flags & ~0x00700000) | type;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __d_clear_type(struct dentry *dentry)
{
__d_set_type(dentry, 0x00000000);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void d_set_type(struct dentry *dentry, unsigned type)
{
spin_lock(&dentry->d_lockref.lock);
__d_set_type(dentry, type);
spin_unlock(&dentry->d_lockref.lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned __d_entry_type(const struct dentry *dentry)
{
return dentry->d_flags & 0x00700000;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool d_can_lookup(const struct dentry *dentry)
{
return __d_entry_type(dentry) == 0x00100000;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool d_is_autodir(const struct dentry *dentry)
{
return __d_entry_type(dentry) == 0x00200000;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool d_is_dir(const struct dentry *dentry)
{
return d_can_lookup(dentry) || d_is_autodir(dentry);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool d_is_symlink(const struct dentry *dentry)
{
return __d_entry_type(dentry) == 0x00300000;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool d_is_file(const struct dentry *dentry)
{
return __d_entry_type(dentry) == 0x00400000;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool d_is_negative(const struct dentry *dentry)
{
return __d_entry_type(dentry) == 0x00000000;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool d_is_positive(const struct dentry *dentry)
{
return !d_is_negative(dentry);
}
extern int sysctl_vfs_cache_pressure;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long vfs_pressure_ratio(unsigned long val)
{
return ( { typeof(val) quot = (val) / (100); typeof(val) rem = (val) % (100); (quot * (sysctl_vfs_cache_pressure)) + ((rem * (sysctl_vfs_cache_pressure)) / (100)); } );
}
# 9 "include/linux/fs.h" 2
# 1 "include/linux/path.h" 1
struct dentry;
struct vfsmount;
struct path {
struct vfsmount *mnt;
struct dentry *dentry;
};
extern void path_get(const struct path *);
extern void path_put(const struct path *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int path_equal(const struct path *path1, const struct path *path2)
{
return path1->mnt == path2->mnt && path1->dentry == path2->dentry;
}
# 10 "include/linux/fs.h" 2
# 1 "include/linux/stat.h" 1
# 1 "./arch/mips/include/uapi/asm/stat.h" 1
# 18 "./arch/mips/include/uapi/asm/stat.h"
struct stat {
unsigned st_dev;
long st_pad1[3];
ino_t st_ino;
mode_t st_mode;
__u32 st_nlink;
uid_t st_uid;
gid_t st_gid;
unsigned st_rdev;
long st_pad2[2];
off_t st_size;
long st_pad3;
time_t st_atime;
long st_atime_nsec;
time_t st_mtime;
long st_mtime_nsec;
time_t st_ctime;
long st_ctime_nsec;
long st_blksize;
long st_blocks;
long st_pad4[14];
};
struct stat64 {
unsigned long st_dev;
unsigned long st_pad0[3];
unsigned long long st_ino;
mode_t st_mode;
__u32 st_nlink;
uid_t st_uid;
gid_t st_gid;
unsigned long st_rdev;
unsigned long st_pad1[3];
long long st_size;
time_t st_atime;
unsigned long st_atime_nsec;
time_t st_mtime;
unsigned long st_mtime_nsec;
time_t st_ctime;
unsigned long st_ctime_nsec;
unsigned long st_blksize;
unsigned long st_pad2;
long long st_blocks;
};
# 6 "include/linux/stat.h" 2
# 1 "include/uapi/linux/stat.h" 1
# 7 "include/linux/stat.h" 2
# 19 "include/linux/stat.h"
# 1 "include/linux/uidgid.h" 1
# 15 "include/linux/uidgid.h"
# 1 "include/linux/highuid.h" 1
# 34 "include/linux/highuid.h"
extern int overflowuid;
extern int overflowgid;
extern void __bad_uid(void);
extern void __bad_gid(void);
# 81 "include/linux/highuid.h"
extern int fs_overflowuid;
extern int fs_overflowgid;
# 16 "include/linux/uidgid.h" 2
struct user_namespace;
extern struct user_namespace init_user_ns;
typedef struct {
uid_t val;
} kuid_t;
typedef struct {
gid_t val;
} kgid_t;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) uid_t __kuid_val(kuid_t uid)
{
return uid.val;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) gid_t __kgid_val(kgid_t gid)
{
return gid.val;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool uid_eq(kuid_t left, kuid_t right)
{
return __kuid_val(left) == __kuid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool gid_eq(kgid_t left, kgid_t right)
{
return __kgid_val(left) == __kgid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool uid_gt(kuid_t left, kuid_t right)
{
return __kuid_val(left) > __kuid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool gid_gt(kgid_t left, kgid_t right)
{
return __kgid_val(left) > __kgid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool uid_gte(kuid_t left, kuid_t right)
{
return __kuid_val(left) >= __kuid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool gid_gte(kgid_t left, kgid_t right)
{
return __kgid_val(left) >= __kgid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool uid_lt(kuid_t left, kuid_t right)
{
return __kuid_val(left) < __kuid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool gid_lt(kgid_t left, kgid_t right)
{
return __kgid_val(left) < __kgid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool uid_lte(kuid_t left, kuid_t right)
{
return __kuid_val(left) <= __kuid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool gid_lte(kgid_t left, kgid_t right)
{
return __kgid_val(left) <= __kgid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool uid_valid(kuid_t uid)
{
return !uid_eq(uid, (kuid_t){ -1 });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool gid_valid(kgid_t gid)
{
return !gid_eq(gid, (kgid_t){ -1 });
}
extern kuid_t make_kuid(struct user_namespace *from, uid_t uid);
extern kgid_t make_kgid(struct user_namespace *from, gid_t gid);
extern uid_t from_kuid(struct user_namespace *to, kuid_t uid);
extern gid_t from_kgid(struct user_namespace *to, kgid_t gid);
extern uid_t from_kuid_munged(struct user_namespace *to, kuid_t uid);
extern gid_t from_kgid_munged(struct user_namespace *to, kgid_t gid);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool kuid_has_mapping(struct user_namespace *ns, kuid_t uid)
{
return from_kuid(ns, uid) != (uid_t) -1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool kgid_has_mapping(struct user_namespace *ns, kgid_t gid)
{
return from_kgid(ns, gid) != (gid_t) -1;
}
# 20 "include/linux/stat.h" 2
struct kstat {
u64 ino;
dev_t dev;
umode_t mode;
unsigned int nlink;
kuid_t uid;
kgid_t gid;
dev_t rdev;
loff_t size;
struct timespec atime;
struct timespec mtime;
struct timespec ctime;
unsigned long blksize;
unsigned long long blocks;
};
# 11 "include/linux/fs.h" 2
# 1 "include/linux/list_lru.h" 1
# 14 "include/linux/list_lru.h"
enum lru_status {
LRU_REMOVED,
LRU_REMOVED_RETRY,
LRU_ROTATE,
LRU_SKIP,
LRU_RETRY,
};
struct list_lru_node {
spinlock_t lock;
struct list_head list;
long nr_items;
} __attribute__((__aligned__((1 << 5))));
struct list_lru {
struct list_lru_node *node;
nodemask_t active_nodes;
};
void list_lru_destroy(struct list_lru *lru);
int list_lru_init_key(struct list_lru *lru, struct lock_class_key *key);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int list_lru_init(struct list_lru *lru)
{
return list_lru_init_key(lru, ((void *)0));
}
# 59 "include/linux/list_lru.h"
bool list_lru_add(struct list_lru *lru, struct list_head *item);
# 72 "include/linux/list_lru.h"
bool list_lru_del(struct list_lru *lru, struct list_head *item);
# 83 "include/linux/list_lru.h"
unsigned long list_lru_count_node(struct list_lru *lru, int nid);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long list_lru_count(struct list_lru *lru)
{
long count = 0;
int nid;
if (!__nodes_empty(&(lru->active_nodes), (1 << 0))) for ((nid) = 0; (nid) < 1; (nid)++)
count += list_lru_count_node(lru, nid);
return count;
}
typedef enum lru_status
(*list_lru_walk_cb)(struct list_head *item, spinlock_t *lock, void *cb_arg);
# 118 "include/linux/list_lru.h"
unsigned long list_lru_walk_node(struct list_lru *lru, int nid,
list_lru_walk_cb isolate, void *cb_arg,
unsigned long *nr_to_walk);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long
list_lru_walk(struct list_lru *lru, list_lru_walk_cb isolate,
void *cb_arg, unsigned long nr_to_walk)
{
long isolated = 0;
int nid;
if (!__nodes_empty(&(lru->active_nodes), (1 << 0))) for ((nid) = 0; (nid) < 1; (nid)++) {
isolated += list_lru_walk_node(lru, nid, isolate,
cb_arg, &nr_to_walk);
if (nr_to_walk <= 0)
break;
}
return isolated;
}
# 14 "include/linux/fs.h" 2
# 1 "include/linux/radix-tree.h" 1
# 54 "include/linux/radix-tree.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int radix_tree_is_indirect_ptr(void *ptr)
{
return (int)((unsigned long)ptr & 1);
}
# 87 "include/linux/radix-tree.h"
struct radix_tree_node {
unsigned int path;
unsigned int count;
union {
struct {
struct radix_tree_node *parent;
void *private_data;
};
struct callback_head callback_head;
};
struct list_head private_list;
void *slots[(1UL << (0 ? 4 : 6))];
unsigned long tags[3][(((1UL << (0 ? 4 : 6)) + 32 - 1) / 32)];
};
struct radix_tree_root {
unsigned int height;
gfp_t gfp_mask;
struct radix_tree_node *rnode;
};
# 194 "include/linux/radix-tree.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *radix_tree_deref_slot(void **pslot)
{
return ({ typeof(*(*pslot)) *_________p1 = (typeof(*(*pslot)) *)(*(volatile typeof((*pslot)) *)&((*pslot))); do { } while (0); ; do { } while(0); ((typeof(*(*pslot)) *)(_________p1)); });
}
# 209 "include/linux/radix-tree.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *radix_tree_deref_slot_protected(void **pslot,
spinlock_t *treelock)
{
return ({ do { } while (0); ; ((typeof(*(*pslot)) *)((*pslot))); });
}
# 222 "include/linux/radix-tree.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int radix_tree_deref_retry(void *arg)
{
return __builtin_expect(!!((unsigned long)arg & 1), 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int radix_tree_exceptional_entry(void *arg)
{
return (unsigned long)arg & 2;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int radix_tree_exception(void *arg)
{
return __builtin_expect(!!((unsigned long)arg & (1 | 2)), 0)
;
}
# 257 "include/linux/radix-tree.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void radix_tree_replace_slot(void **pslot, void *item)
{
__BUG_ON((unsigned long)(radix_tree_is_indirect_ptr(item)));
do { do { bool __cond = !((sizeof(*&*pslot) == sizeof(int) || sizeof(*&*pslot) == sizeof(long))); extern void __compiletime_assert_260(void) __attribute__((error("Need native word sized stores/loads for atomicity."))); if (__cond) __compiletime_assert_260(); do { } while (0); } while (0); __asm__ __volatile__("": : :"memory"); (*(volatile typeof(*&*pslot) *)&(*&*pslot)) = ((typeof(*(item)) *)(item)); } while (0);
}
int __radix_tree_create(struct radix_tree_root *root, unsigned long index,
struct radix_tree_node **nodep, void ***slotp);
int radix_tree_insert(struct radix_tree_root *, unsigned long, void *);
void *__radix_tree_lookup(struct radix_tree_root *root, unsigned long index,
struct radix_tree_node **nodep, void ***slotp);
void *radix_tree_lookup(struct radix_tree_root *, unsigned long);
void **radix_tree_lookup_slot(struct radix_tree_root *, unsigned long);
bool __radix_tree_delete_node(struct radix_tree_root *root,
struct radix_tree_node *node);
void *radix_tree_delete_item(struct radix_tree_root *, unsigned long, void *);
void *radix_tree_delete(struct radix_tree_root *, unsigned long);
unsigned int
radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
unsigned long first_index, unsigned int max_items);
unsigned int radix_tree_gang_lookup_slot(struct radix_tree_root *root,
void ***results, unsigned long *indices,
unsigned long first_index, unsigned int max_items);
int radix_tree_preload(gfp_t gfp_mask);
int radix_tree_maybe_preload(gfp_t gfp_mask);
void radix_tree_init(void);
void *radix_tree_tag_set(struct radix_tree_root *root,
unsigned long index, unsigned int tag);
void *radix_tree_tag_clear(struct radix_tree_root *root,
unsigned long index, unsigned int tag);
int radix_tree_tag_get(struct radix_tree_root *root,
unsigned long index, unsigned int tag);
unsigned int
radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results,
unsigned long first_index, unsigned int max_items,
unsigned int tag);
unsigned int
radix_tree_gang_lookup_tag_slot(struct radix_tree_root *root, void ***results,
unsigned long first_index, unsigned int max_items,
unsigned int tag);
unsigned long radix_tree_range_tag_if_tagged(struct radix_tree_root *root,
unsigned long *first_indexp, unsigned long last_index,
unsigned long nr_to_tag,
unsigned int fromtag, unsigned int totag);
int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag);
unsigned long radix_tree_locate_item(struct radix_tree_root *root, void *item);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void radix_tree_preload_end(void)
{
__asm__ __volatile__("": : :"memory");
}
# 323 "include/linux/radix-tree.h"
struct radix_tree_iter {
unsigned long index;
unsigned long next_index;
unsigned long tags;
};
# 340 "include/linux/radix-tree.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void **
radix_tree_iter_init(struct radix_tree_iter *iter, unsigned long start)
{
# 351 "include/linux/radix-tree.h"
iter->index = 0;
iter->next_index = start;
return ((void *)0);
}
# 369 "include/linux/radix-tree.h"
void **radix_tree_next_chunk(struct radix_tree_root *root,
struct radix_tree_iter *iter, unsigned flags);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) unsigned
radix_tree_chunk_size(struct radix_tree_iter *iter)
{
return iter->next_index - iter->index;
}
# 395 "include/linux/radix-tree.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void **
radix_tree_next_slot(void **slot, struct radix_tree_iter *iter, unsigned flags)
{
if (flags & 0x0100) {
iter->tags >>= 1;
if (__builtin_expect(!!(iter->tags & 1ul), 1)) {
iter->index++;
return slot + 1;
}
if (!(flags & 0x0200) && __builtin_expect(!!(iter->tags), 1)) {
unsigned offset = __ffs(iter->tags);
iter->tags >>= offset;
iter->index += offset + 1;
return slot + offset + 1;
}
} else {
unsigned size = radix_tree_chunk_size(iter) - 1;
while (size--) {
slot++;
iter->index++;
if (__builtin_expect(!!(*slot), 1))
return slot;
if (flags & 0x0200) {
iter->next_index = 0;
break;
}
}
}
return ((void *)0);
}
# 16 "include/linux/fs.h" 2
# 1 "include/linux/rbtree.h" 1
# 35 "include/linux/rbtree.h"
struct rb_node {
unsigned long __rb_parent_color;
struct rb_node *rb_right;
struct rb_node *rb_left;
} __attribute__((aligned(sizeof(long))));
struct rb_root {
struct rb_node *rb_node;
};
# 61 "include/linux/rbtree.h"
extern void rb_insert_color(struct rb_node *, struct rb_root *);
extern void rb_erase(struct rb_node *, struct rb_root *);
extern struct rb_node *rb_next(const struct rb_node *);
extern struct rb_node *rb_prev(const struct rb_node *);
extern struct rb_node *rb_first(const struct rb_root *);
extern struct rb_node *rb_last(const struct rb_root *);
extern struct rb_node *rb_first_postorder(const struct rb_root *);
extern struct rb_node *rb_next_postorder(const struct rb_node *);
extern void rb_replace_node(struct rb_node *victim, struct rb_node *new,
struct rb_root *root);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rb_link_node(struct rb_node * node, struct rb_node * parent,
struct rb_node ** rb_link)
{
node->__rb_parent_color = (unsigned long)parent;
node->rb_left = node->rb_right = ((void *)0);
*rb_link = node;
}
# 17 "include/linux/fs.h" 2
# 1 "include/linux/pid.h" 1
enum pid_type
{
PIDTYPE_PID,
PIDTYPE_PGID,
PIDTYPE_SID,
PIDTYPE_MAX
};
# 50 "include/linux/pid.h"
struct upid {
int nr;
struct pid_namespace *ns;
struct hlist_node pid_chain;
};
struct pid
{
atomic_t count;
unsigned int level;
struct hlist_head tasks[PIDTYPE_MAX];
struct callback_head rcu;
struct upid numbers[1];
};
extern struct pid init_struct_pid;
struct pid_link
{
struct hlist_node node;
struct pid *pid;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct pid *get_pid(struct pid *pid)
{
if (pid)
atomic_add(1, (&pid->count));
return pid;
}
extern void put_pid(struct pid *pid);
extern struct task_struct *pid_task(struct pid *pid, enum pid_type);
extern struct task_struct *get_pid_task(struct pid *pid, enum pid_type);
extern struct pid *get_task_pid(struct task_struct *task, enum pid_type type);
extern void attach_pid(struct task_struct *task, enum pid_type);
extern void detach_pid(struct task_struct *task, enum pid_type);
extern void change_pid(struct task_struct *task, enum pid_type,
struct pid *pid);
extern void transfer_pid(struct task_struct *old, struct task_struct *new,
enum pid_type);
struct pid_namespace;
extern struct pid_namespace init_pid_ns;
# 110 "include/linux/pid.h"
extern struct pid *find_pid_ns(int nr, struct pid_namespace *ns);
extern struct pid *find_vpid(int nr);
extern struct pid *find_get_pid(int nr);
extern struct pid *find_ge_pid(int nr, struct pid_namespace *);
int next_pidmap(struct pid_namespace *pid_ns, unsigned int last);
extern struct pid *alloc_pid(struct pid_namespace *ns);
extern void free_pid(struct pid *pid);
extern void disable_pid_allocation(struct pid_namespace *ns);
# 134 "include/linux/pid.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct pid_namespace *ns_of_pid(struct pid *pid)
{
struct pid_namespace *ns = ((void *)0);
if (pid)
ns = pid->numbers[pid->level].ns;
return ns;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool is_child_reaper(struct pid *pid)
{
return pid->numbers[pid->level].nr == 1;
}
# 164 "include/linux/pid.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t pid_nr(struct pid *pid)
{
pid_t nr = 0;
if (pid)
nr = pid->numbers[0].nr;
return nr;
}
pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns);
pid_t pid_vnr(struct pid *pid);
# 19 "include/linux/fs.h" 2
# 1 "include/linux/capability.h" 1
# 15 "include/linux/capability.h"
# 1 "include/uapi/linux/capability.h" 1
# 18 "include/uapi/linux/capability.h"
struct task_struct;
# 40 "include/uapi/linux/capability.h"
typedef struct __user_cap_header_struct {
__u32 version;
int pid;
} *cap_user_header_t;
typedef struct __user_cap_data_struct {
__u32 effective;
__u32 permitted;
__u32 inheritable;
} *cap_user_data_t;
# 69 "include/uapi/linux/capability.h"
struct vfs_cap_data {
__le32 magic_etc;
struct {
__le32 permitted;
__le32 inheritable;
} data[2];
};
# 16 "include/linux/capability.h" 2
extern int file_caps_enabled;
typedef struct kernel_cap_struct {
__u32 cap[2];
} kernel_cap_t;
struct cpu_vfs_cap_data {
__u32 magic_etc;
kernel_cap_t permitted;
kernel_cap_t inheritable;
};
struct file;
struct inode;
struct dentry;
struct user_namespace;
struct user_namespace *current_user_ns(void);
extern const kernel_cap_t __cap_empty_set;
extern const kernel_cap_t __cap_init_eff_set;
# 117 "include/linux/capability.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) kernel_cap_t cap_combine(const kernel_cap_t a,
const kernel_cap_t b)
{
kernel_cap_t dest;
do { unsigned __capi; for (__capi = 0; __capi < 2; ++__capi) { dest.cap[__capi] = a.cap[__capi] | b.cap[__capi]; } } while (0);
return dest;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) kernel_cap_t cap_intersect(const kernel_cap_t a,
const kernel_cap_t b)
{
kernel_cap_t dest;
do { unsigned __capi; for (__capi = 0; __capi < 2; ++__capi) { dest.cap[__capi] = a.cap[__capi] & b.cap[__capi]; } } while (0);
return dest;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) kernel_cap_t cap_drop(const kernel_cap_t a,
const kernel_cap_t drop)
{
kernel_cap_t dest;
do { unsigned __capi; for (__capi = 0; __capi < 2; ++__capi) { dest.cap[__capi] = a.cap[__capi] &~ drop.cap[__capi]; } } while (0);
return dest;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) kernel_cap_t cap_invert(const kernel_cap_t c)
{
kernel_cap_t dest;
do { unsigned __capi; for (__capi = 0; __capi < 2; ++__capi) { dest.cap[__capi] = ~ c.cap[__capi]; } } while (0);
return dest;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cap_isclear(const kernel_cap_t a)
{
unsigned __capi;
for (__capi = 0; __capi < 2; ++__capi) {
if (a.cap[__capi] != 0)
return 0;
}
return 1;
}
# 165 "include/linux/capability.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cap_issubset(const kernel_cap_t a, const kernel_cap_t set)
{
kernel_cap_t dest;
dest = cap_drop(a, set);
return cap_isclear(dest);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cap_is_fs_cap(int cap)
{
const kernel_cap_t __cap_fs_set = ((kernel_cap_t){{ ((1 << ((0) & 31)) | (1 << ((27) & 31)) | (1 << ((1) & 31)) | (1 << ((2) & 31)) | (1 << ((3) & 31)) | (1 << ((4) & 31))) | (1 << ((9) & 31)), ((1 << ((32) & 31))) } });
return !!((1 << ((cap) & 31)) & __cap_fs_set.cap[((cap) >> 5)]);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) kernel_cap_t cap_drop_fs_set(const kernel_cap_t a)
{
const kernel_cap_t __cap_fs_set = ((kernel_cap_t){{ ((1 << ((0) & 31)) | (1 << ((27) & 31)) | (1 << ((1) & 31)) | (1 << ((2) & 31)) | (1 << ((3) & 31)) | (1 << ((4) & 31))) | (1 << ((9) & 31)), ((1 << ((32) & 31))) } });
return cap_drop(a, __cap_fs_set);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) kernel_cap_t cap_raise_fs_set(const kernel_cap_t a,
const kernel_cap_t permitted)
{
const kernel_cap_t __cap_fs_set = ((kernel_cap_t){{ ((1 << ((0) & 31)) | (1 << ((27) & 31)) | (1 << ((1) & 31)) | (1 << ((2) & 31)) | (1 << ((3) & 31)) | (1 << ((4) & 31))) | (1 << ((9) & 31)), ((1 << ((32) & 31))) } });
return cap_combine(a,
cap_intersect(permitted, __cap_fs_set));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) kernel_cap_t cap_drop_nfsd_set(const kernel_cap_t a)
{
const kernel_cap_t __cap_fs_set = ((kernel_cap_t){{ ((1 << ((0) & 31)) | (1 << ((27) & 31)) | (1 << ((1) & 31)) | (1 << ((2) & 31)) | (1 << ((3) & 31)) | (1 << ((4) & 31))) | (1 << ((24) & 31)), ((1 << ((32) & 31))) } });
return cap_drop(a, __cap_fs_set);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) kernel_cap_t cap_raise_nfsd_set(const kernel_cap_t a,
const kernel_cap_t permitted)
{
const kernel_cap_t __cap_nfsd_set = ((kernel_cap_t){{ ((1 << ((0) & 31)) | (1 << ((27) & 31)) | (1 << ((1) & 31)) | (1 << ((2) & 31)) | (1 << ((3) & 31)) | (1 << ((4) & 31))) | (1 << ((24) & 31)), ((1 << ((32) & 31))) } });
return cap_combine(a,
cap_intersect(permitted, __cap_nfsd_set));
}
extern bool has_capability(struct task_struct *t, int cap);
extern bool has_ns_capability(struct task_struct *t,
struct user_namespace *ns, int cap);
extern bool has_capability_noaudit(struct task_struct *t, int cap);
extern bool has_ns_capability_noaudit(struct task_struct *t,
struct user_namespace *ns, int cap);
extern bool capable(int cap);
extern bool ns_capable(struct user_namespace *ns, int cap);
extern bool capable_wrt_inode_uidgid(const struct inode *inode, int cap);
extern bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap);
extern int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data *cpu_caps);
# 22 "include/linux/fs.h" 2
# 1 "include/linux/semaphore.h" 1
# 16 "include/linux/semaphore.h"
struct semaphore {
raw_spinlock_t lock;
unsigned int count;
struct list_head wait_list;
};
# 35 "include/linux/semaphore.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sema_init(struct semaphore *sem, int val)
{
static struct lock_class_key __key;
*sem = (struct semaphore) { .lock = (raw_spinlock_t) { .raw_lock = { .lock = 0 }, }, .count = val, .wait_list = { &((*sem).wait_list), &((*sem).wait_list) }, };
do { (void)("semaphore->lock"); (void)(&__key); } while (0);
}
extern void down(struct semaphore *sem);
extern int __attribute__((warn_unused_result)) down_interruptible(struct semaphore *sem);
extern int __attribute__((warn_unused_result)) down_killable(struct semaphore *sem);
extern int __attribute__((warn_unused_result)) down_trylock(struct semaphore *sem);
extern int __attribute__((warn_unused_result)) down_timeout(struct semaphore *sem, long jiffies);
extern void up(struct semaphore *sem);
# 23 "include/linux/fs.h" 2
# 1 "./include/uapi/linux/fiemap.h" 1
# 16 "./include/uapi/linux/fiemap.h"
struct fiemap_extent {
__u64 fe_logical;
__u64 fe_physical;
__u64 fe_length;
__u64 fe_reserved64[2];
__u32 fe_flags;
__u32 fe_reserved[3];
};
struct fiemap {
__u64 fm_start;
__u64 fm_length;
__u32 fm_flags;
__u32 fm_mapped_extents;
__u32 fm_extent_count;
__u32 fm_reserved;
struct fiemap_extent fm_extents[0];
};
# 24 "include/linux/fs.h" 2
# 1 "include/linux/shrinker.h" 1
# 11 "include/linux/shrinker.h"
struct shrink_control {
gfp_t gfp_mask;
unsigned long nr_to_scan;
nodemask_t nodes_to_scan;
int nid;
};
# 48 "include/linux/shrinker.h"
struct shrinker {
unsigned long (*count_objects)(struct shrinker *,
struct shrink_control *sc);
unsigned long (*scan_objects)(struct shrinker *,
struct shrink_control *sc);
int seeks;
long batch;
unsigned long flags;
struct list_head list;
atomic_long_t *nr_deferred;
};
extern int register_shrinker(struct shrinker *);
extern void unregister_shrinker(struct shrinker *);
# 27 "include/linux/fs.h" 2
# 1 "include/linux/migrate_mode.h" 1
# 10 "include/linux/migrate_mode.h"
enum migrate_mode {
MIGRATE_ASYNC,
MIGRATE_SYNC_LIGHT,
MIGRATE_SYNC,
};
# 28 "include/linux/fs.h" 2
# 1 "include/linux/percpu-rwsem.h" 1
# 10 "include/linux/percpu-rwsem.h"
struct percpu_rw_semaphore {
unsigned int *fast_read_ctr;
atomic_t write_ctr;
struct rw_semaphore rw_sem;
atomic_t slow_read_ctr;
wait_queue_head_t write_waitq;
};
extern void percpu_down_read(struct percpu_rw_semaphore *);
extern void percpu_up_read(struct percpu_rw_semaphore *);
extern void percpu_down_write(struct percpu_rw_semaphore *);
extern void percpu_up_write(struct percpu_rw_semaphore *);
extern int __percpu_init_rwsem(struct percpu_rw_semaphore *,
const char *, struct lock_class_key *);
extern void percpu_free_rwsem(struct percpu_rw_semaphore *);
# 31 "include/linux/fs.h" 2
# 1 "include/linux/blk_types.h" 1
# 10 "include/linux/blk_types.h"
struct bio_set;
struct bio;
struct bio_integrity_payload;
struct page;
struct block_device;
struct io_context;
struct cgroup_subsys_state;
typedef void (bio_end_io_t) (struct bio *, int);
typedef void (bio_destructor_t) (struct bio *);
struct bio_vec {
struct page *bv_page;
unsigned int bv_len;
unsigned int bv_offset;
};
struct bvec_iter {
sector_t bi_sector;
unsigned int bi_size;
unsigned int bi_idx;
unsigned int bi_bvec_done;
};
struct bio {
struct bio *bi_next;
struct block_device *bi_bdev;
unsigned long bi_flags;
unsigned long bi_rw;
struct bvec_iter bi_iter;
unsigned int bi_phys_segments;
unsigned int bi_seg_front_size;
unsigned int bi_seg_back_size;
atomic_t bi_remaining;
bio_end_io_t *bi_end_io;
void *bi_private;
# 81 "include/linux/blk_types.h"
union {
};
unsigned short bi_vcnt;
unsigned short bi_max_vecs;
atomic_t bi_cnt;
struct bio_vec *bi_io_vec;
struct bio_set *bi_pool;
struct bio_vec bi_inline_vecs[0];
};
# 150 "include/linux/blk_types.h"
enum rq_flag_bits {
__REQ_WRITE,
__REQ_FAILFAST_DEV,
__REQ_FAILFAST_TRANSPORT,
__REQ_FAILFAST_DRIVER,
__REQ_SYNC,
__REQ_META,
__REQ_PRIO,
__REQ_DISCARD,
__REQ_SECURE,
__REQ_WRITE_SAME,
__REQ_NOIDLE,
__REQ_INTEGRITY,
__REQ_FUA,
__REQ_FLUSH,
__REQ_RAHEAD,
__REQ_THROTTLED,
__REQ_SORTED,
__REQ_SOFTBARRIER,
__REQ_NOMERGE,
__REQ_STARTED,
__REQ_DONTPREP,
__REQ_QUEUED,
__REQ_ELVPRIV,
__REQ_FAILED,
__REQ_QUIET,
__REQ_PREEMPT,
__REQ_ALLOCED,
__REQ_COPY_USER,
__REQ_FLUSH_SEQ,
__REQ_IO_STAT,
__REQ_MIXED_MERGE,
__REQ_PM,
__REQ_HASHED,
__REQ_MQ_INFLIGHT,
__REQ_NR_BITS,
};
# 32 "include/linux/fs.h" 2
# 1 "include/uapi/linux/fs.h" 1
# 9 "include/uapi/linux/fs.h"
# 1 "./include/uapi/linux/limits.h" 1
# 10 "include/uapi/linux/fs.h" 2
# 1 "./include/uapi/linux/ioctl.h" 1
# 1 "./arch/mips/include/uapi/asm/ioctl.h" 1
# 25 "./arch/mips/include/uapi/asm/ioctl.h"
# 1 "include/asm-generic/ioctl.h" 1
# 1 "include/uapi/asm-generic/ioctl.h" 1
# 5 "include/asm-generic/ioctl.h" 2
extern unsigned int __invalid_size_argument_for_IOC;
# 26 "./arch/mips/include/uapi/asm/ioctl.h" 2
# 5 "./include/uapi/linux/ioctl.h" 2
# 11 "include/uapi/linux/fs.h" 2
# 42 "include/uapi/linux/fs.h"
struct fstrim_range {
__u64 start;
__u64 len;
__u64 minlen;
};
struct files_stat_struct {
unsigned long nr_files;
unsigned long nr_free_files;
unsigned long max_files;
};
struct inodes_stat_t {
long nr_inodes;
long nr_unused;
long dummy[5];
};
# 35 "include/linux/fs.h" 2
struct export_operations;
struct hd_geometry;
struct iovec;
struct nameidata;
struct kiocb;
struct kobject;
struct pipe_inode_info;
struct poll_table_struct;
struct kstatfs;
struct vm_area_struct;
struct vfsmount;
struct cred;
struct swap_info_struct;
struct seq_file;
struct workqueue_struct;
struct iov_iter;
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) inode_init(void);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) inode_init_early(void);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) files_init(unsigned long);
extern struct files_stat_struct files_stat;
extern unsigned long get_max_files(void);
extern int sysctl_nr_open;
extern struct inodes_stat_t inodes_stat;
extern int leases_enable, lease_break_time;
extern int sysctl_protected_symlinks;
extern int sysctl_protected_hardlinks;
struct buffer_head;
typedef int (get_block_t)(struct inode *inode, sector_t iblock,
struct buffer_head *bh_result, int create);
typedef void (dio_iodone_t)(struct kiocb *iocb, loff_t offset,
ssize_t bytes, void *private);
# 241 "include/linux/fs.h"
struct iattr {
unsigned int ia_valid;
umode_t ia_mode;
kuid_t ia_uid;
kgid_t ia_gid;
loff_t ia_size;
struct timespec ia_atime;
struct timespec ia_mtime;
struct timespec ia_ctime;
struct file *ia_file;
};
# 1 "include/linux/quota.h" 1
# 40 "include/linux/quota.h"
# 1 "include/linux/percpu_counter.h" 1
# 19 "include/linux/percpu_counter.h"
struct percpu_counter {
raw_spinlock_t lock;
s64 count;
s32 *counters;
};
extern int percpu_counter_batch;
int __percpu_counter_init(struct percpu_counter *fbc, s64 amount, gfp_t gfp,
struct lock_class_key *key);
# 40 "include/linux/percpu_counter.h"
void percpu_counter_destroy(struct percpu_counter *fbc);
void percpu_counter_set(struct percpu_counter *fbc, s64 amount);
void __percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch);
s64 __percpu_counter_sum(struct percpu_counter *fbc);
int percpu_counter_compare(struct percpu_counter *fbc, s64 rhs);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void percpu_counter_add(struct percpu_counter *fbc, s64 amount)
{
__percpu_counter_add(fbc, amount, percpu_counter_batch);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 percpu_counter_sum_positive(struct percpu_counter *fbc)
{
s64 ret = __percpu_counter_sum(fbc);
return ret < 0 ? 0 : ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 percpu_counter_sum(struct percpu_counter *fbc)
{
return __percpu_counter_sum(fbc);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 percpu_counter_read(struct percpu_counter *fbc)
{
return fbc->count;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 percpu_counter_read_positive(struct percpu_counter *fbc)
{
s64 ret = fbc->count;
__asm__ __volatile__("": : :"memory");
if (ret >= 0)
return ret;
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int percpu_counter_initialized(struct percpu_counter *fbc)
{
return (fbc->counters != ((void *)0));
}
# 164 "include/linux/percpu_counter.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void percpu_counter_inc(struct percpu_counter *fbc)
{
percpu_counter_add(fbc, 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void percpu_counter_dec(struct percpu_counter *fbc)
{
percpu_counter_add(fbc, -1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void percpu_counter_sub(struct percpu_counter *fbc, s64 amount)
{
percpu_counter_add(fbc, -amount);
}
# 41 "include/linux/quota.h" 2
# 1 "./include/uapi/linux/dqblk_xfs.h" 1
# 51 "./include/uapi/linux/dqblk_xfs.h"
typedef struct fs_disk_quota {
__s8 d_version;
__s8 d_flags;
__u16 d_fieldmask;
__u32 d_id;
__u64 d_blk_hardlimit;
__u64 d_blk_softlimit;
__u64 d_ino_hardlimit;
__u64 d_ino_softlimit;
__u64 d_bcount;
__u64 d_icount;
__s32 d_itimer;
__s32 d_btimer;
__u16 d_iwarns;
__u16 d_bwarns;
__s32 d_padding2;
__u64 d_rtb_hardlimit;
__u64 d_rtb_softlimit;
__u64 d_rtbcount;
__s32 d_rtbtimer;
__u16 d_rtbwarns;
__s16 d_padding3;
char d_padding4[8];
} fs_disk_quota_t;
# 147 "./include/uapi/linux/dqblk_xfs.h"
typedef struct fs_qfilestat {
__u64 qfs_ino;
__u64 qfs_nblks;
__u32 qfs_nextents;
} fs_qfilestat_t;
typedef struct fs_quota_stat {
__s8 qs_version;
__u16 qs_flags;
__s8 qs_pad;
fs_qfilestat_t qs_uquota;
fs_qfilestat_t qs_gquota;
__u32 qs_incoredqs;
__s32 qs_btimelimit;
__s32 qs_itimelimit;
__s32 qs_rtbtimelimit;
__u16 qs_bwarnlimit;
__u16 qs_iwarnlimit;
} fs_quota_stat_t;
# 190 "./include/uapi/linux/dqblk_xfs.h"
struct fs_qfilestatv {
__u64 qfs_ino;
__u64 qfs_nblks;
__u32 qfs_nextents;
__u32 qfs_pad;
};
struct fs_quota_statv {
__s8 qs_version;
__u8 qs_pad1;
__u16 qs_flags;
__u32 qs_incoredqs;
struct fs_qfilestatv qs_uquota;
struct fs_qfilestatv qs_gquota;
struct fs_qfilestatv qs_pquota;
__s32 qs_btimelimit;
__s32 qs_itimelimit;
__s32 qs_rtbtimelimit;
__u16 qs_bwarnlimit;
__u16 qs_iwarnlimit;
__u64 qs_pad2[8];
};
# 43 "include/linux/quota.h" 2
# 1 "include/linux/dqblk_v1.h" 1
# 44 "include/linux/quota.h" 2
# 1 "include/linux/dqblk_v2.h" 1
# 1 "include/linux/dqblk_qtree.h" 1
# 17 "include/linux/dqblk_qtree.h"
struct dquot;
struct qtree_fmt_operations {
void (*mem2disk_dqblk)(void *disk, struct dquot *dquot);
void (*disk2mem_dqblk)(struct dquot *dquot, void *disk);
int (*is_id)(void *disk, struct dquot *dquot);
};
struct qtree_mem_dqinfo {
struct super_block *dqi_sb;
int dqi_type;
unsigned int dqi_blocks;
unsigned int dqi_free_blk;
unsigned int dqi_free_entry;
unsigned int dqi_blocksize_bits;
unsigned int dqi_entry_size;
unsigned int dqi_usable_bs;
unsigned int dqi_qtree_depth;
struct qtree_fmt_operations *dqi_ops;
};
int qtree_write_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot);
int qtree_read_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot);
int qtree_delete_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot);
int qtree_release_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot);
int qtree_entry_unused(struct qtree_mem_dqinfo *info, char *disk);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int qtree_depth(struct qtree_mem_dqinfo *info)
{
unsigned int epb = info->dqi_usable_bs >> 2;
unsigned long long entries = epb;
int i;
for (i = 1; entries < (1ULL << 32); i++)
entries *= epb;
return i;
}
# 9 "include/linux/dqblk_v2.h" 2
# 45 "include/linux/quota.h" 2
# 1 "include/linux/projid.h" 1
# 16 "include/linux/projid.h"
struct user_namespace;
extern struct user_namespace init_user_ns;
typedef __kernel_uid32_t projid_t;
typedef struct {
projid_t val;
} kprojid_t;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) projid_t __kprojid_val(kprojid_t projid)
{
return projid.val;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool projid_eq(kprojid_t left, kprojid_t right)
{
return __kprojid_val(left) == __kprojid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool projid_lt(kprojid_t left, kprojid_t right)
{
return __kprojid_val(left) < __kprojid_val(right);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool projid_valid(kprojid_t projid)
{
return !projid_eq(projid, (kprojid_t){ -1 });
}
extern kprojid_t make_kprojid(struct user_namespace *from, projid_t projid);
extern projid_t from_kprojid(struct user_namespace *to, kprojid_t projid);
extern projid_t from_kprojid_munged(struct user_namespace *to, kprojid_t projid);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool kprojid_has_mapping(struct user_namespace *ns, kprojid_t projid)
{
return from_kprojid(ns, projid) != (projid_t)-1;
}
# 49 "include/linux/quota.h" 2
# 1 "include/uapi/linux/quota.h" 1
# 88 "include/uapi/linux/quota.h"
enum {
QIF_BLIMITS_B = 0,
QIF_SPACE_B,
QIF_ILIMITS_B,
QIF_INODES_B,
QIF_BTIME_B,
QIF_ITIME_B,
};
# 108 "include/uapi/linux/quota.h"
struct if_dqblk {
__u64 dqb_bhardlimit;
__u64 dqb_bsoftlimit;
__u64 dqb_curspace;
__u64 dqb_ihardlimit;
__u64 dqb_isoftlimit;
__u64 dqb_curinodes;
__u64 dqb_btime;
__u64 dqb_itime;
__u32 dqb_valid;
};
# 129 "include/uapi/linux/quota.h"
struct if_dqinfo {
__u64 dqi_bgrace;
__u64 dqi_igrace;
__u32 dqi_flags;
__u32 dqi_valid;
};
# 151 "include/uapi/linux/quota.h"
enum {
QUOTA_NL_C_UNSPEC,
QUOTA_NL_C_WARNING,
__QUOTA_NL_C_MAX,
};
enum {
QUOTA_NL_A_UNSPEC,
QUOTA_NL_A_QTYPE,
QUOTA_NL_A_EXCESS_ID,
QUOTA_NL_A_WARNING,
QUOTA_NL_A_DEV_MAJOR,
QUOTA_NL_A_DEV_MINOR,
QUOTA_NL_A_CAUSED_ID,
__QUOTA_NL_A_MAX,
};
# 50 "include/linux/quota.h" 2
enum quota_type {
USRQUOTA = 0,
GRPQUOTA = 1,
PRJQUOTA = 2,
};
typedef __kernel_uid32_t qid_t;
typedef long long qsize_t;
struct kqid {
union {
kuid_t uid;
kgid_t gid;
kprojid_t projid;
};
enum quota_type type;
};
extern bool qid_eq(struct kqid left, struct kqid right);
extern bool qid_lt(struct kqid left, struct kqid right);
extern qid_t from_kqid(struct user_namespace *to, struct kqid qid);
extern qid_t from_kqid_munged(struct user_namespace *to, struct kqid qid);
extern bool qid_valid(struct kqid qid);
# 91 "include/linux/quota.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kqid make_kqid(struct user_namespace *from,
enum quota_type type, qid_t qid)
{
struct kqid kqid;
kqid.type = type;
switch (type) {
case USRQUOTA:
kqid.uid = make_kuid(from, qid);
break;
case GRPQUOTA:
kqid.gid = make_kgid(from, qid);
break;
case PRJQUOTA:
kqid.projid = make_kprojid(from, qid);
break;
default:
BUG();
}
return kqid;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kqid make_kqid_invalid(enum quota_type type)
{
struct kqid kqid;
kqid.type = type;
switch (type) {
case USRQUOTA:
kqid.uid = (kuid_t){ -1 };
break;
case GRPQUOTA:
kqid.gid = (kgid_t){ -1 };
break;
case PRJQUOTA:
kqid.projid = (kprojid_t){ -1 };
break;
default:
BUG();
}
return kqid;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kqid make_kqid_uid(kuid_t uid)
{
struct kqid kqid;
kqid.type = USRQUOTA;
kqid.uid = uid;
return kqid;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kqid make_kqid_gid(kgid_t gid)
{
struct kqid kqid;
kqid.type = GRPQUOTA;
kqid.gid = gid;
return kqid;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kqid make_kqid_projid(kprojid_t projid)
{
struct kqid kqid;
kqid.type = PRJQUOTA;
kqid.projid = projid;
return kqid;
}
extern spinlock_t dq_data_lock;
# 189 "include/linux/quota.h"
struct mem_dqblk {
qsize_t dqb_bhardlimit;
qsize_t dqb_bsoftlimit;
qsize_t dqb_curspace;
qsize_t dqb_rsvspace;
qsize_t dqb_ihardlimit;
qsize_t dqb_isoftlimit;
qsize_t dqb_curinodes;
time_t dqb_btime;
time_t dqb_itime;
};
struct quota_format_type;
struct mem_dqinfo {
struct quota_format_type *dqi_format;
int dqi_fmt_id;
struct list_head dqi_dirty_list;
unsigned long dqi_flags;
unsigned int dqi_bgrace;
unsigned int dqi_igrace;
qsize_t dqi_max_spc_limit;
qsize_t dqi_max_ino_limit;
void *dqi_priv;
};
struct super_block;
# 229 "include/linux/quota.h"
extern void mark_info_dirty(struct super_block *sb, int type);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int info_dirty(struct mem_dqinfo *info)
{
return test_bit(31, &info->dqi_flags);
}
enum {
DQST_LOOKUPS,
DQST_DROPS,
DQST_READS,
DQST_WRITES,
DQST_CACHE_HITS,
DQST_ALLOC_DQUOTS,
DQST_FREE_DQUOTS,
DQST_SYNCS,
_DQST_DQSTAT_LAST
};
struct dqstats {
int stat[_DQST_DQSTAT_LAST];
struct percpu_counter counter[_DQST_DQSTAT_LAST];
};
extern struct dqstats *dqstats_pcpu;
extern struct dqstats dqstats;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dqstats_inc(unsigned int type)
{
percpu_counter_inc(&dqstats.counter[type]);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dqstats_dec(unsigned int type)
{
percpu_counter_dec(&dqstats.counter[type]);
}
# 277 "include/linux/quota.h"
struct dquot {
struct hlist_node dq_hash;
struct list_head dq_inuse;
struct list_head dq_free;
struct list_head dq_dirty;
struct mutex dq_lock;
atomic_t dq_count;
wait_queue_head_t dq_wait_unused;
struct super_block *dq_sb;
struct kqid dq_id;
loff_t dq_off;
unsigned long dq_flags;
struct mem_dqblk dq_dqb;
};
struct quota_format_ops {
int (*check_quota_file)(struct super_block *sb, int type);
int (*read_file_info)(struct super_block *sb, int type);
int (*write_file_info)(struct super_block *sb, int type);
int (*free_file_info)(struct super_block *sb, int type);
int (*read_dqblk)(struct dquot *dquot);
int (*commit_dqblk)(struct dquot *dquot);
int (*release_dqblk)(struct dquot *dquot);
};
struct dquot_operations {
int (*write_dquot) (struct dquot *);
struct dquot *(*alloc_dquot)(struct super_block *, int);
void (*destroy_dquot)(struct dquot *);
int (*acquire_dquot) (struct dquot *);
int (*release_dquot) (struct dquot *);
int (*mark_dirty) (struct dquot *);
int (*write_info) (struct super_block *, int);
qsize_t *(*get_reserved_space) (struct inode *);
};
struct path;
struct qc_dqblk {
int d_fieldmask;
u64 d_spc_hardlimit;
u64 d_spc_softlimit;
u64 d_ino_hardlimit;
u64 d_ino_softlimit;
u64 d_space;
u64 d_ino_count;
s64 d_ino_timer;
s64 d_spc_timer;
int d_ino_warns;
int d_spc_warns;
u64 d_rt_spc_hardlimit;
u64 d_rt_spc_softlimit;
u64 d_rt_space;
s64 d_rt_spc_timer;
int d_rt_spc_warns;
};
# 363 "include/linux/quota.h"
struct quotactl_ops {
int (*quota_on)(struct super_block *, int, int, struct path *);
int (*quota_on_meta)(struct super_block *, int, int);
int (*quota_off)(struct super_block *, int);
int (*quota_sync)(struct super_block *, int);
int (*get_info)(struct super_block *, int, struct if_dqinfo *);
int (*set_info)(struct super_block *, int, struct if_dqinfo *);
int (*get_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
int (*set_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
int (*get_xstate)(struct super_block *, struct fs_quota_stat *);
int (*set_xstate)(struct super_block *, unsigned int, int);
int (*get_xstatev)(struct super_block *, struct fs_quota_statv *);
int (*rm_xquota)(struct super_block *, unsigned int);
};
struct quota_format_type {
int qf_fmt_id;
const struct quota_format_ops *qf_ops;
struct module *qf_owner;
struct quota_format_type *qf_next;
};
enum {
_DQUOT_USAGE_ENABLED = 0,
_DQUOT_LIMITS_ENABLED,
_DQUOT_SUSPENDED,
_DQUOT_STATE_FLAGS
};
# 411 "include/linux/quota.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int dquot_state_flag(unsigned int flags, int type)
{
return flags << _DQUOT_STATE_FLAGS * type;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int dquot_generic_flag(unsigned int flags, int type)
{
return (flags >> _DQUOT_STATE_FLAGS * type) & ((1 << _DQUOT_USAGE_ENABLED) | (1 << _DQUOT_LIMITS_ENABLED) | (1 << _DQUOT_SUSPENDED));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void quota_send_warning(struct kqid qid, dev_t dev,
const char warntype)
{
return;
}
struct quota_info {
unsigned int flags;
struct mutex dqio_mutex;
struct mutex dqonoff_mutex;
struct inode *files[2];
struct mem_dqinfo info[2];
const struct quota_format_ops *ops[2];
};
int register_quota_format(struct quota_format_type *fmt);
void unregister_quota_format(struct quota_format_type *fmt);
struct quota_module_name {
int qm_fmt_id;
char *qm_mod_name;
};
# 263 "include/linux/fs.h" 2
# 296 "include/linux/fs.h"
enum positive_aop_returns {
AOP_WRITEPAGE_ACTIVATE = 0x80000,
AOP_TRUNCATED_PAGE = 0x80001,
};
# 310 "include/linux/fs.h"
struct page;
struct address_space;
struct writeback_control;
# 323 "include/linux/fs.h"
typedef struct {
size_t written;
size_t count;
union {
char *buf;
void *data;
} arg;
int error;
} read_descriptor_t;
typedef int (*read_actor_t)(read_descriptor_t *, struct page *,
unsigned long, unsigned long);
struct address_space_operations {
int (*writepage)(struct page *page, struct writeback_control *wbc);
int (*readpage)(struct file *, struct page *);
int (*writepages)(struct address_space *, struct writeback_control *);
int (*set_page_dirty)(struct page *page);
int (*readpages)(struct file *filp, struct address_space *mapping,
struct list_head *pages, unsigned nr_pages);
int (*write_begin)(struct file *, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata);
int (*write_end)(struct file *, struct address_space *mapping,
loff_t pos, unsigned len, unsigned copied,
struct page *page, void *fsdata);
sector_t (*bmap)(struct address_space *, sector_t);
void (*invalidatepage) (struct page *, unsigned int, unsigned int);
int (*releasepage) (struct page *, gfp_t);
void (*freepage)(struct page *);
ssize_t (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset);
int (*get_xip_mem)(struct address_space *, unsigned long, int,
void **, unsigned long *);
int (*migratepage) (struct address_space *,
struct page *, struct page *, enum migrate_mode);
int (*launder_page) (struct page *);
int (*is_partially_uptodate) (struct page *, unsigned long,
unsigned long);
void (*is_dirty_writeback) (struct page *, bool *, bool *);
int (*error_remove_page)(struct address_space *, struct page *);
int (*swap_activate)(struct swap_info_struct *sis, struct file *file,
sector_t *span);
void (*swap_deactivate)(struct file *file);
};
extern const struct address_space_operations empty_aops;
int pagecache_write_begin(struct file *, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata);
int pagecache_write_end(struct file *, struct address_space *mapping,
loff_t pos, unsigned len, unsigned copied,
struct page *page, void *fsdata);
struct backing_dev_info;
struct address_space {
struct inode *host;
struct radix_tree_root page_tree;
spinlock_t tree_lock;
atomic_t i_mmap_writable;
struct rb_root i_mmap;
struct list_head i_mmap_nonlinear;
struct mutex i_mmap_mutex;
unsigned long nrpages;
unsigned long nrshadows;
unsigned long writeback_index;
const struct address_space_operations *a_ops;
unsigned long flags;
struct backing_dev_info *backing_dev_info;
spinlock_t private_lock;
struct list_head private_list;
void *private_data;
} __attribute__((aligned(sizeof(long))));
struct request_queue;
struct block_device {
dev_t bd_dev;
int bd_openers;
struct inode * bd_inode;
struct super_block * bd_super;
struct mutex bd_mutex;
struct list_head bd_inodes;
void * bd_claiming;
void * bd_holder;
int bd_holders;
bool bd_write_holder;
struct list_head bd_holder_disks;
struct block_device * bd_contains;
unsigned bd_block_size;
struct hd_struct * bd_part;
unsigned bd_part_count;
int bd_invalidated;
struct gendisk * bd_disk;
struct request_queue * bd_queue;
struct list_head bd_list;
unsigned long bd_private;
int bd_fsfreeze_count;
struct mutex bd_fsfreeze_mutex;
};
# 468 "include/linux/fs.h"
int mapping_tagged(struct address_space *mapping, int tag);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int mapping_mapped(struct address_space *mapping)
{
return !((&mapping->i_mmap)->rb_node == ((void *)0)) ||
!list_empty(&mapping->i_mmap_nonlinear);
}
# 488 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int mapping_writably_mapped(struct address_space *mapping)
{
return (*(volatile typeof((&mapping->i_mmap_writable)->counter) *)&((&mapping->i_mmap_writable)->counter)) > 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int mapping_map_writable(struct address_space *mapping)
{
return atomic_inc_unless_negative(&mapping->i_mmap_writable) ?
0 : -1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void mapping_unmap_writable(struct address_space *mapping)
{
atomic_sub(1, (&mapping->i_mmap_writable));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int mapping_deny_writable(struct address_space *mapping)
{
return atomic_dec_unless_positive(&mapping->i_mmap_writable) ?
0 : -16;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void mapping_allow_writable(struct address_space *mapping)
{
atomic_add(1, (&mapping->i_mmap_writable));
}
# 526 "include/linux/fs.h"
struct posix_acl;
# 538 "include/linux/fs.h"
struct inode {
umode_t i_mode;
unsigned short i_opflags;
kuid_t i_uid;
kgid_t i_gid;
unsigned int i_flags;
struct posix_acl *i_acl;
struct posix_acl *i_default_acl;
const struct inode_operations *i_op;
struct super_block *i_sb;
struct address_space *i_mapping;
void *i_security;
unsigned long i_ino;
union {
const unsigned int i_nlink;
unsigned int __i_nlink;
};
dev_t i_rdev;
loff_t i_size;
struct timespec i_atime;
struct timespec i_mtime;
struct timespec i_ctime;
spinlock_t i_lock;
unsigned short i_bytes;
unsigned int i_blkbits;
blkcnt_t i_blocks;
seqcount_t i_size_seqcount;
unsigned long i_state;
struct mutex i_mutex;
unsigned long dirtied_when;
struct hlist_node i_hash;
struct list_head i_wb_list;
struct list_head i_lru;
struct list_head i_sb_list;
union {
struct hlist_head i_dentry;
struct callback_head i_rcu;
};
u64 i_version;
atomic_t i_count;
atomic_t i_dio_count;
atomic_t i_writecount;
const struct file_operations *i_fop;
struct file_lock *i_flock;
struct address_space i_data;
struct list_head i_devices;
union {
struct pipe_inode_info *i_pipe;
struct block_device *i_bdev;
struct cdev *i_cdev;
};
__u32 i_generation;
__u32 i_fsnotify_mask;
struct hlist_head i_fsnotify_marks;
void *i_private;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int inode_unhashed(struct inode *inode)
{
return hlist_unhashed(&inode->i_hash);
}
# 650 "include/linux/fs.h"
enum inode_i_mutex_lock_class
{
I_MUTEX_NORMAL,
I_MUTEX_PARENT,
I_MUTEX_CHILD,
I_MUTEX_XATTR,
I_MUTEX_NONDIR2,
I_MUTEX_PARENT2,
};
void lock_two_nondirectories(struct inode *, struct inode*);
void unlock_two_nondirectories(struct inode *, struct inode*);
# 673 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) loff_t i_size_read(const struct inode *inode)
{
loff_t i_size;
unsigned int seq;
do {
seq = read_seqcount_begin(&inode->i_size_seqcount);
i_size = inode->i_size;
} while (read_seqcount_retry(&inode->i_size_seqcount, seq));
return i_size;
# 694 "include/linux/fs.h"
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void i_size_write(struct inode *inode, loff_t i_size)
{
__asm__ __volatile__("": : :"memory");
write_seqcount_begin(&inode->i_size_seqcount);
inode->i_size = i_size;
write_seqcount_end(&inode->i_size_seqcount);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) uid_t i_uid_read(const struct inode *inode)
{
return from_kuid(&init_user_ns, inode->i_uid);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) gid_t i_gid_read(const struct inode *inode)
{
return from_kgid(&init_user_ns, inode->i_gid);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void i_uid_write(struct inode *inode, uid_t uid)
{
inode->i_uid = make_kuid(&init_user_ns, uid);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void i_gid_write(struct inode *inode, gid_t gid)
{
inode->i_gid = make_kgid(&init_user_ns, gid);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned iminor(const struct inode *inode)
{
return ((unsigned int) ((inode->i_rdev) & ((1U << 20) - 1)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned imajor(const struct inode *inode)
{
return ((unsigned int) ((inode->i_rdev) >> 20));
}
extern struct block_device *I_BDEV(struct inode *inode);
struct fown_struct {
rwlock_t lock;
struct pid *pid;
enum pid_type pid_type;
kuid_t uid, euid;
int signum;
};
struct file_ra_state {
unsigned long start;
unsigned int size;
unsigned int async_size;
unsigned int ra_pages;
unsigned int mmap_miss;
loff_t prev_pos;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int ra_has_index(struct file_ra_state *ra, unsigned long index)
{
return (index >= ra->start &&
index < ra->start + ra->size);
}
struct file {
union {
struct llist_node fu_llist;
struct callback_head fu_rcuhead;
} f_u;
struct path f_path;
struct inode *f_inode;
const struct file_operations *f_op;
spinlock_t f_lock;
atomic_long_t f_count;
unsigned int f_flags;
fmode_t f_mode;
struct mutex f_pos_lock;
loff_t f_pos;
struct fown_struct f_owner;
const struct cred *f_cred;
struct file_ra_state f_ra;
u64 f_version;
void *f_security;
void *private_data;
struct list_head f_ep_links;
struct list_head f_tfile_llink;
struct address_space *f_mapping;
} __attribute__((aligned(4)));
struct file_handle {
__u32 handle_bytes;
int handle_type;
unsigned char f_handle[0];
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct file *get_file(struct file *f)
{
atomic_long_inc(&f->f_count);
return f;
}
# 869 "include/linux/fs.h"
typedef void *fl_owner_t;
struct file_lock_operations {
void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
void (*fl_release_private)(struct file_lock *);
};
struct lock_manager_operations {
int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
unsigned long (*lm_owner_key)(struct file_lock *);
void (*lm_get_owner)(struct file_lock *, struct file_lock *);
void (*lm_put_owner)(struct file_lock *);
void (*lm_notify)(struct file_lock *);
int (*lm_grant)(struct file_lock *, int);
bool (*lm_break)(struct file_lock *);
int (*lm_change)(struct file_lock **, int, struct list_head *);
void (*lm_setup)(struct file_lock *, void **);
};
struct lock_manager {
struct list_head list;
};
struct net;
void locks_start_grace(struct net *, struct lock_manager *);
void locks_end_grace(struct lock_manager *);
int locks_in_grace(struct net *);
# 1 "include/linux/nfs_fs_i.h" 1
struct nlm_lockowner;
struct nfs_lock_info {
u32 state;
struct nlm_lockowner *owner;
struct list_head list;
};
struct nfs4_lock_state;
struct nfs4_lock_info {
struct nfs4_lock_state *owner;
};
# 899 "include/linux/fs.h" 2
# 918 "include/linux/fs.h"
struct file_lock {
struct file_lock *fl_next;
struct hlist_node fl_link;
struct list_head fl_block;
fl_owner_t fl_owner;
unsigned int fl_flags;
unsigned char fl_type;
unsigned int fl_pid;
int fl_link_cpu;
struct pid *fl_nspid;
wait_queue_head_t fl_wait;
struct file *fl_file;
loff_t fl_start;
loff_t fl_end;
struct fasync_struct * fl_fasync;
unsigned long fl_break_time;
unsigned long fl_downgrade_time;
const struct file_lock_operations *fl_ops;
const struct lock_manager_operations *fl_lmops;
union {
struct nfs_lock_info nfs_fl;
struct nfs4_lock_info nfs4_fl;
struct {
struct list_head link;
int state;
} afs;
} fl_u;
};
# 957 "include/linux/fs.h"
# 1 "include/linux/fcntl.h" 1
# 1 "include/uapi/linux/fcntl.h" 1
# 1 "./arch/mips/include/uapi/asm/fcntl.h" 1
# 63 "./arch/mips/include/uapi/asm/fcntl.h"
struct flock {
short l_type;
short l_whence;
__kernel_off_t l_start;
__kernel_off_t l_len;
long l_sysid;
__kernel_pid_t l_pid;
long pad[4];
};
# 1 "./include/uapi/asm-generic/fcntl.h" 1
# 155 "./include/uapi/asm-generic/fcntl.h"
struct f_owner_ex {
int type;
__kernel_pid_t pid;
};
# 210 "./include/uapi/asm-generic/fcntl.h"
struct flock64 {
short l_type;
short l_whence;
__kernel_loff_t l_start;
__kernel_loff_t l_len;
__kernel_pid_t l_pid;
};
# 78 "./arch/mips/include/uapi/asm/fcntl.h" 2
# 5 "include/uapi/linux/fcntl.h" 2
# 5 "include/linux/fcntl.h" 2
# 958 "include/linux/fs.h" 2
extern void send_sigio(struct fown_struct *fown, int fd, int band);
extern int fcntl_getlk(struct file *, unsigned int, struct flock *);
extern int fcntl_setlk(unsigned int, struct file *, unsigned int,
struct flock *);
extern int fcntl_getlk64(struct file *, unsigned int, struct flock64 *);
extern int fcntl_setlk64(unsigned int, struct file *, unsigned int,
struct flock64 *);
extern int fcntl_setlease(unsigned int fd, struct file *filp, long arg);
extern int fcntl_getlease(struct file *filp);
void locks_free_lock(struct file_lock *fl);
extern void locks_init_lock(struct file_lock *);
extern struct file_lock * locks_alloc_lock(void);
extern void locks_copy_lock(struct file_lock *, struct file_lock *);
extern void locks_copy_conflock(struct file_lock *, struct file_lock *);
extern void locks_remove_posix(struct file *, fl_owner_t);
extern void locks_remove_file(struct file *);
extern void locks_release_private(struct file_lock *);
extern void posix_test_lock(struct file *, struct file_lock *);
extern int posix_lock_file(struct file *, struct file_lock *, struct file_lock *);
extern int posix_lock_file_wait(struct file *, struct file_lock *);
extern int posix_unblock_lock(struct file_lock *);
extern int vfs_test_lock(struct file *, struct file_lock *);
extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *);
extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl);
extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl);
extern int __break_lease(struct inode *inode, unsigned int flags, unsigned int type);
extern void lease_get_mtime(struct inode *, struct timespec *time);
extern int generic_setlease(struct file *, long, struct file_lock **, void **priv);
extern int vfs_setlease(struct file *, long, struct file_lock **, void **);
extern int lease_modify(struct file_lock **, int, struct list_head *);
# 1131 "include/linux/fs.h"
struct fasync_struct {
spinlock_t fa_lock;
int magic;
int fa_fd;
struct fasync_struct *fa_next;
struct file *fa_file;
struct callback_head fa_rcu;
};
extern int fasync_helper(int, struct file *, int, struct fasync_struct **);
extern struct fasync_struct *fasync_insert_entry(int, struct file *, struct fasync_struct **, struct fasync_struct *);
extern int fasync_remove_entry(struct file *, struct fasync_struct **);
extern struct fasync_struct *fasync_alloc(void);
extern void fasync_free(struct fasync_struct *);
extern void kill_fasync(struct fasync_struct **, int, int);
extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
extern void f_setown(struct file *filp, unsigned long arg, int force);
extern void f_delown(struct file *filp);
extern pid_t f_getown(struct file *filp);
extern int send_sigurg(struct fown_struct *fown);
struct mm_struct;
# 1170 "include/linux/fs.h"
extern struct list_head super_blocks;
extern spinlock_t sb_lock;
enum {
SB_UNFROZEN = 0,
SB_FREEZE_WRITE = 1,
SB_FREEZE_PAGEFAULT = 2,
SB_FREEZE_FS = 3,
SB_FREEZE_COMPLETE = 4,
};
struct sb_writers {
struct percpu_counter counter[(SB_FREEZE_COMPLETE - 1)];
wait_queue_head_t wait;
int frozen;
wait_queue_head_t wait_unfrozen;
};
struct super_block {
struct list_head s_list;
dev_t s_dev;
unsigned char s_blocksize_bits;
unsigned long s_blocksize;
loff_t s_maxbytes;
struct file_system_type *s_type;
const struct super_operations *s_op;
const struct dquot_operations *dq_op;
const struct quotactl_ops *s_qcop;
const struct export_operations *s_export_op;
unsigned long s_flags;
unsigned long s_magic;
struct dentry *s_root;
struct rw_semaphore s_umount;
int s_count;
atomic_t s_active;
void *s_security;
const struct xattr_handler **s_xattr;
struct list_head s_inodes;
struct hlist_bl_head s_anon;
struct list_head s_mounts;
struct block_device *s_bdev;
struct backing_dev_info *s_bdi;
struct mtd_info *s_mtd;
struct hlist_node s_instances;
struct quota_info s_dquot;
struct sb_writers s_writers;
char s_id[32];
u8 s_uuid[16];
void *s_fs_info;
unsigned int s_max_links;
fmode_t s_mode;
u32 s_time_gran;
struct mutex s_vfs_rename_mutex;
char *s_subtype;
char *s_options;
const struct dentry_operations *s_d_op;
int cleancache_poolid;
struct shrinker s_shrink;
atomic_long_t s_remove_count;
int s_readonly_remount;
struct workqueue_struct *s_dio_done_wq;
struct hlist_head s_pins;
struct list_lru s_dentry_lru __attribute__((__aligned__((1 << 5))));
struct list_lru s_inode_lru __attribute__((__aligned__((1 << 5))));
struct callback_head rcu;
int s_stack_depth;
};
extern struct timespec current_fs_time(struct super_block *sb);
void __sb_end_write(struct super_block *sb, int level);
int __sb_start_write(struct super_block *sb, int level, bool wait);
# 1308 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sb_end_write(struct super_block *sb)
{
__sb_end_write(sb, SB_FREEZE_WRITE);
}
# 1320 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sb_end_pagefault(struct super_block *sb)
{
__sb_end_write(sb, SB_FREEZE_PAGEFAULT);
}
# 1332 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sb_end_intwrite(struct super_block *sb)
{
__sb_end_write(sb, SB_FREEZE_FS);
}
# 1356 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sb_start_write(struct super_block *sb)
{
__sb_start_write(sb, SB_FREEZE_WRITE, true);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int sb_start_write_trylock(struct super_block *sb)
{
return __sb_start_write(sb, SB_FREEZE_WRITE, false);
}
# 1385 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sb_start_pagefault(struct super_block *sb)
{
__sb_start_write(sb, SB_FREEZE_PAGEFAULT, true);
}
# 1403 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sb_start_intwrite(struct super_block *sb)
{
__sb_start_write(sb, SB_FREEZE_FS, true);
}
extern bool inode_owner_or_capable(const struct inode *inode);
extern int vfs_create(struct inode *, struct dentry *, umode_t, bool);
extern int vfs_mkdir(struct inode *, struct dentry *, umode_t);
extern int vfs_mknod(struct inode *, struct dentry *, umode_t, dev_t);
extern int vfs_symlink(struct inode *, struct dentry *, const char *);
extern int vfs_link(struct dentry *, struct inode *, struct dentry *, struct inode **);
extern int vfs_rmdir(struct inode *, struct dentry *);
extern int vfs_unlink(struct inode *, struct dentry *, struct inode **);
extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *, struct inode **, unsigned int);
extern int vfs_whiteout(struct inode *, struct dentry *);
extern void dentry_unhash(struct dentry *dentry);
extern void inode_init_owner(struct inode *inode, const struct inode *dir,
umode_t mode);
struct fiemap_extent_info {
unsigned int fi_flags;
unsigned int fi_extents_mapped;
unsigned int fi_extents_max;
struct fiemap_extent *fi_extents_start;
};
int fiemap_fill_next_extent(struct fiemap_extent_info *info, u64 logical,
u64 phys, u64 len, u32 flags);
int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
# 1470 "include/linux/fs.h"
typedef int (*filldir_t)(void *, const char *, int, loff_t, u64, unsigned);
struct dir_context {
const filldir_t actor;
loff_t pos;
};
struct block_device_operations;
struct iov_iter;
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
int (*iterate) (struct file *, struct dir_context *);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *, fl_owner_t id);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, loff_t, loff_t, int datasync);
int (*aio_fsync) (struct kiocb *, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
int (*check_flags)(int);
int (*flock) (struct file *, int, struct file_lock *);
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
int (*setlease)(struct file *, long, struct file_lock **, void **);
long (*fallocate)(struct file *file, int mode, loff_t offset,
loff_t len);
int (*show_fdinfo)(struct seq_file *m, struct file *f);
};
struct inode_operations {
struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
void * (*follow_link) (struct dentry *, struct nameidata *);
int (*permission) (struct inode *, int);
struct posix_acl * (*get_acl)(struct inode *, int);
int (*readlink) (struct dentry *, char *,int);
void (*put_link) (struct dentry *, struct nameidata *, void *);
int (*create) (struct inode *,struct dentry *, umode_t, bool);
int (*link) (struct dentry *,struct inode *,struct dentry *);
int (*unlink) (struct inode *,struct dentry *);
int (*symlink) (struct inode *,struct dentry *,const char *);
int (*mkdir) (struct inode *,struct dentry *,umode_t);
int (*rmdir) (struct inode *,struct dentry *);
int (*mknod) (struct inode *,struct dentry *,umode_t,dev_t);
int (*rename) (struct inode *, struct dentry *,
struct inode *, struct dentry *);
int (*rename2) (struct inode *, struct dentry *,
struct inode *, struct dentry *, unsigned int);
int (*setattr) (struct dentry *, struct iattr *);
int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
ssize_t (*listxattr) (struct dentry *, char *, size_t);
int (*removexattr) (struct dentry *, const char *);
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
u64 len);
int (*update_time)(struct inode *, struct timespec *, int);
int (*atomic_open)(struct inode *, struct dentry *,
struct file *, unsigned open_flag,
umode_t create_mode, int *opened);
int (*tmpfile) (struct inode *, struct dentry *, umode_t);
int (*set_acl)(struct inode *, struct posix_acl *, int);
int (*dentry_open)(struct dentry *, struct file *, const struct cred *);
} __attribute__((__aligned__((1 << 5))));
ssize_t rw_copy_check_uvector(int type, const struct iovec * uvector,
unsigned long nr_segs, unsigned long fast_segs,
struct iovec *fast_pointer,
struct iovec **ret_pointer);
extern ssize_t vfs_read(struct file *, char *, size_t, loff_t *);
extern ssize_t vfs_write(struct file *, const char *, size_t, loff_t *);
extern ssize_t vfs_readv(struct file *, const struct iovec *,
unsigned long, loff_t *);
extern ssize_t vfs_writev(struct file *, const struct iovec *,
unsigned long, loff_t *);
struct super_operations {
struct inode *(*alloc_inode)(struct super_block *sb);
void (*destroy_inode)(struct inode *);
void (*dirty_inode) (struct inode *, int flags);
int (*write_inode) (struct inode *, struct writeback_control *wbc);
int (*drop_inode) (struct inode *);
void (*evict_inode) (struct inode *);
void (*put_super) (struct super_block *);
int (*sync_fs)(struct super_block *sb, int wait);
int (*freeze_fs) (struct super_block *);
int (*unfreeze_fs) (struct super_block *);
int (*statfs) (struct dentry *, struct kstatfs *);
int (*remount_fs) (struct super_block *, int *, char *);
void (*umount_begin) (struct super_block *);
int (*show_options)(struct seq_file *, struct dentry *);
int (*show_devname)(struct seq_file *, struct dentry *);
int (*show_path)(struct seq_file *, struct dentry *);
int (*show_stats)(struct seq_file *, struct dentry *);
int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
long (*nr_cached_objects)(struct super_block *, int);
long (*free_cached_objects)(struct super_block *, long, int);
};
# 1726 "include/linux/fs.h"
extern void __mark_inode_dirty(struct inode *, int);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void mark_inode_dirty(struct inode *inode)
{
__mark_inode_dirty(inode, ((1 << 0) | (1 << 1) | (1 << 2)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void mark_inode_dirty_sync(struct inode *inode)
{
__mark_inode_dirty(inode, (1 << 0));
}
extern void inc_nlink(struct inode *inode);
extern void drop_nlink(struct inode *inode);
extern void clear_nlink(struct inode *inode);
extern void set_nlink(struct inode *inode, unsigned int nlink);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void inode_inc_link_count(struct inode *inode)
{
inc_nlink(inode);
mark_inode_dirty(inode);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void inode_dec_link_count(struct inode *inode)
{
drop_nlink(inode);
mark_inode_dirty(inode);
}
# 1762 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void inode_inc_iversion(struct inode *inode)
{
spin_lock(&inode->i_lock);
inode->i_version++;
spin_unlock(&inode->i_lock);
}
enum file_time_flags {
S_ATIME = 1,
S_MTIME = 2,
S_CTIME = 4,
S_VERSION = 8,
};
extern void touch_atime(const struct path *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void file_accessed(struct file *file)
{
if (!(file->f_flags & 01000000))
touch_atime(&file->f_path);
}
int sync_inode(struct inode *inode, struct writeback_control *wbc);
int sync_inode_metadata(struct inode *inode, int wait);
struct file_system_type {
const char *name;
int fs_flags;
struct dentry *(*mount) (struct file_system_type *, int,
const char *, void *);
void (*kill_sb) (struct super_block *);
struct module *owner;
struct file_system_type * next;
struct hlist_head fs_supers;
struct lock_class_key s_lock_key;
struct lock_class_key s_umount_key;
struct lock_class_key s_vfs_rename_key;
struct lock_class_key s_writers_key[(SB_FREEZE_COMPLETE - 1)];
struct lock_class_key i_lock_key;
struct lock_class_key i_mutex_key;
struct lock_class_key i_mutex_dir_key;
};
extern struct dentry *mount_ns(struct file_system_type *fs_type, int flags,
void *data, int (*fill_super)(struct super_block *, void *, int));
extern struct dentry *mount_bdev(struct file_system_type *fs_type,
int flags, const char *dev_name, void *data,
int (*fill_super)(struct super_block *, void *, int));
extern struct dentry *mount_single(struct file_system_type *fs_type,
int flags, void *data,
int (*fill_super)(struct super_block *, void *, int));
extern struct dentry *mount_nodev(struct file_system_type *fs_type,
int flags, void *data,
int (*fill_super)(struct super_block *, void *, int));
extern struct dentry *mount_subtree(struct vfsmount *mnt, const char *path);
void generic_shutdown_super(struct super_block *sb);
void kill_block_super(struct super_block *sb);
void kill_anon_super(struct super_block *sb);
void kill_litter_super(struct super_block *sb);
void deactivate_super(struct super_block *sb);
void deactivate_locked_super(struct super_block *sb);
int set_anon_super(struct super_block *s, void *data);
int get_anon_bdev(dev_t *);
void free_anon_bdev(dev_t);
struct super_block *sget(struct file_system_type *type,
int (*test)(struct super_block *,void *),
int (*set)(struct super_block *,void *),
int flags, void *data);
extern struct dentry *mount_pseudo(struct file_system_type *, char *,
const struct super_operations *ops,
const struct dentry_operations *dops,
unsigned long);
# 1862 "include/linux/fs.h"
extern int register_filesystem(struct file_system_type *);
extern int unregister_filesystem(struct file_system_type *);
extern struct vfsmount *kern_mount_data(struct file_system_type *, void *data);
extern void kern_unmount(struct vfsmount *mnt);
extern int may_umount_tree(struct vfsmount *);
extern int may_umount(struct vfsmount *);
extern long do_mount(const char *, const char *,
const char *, unsigned long, void *);
extern struct vfsmount *collect_mounts(struct path *);
extern void drop_collected_mounts(struct vfsmount *);
extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *,
struct vfsmount *);
extern int vfs_statfs(struct path *, struct kstatfs *);
extern int user_statfs(const char *, struct kstatfs *);
extern int fd_statfs(int, struct kstatfs *);
extern int vfs_ustat(dev_t, struct kstatfs *);
extern int freeze_super(struct super_block *super);
extern int thaw_super(struct super_block *super);
extern bool our_mnt(struct vfsmount *mnt);
extern int current_umask(void);
extern void ihold(struct inode * inode);
extern void iput(struct inode *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct inode *file_inode(const struct file *f)
{
return f->f_inode;
}
extern struct kobject *fs_kobj;
extern int locks_mandatory_locked(struct file *);
extern int locks_mandatory_area(int, struct inode *, struct file *, loff_t, size_t);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __mandatory_lock(struct inode *ino)
{
return (ino->i_mode & (0002000 | 00010)) == 0002000;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int mandatory_lock(struct inode *ino)
{
return ((ino)->i_sb->s_flags & (64)) && __mandatory_lock(ino);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int locks_verify_locked(struct file *file)
{
if (mandatory_lock(file_inode(file)))
return locks_mandatory_locked(file);
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int locks_verify_truncate(struct inode *inode,
struct file *filp,
loff_t size)
{
if (inode->i_flock && mandatory_lock(inode))
return locks_mandatory_area(
2, inode, filp,
size < inode->i_size ? size : inode->i_size,
(size < inode->i_size ? inode->i_size - size
: size - inode->i_size)
);
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int break_lease(struct inode *inode, unsigned int mode)
{
__asm__ __volatile__("": : :"memory");
if (inode->i_flock)
return __break_lease(inode, mode, 32);
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int break_deleg(struct inode *inode, unsigned int mode)
{
__asm__ __volatile__("": : :"memory");
if (inode->i_flock)
return __break_lease(inode, mode, 4);
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int try_break_deleg(struct inode *inode, struct inode **delegated_inode)
{
int ret;
ret = break_deleg(inode, 00000001|0x0080);
if (ret == -11 && delegated_inode) {
*delegated_inode = inode;
ihold(inode);
}
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int break_deleg_wait(struct inode **delegated_inode)
{
int ret;
ret = break_deleg(*delegated_inode, 00000001);
iput(*delegated_inode);
*delegated_inode = ((void *)0);
return ret;
}
# 2052 "include/linux/fs.h"
struct audit_names;
struct filename {
const char *name;
const char *uptr;
struct audit_names *aname;
bool separate;
};
extern long vfs_truncate(struct path *, loff_t);
extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs,
struct file *filp);
extern int do_fallocate(struct file *file, int mode, loff_t offset,
loff_t len);
extern long do_sys_open(int dfd, const char *filename, int flags,
umode_t mode);
extern struct file *file_open_name(struct filename *, int, umode_t);
extern struct file *filp_open(const char *, int, umode_t);
extern struct file *file_open_root(struct dentry *, struct vfsmount *,
const char *, int);
extern int vfs_open(const struct path *, struct file *, const struct cred *);
extern struct file * dentry_open(const struct path *, int, const struct cred *);
extern int filp_close(struct file *, fl_owner_t id);
extern struct filename *getname(const char *);
extern struct filename *getname_kernel(const char *);
enum {
FILE_CREATED = 1,
FILE_OPENED = 2
};
extern int finish_open(struct file *file, struct dentry *dentry,
int (*open)(struct inode *, struct file *),
int *opened);
extern int finish_no_open(struct file *file, struct dentry *dentry);
extern int ioctl_preallocate(struct file *filp, void *argp);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) vfs_caches_init_early(void);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) vfs_caches_init(unsigned long);
extern struct kmem_cache *names_cachep;
extern void final_putname(struct filename *name);
# 2108 "include/linux/fs.h"
extern int register_blkdev(unsigned int, const char *);
extern void unregister_blkdev(unsigned int, const char *);
extern struct block_device *bdget(dev_t);
extern struct block_device *bdgrab(struct block_device *bdev);
extern void bd_set_size(struct block_device *, loff_t size);
extern void bd_forget(struct inode *inode);
extern void bdput(struct block_device *);
extern void invalidate_bdev(struct block_device *);
extern void iterate_bdevs(void (*)(struct block_device *, void *), void *);
extern int sync_blockdev(struct block_device *bdev);
extern void kill_bdev(struct block_device *);
extern struct super_block *freeze_bdev(struct block_device *);
extern void emergency_thaw_all(void);
extern int thaw_bdev(struct block_device *bdev, struct super_block *sb);
extern int fsync_bdev(struct block_device *);
extern int sb_is_blkdev_sb(struct super_block *sb);
# 2149 "include/linux/fs.h"
extern int sync_filesystem(struct super_block *);
extern const struct file_operations def_blk_fops;
extern const struct file_operations def_chr_fops;
extern const struct file_operations bad_sock_fops;
extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);
extern int blkdev_ioctl(struct block_device *, fmode_t, unsigned, unsigned long);
extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);
extern int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder);
extern struct block_device *blkdev_get_by_path(const char *path, fmode_t mode,
void *holder);
extern struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode,
void *holder);
extern void blkdev_put(struct block_device *bdev, fmode_t mode);
extern int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk);
extern void bd_unlink_disk_holder(struct block_device *bdev,
struct gendisk *disk);
# 2182 "include/linux/fs.h"
extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
extern int register_chrdev_region(dev_t, unsigned, const char *);
extern int __register_chrdev(unsigned int major, unsigned int baseminor,
unsigned int count, const char *name,
const struct file_operations *fops);
extern void __unregister_chrdev(unsigned int major, unsigned int baseminor,
unsigned int count, const char *name);
extern void unregister_chrdev_region(dev_t, unsigned);
extern void chrdev_show(struct seq_file *,off_t);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int register_chrdev(unsigned int major, const char *name,
const struct file_operations *fops)
{
return __register_chrdev(major, 0, 256, name, fops);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void unregister_chrdev(unsigned int major, const char *name)
{
__unregister_chrdev(major, 0, 256, name);
}
extern const char *__bdevname(dev_t, char *buffer);
extern const char *bdevname(struct block_device *bdev, char *buffer);
extern struct block_device *lookup_bdev(const char *);
extern void blkdev_show(struct seq_file *,off_t);
extern void init_special_inode(struct inode *, umode_t, dev_t);
extern void make_bad_inode(struct inode *);
extern int is_bad_inode(struct inode *);
# 2235 "include/linux/fs.h"
extern void check_disk_size_change(struct gendisk *disk,
struct block_device *bdev);
extern int revalidate_disk(struct gendisk *);
extern int check_disk_change(struct block_device *);
extern int __invalidate_device(struct block_device *, bool);
extern int invalidate_partition(struct gendisk *, int);
unsigned long invalidate_mapping_pages(struct address_space *mapping,
unsigned long start, unsigned long end);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void invalidate_remote_inode(struct inode *inode)
{
if ((((inode->i_mode) & 00170000) == 0100000) || (((inode->i_mode) & 00170000) == 0040000) ||
(((inode->i_mode) & 00170000) == 0120000))
invalidate_mapping_pages(inode->i_mapping, 0, -1);
}
extern int invalidate_inode_pages2(struct address_space *mapping);
extern int invalidate_inode_pages2_range(struct address_space *mapping,
unsigned long start, unsigned long end);
extern int write_inode_now(struct inode *, int);
extern int filemap_fdatawrite(struct address_space *);
extern int filemap_flush(struct address_space *);
extern int filemap_fdatawait(struct address_space *);
extern int filemap_fdatawait_range(struct address_space *, loff_t lstart,
loff_t lend);
extern int filemap_write_and_wait(struct address_space *mapping);
extern int filemap_write_and_wait_range(struct address_space *mapping,
loff_t lstart, loff_t lend);
extern int __filemap_fdatawrite_range(struct address_space *mapping,
loff_t start, loff_t end, int sync_mode);
extern int filemap_fdatawrite_range(struct address_space *mapping,
loff_t start, loff_t end);
extern int vfs_fsync_range(struct file *file, loff_t start, loff_t end,
int datasync);
extern int vfs_fsync(struct file *file, int datasync);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int generic_write_sync(struct file *file, loff_t pos, loff_t count)
{
if (!(file->f_flags & 0x0010) && !(((file->f_mapping->host)->i_sb->s_flags & (16)) || ((file->f_mapping->host)->i_flags & 1)))
return 0;
return vfs_fsync_range(file, pos, pos + count - 1,
(file->f_flags & 0x4000) ? 0 : 1);
}
extern void emergency_sync(void);
extern void emergency_remount(void);
extern sector_t bmap(struct inode *, sector_t);
extern int notify_change(struct dentry *, struct iattr *, struct inode **);
extern int inode_permission(struct inode *, int);
extern int __inode_permission(struct inode *, int);
extern int generic_permission(struct inode *, int);
extern int __check_sticky(struct inode *dir, struct inode *inode);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool execute_ok(struct inode *inode)
{
return (inode->i_mode & (00100|00010|00001)) || (((inode->i_mode) & 00170000) == 0040000);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void file_start_write(struct file *file)
{
if (!(((file_inode(file)->i_mode) & 00170000) == 0100000))
return;
__sb_start_write(file_inode(file)->i_sb, SB_FREEZE_WRITE, true);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool file_start_write_trylock(struct file *file)
{
if (!(((file_inode(file)->i_mode) & 00170000) == 0100000))
return true;
return __sb_start_write(file_inode(file)->i_sb, SB_FREEZE_WRITE, false);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void file_end_write(struct file *file)
{
if (!(((file_inode(file)->i_mode) & 00170000) == 0100000))
return;
__sb_end_write(file_inode(file)->i_sb, SB_FREEZE_WRITE);
}
# 2331 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int get_write_access(struct inode *inode)
{
return atomic_inc_unless_negative(&inode->i_writecount) ? 0 : -26;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int deny_write_access(struct file *file)
{
struct inode *inode = file_inode(file);
return atomic_dec_unless_positive(&inode->i_writecount) ? 0 : -26;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void put_write_access(struct inode * inode)
{
atomic_sub(1, (&inode->i_writecount));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void allow_write_access(struct file *file)
{
if (file)
atomic_add(1, (&file_inode(file)->i_writecount));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool inode_is_open_for_write(const struct inode *inode)
{
return (*(volatile typeof((&inode->i_writecount)->counter) *)&((&inode->i_writecount)->counter)) > 0;
}
# 2365 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void i_readcount_dec(struct inode *inode)
{
return;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void i_readcount_inc(struct inode *inode)
{
return;
}
extern int do_pipe_flags(int *, int);
extern int kernel_read(struct file *, loff_t, char *, unsigned long);
extern ssize_t kernel_write(struct file *, const char *, size_t, loff_t);
extern ssize_t __kernel_write(struct file *, const char *, size_t, loff_t *);
extern struct file * open_exec(const char *);
extern int is_subdir(struct dentry *, struct dentry *);
extern int path_is_under(struct path *, struct path *);
# 1 "include/linux/err.h" 1
# 23 "include/linux/err.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void * __attribute__((warn_unused_result)) ERR_PTR(long error)
{
return (void *) error;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long __attribute__((warn_unused_result)) PTR_ERR( const void *ptr)
{
return (long) ptr;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __attribute__((warn_unused_result)) IS_ERR( const void *ptr)
{
return __builtin_expect(!!(((unsigned long)ptr) >= (unsigned long)-4095), 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __attribute__((warn_unused_result)) IS_ERR_OR_NULL( const void *ptr)
{
return !ptr || __builtin_expect(!!(((unsigned long)ptr) >= (unsigned long)-4095), 0);
}
# 50 "include/linux/err.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void * __attribute__((warn_unused_result)) ERR_CAST( const void *ptr)
{
return (void *) ptr;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) PTR_ERR_OR_ZERO( const void *ptr)
{
if (IS_ERR(ptr))
return PTR_ERR(ptr);
else
return 0;
}
# 2386 "include/linux/fs.h" 2
extern loff_t default_llseek(struct file *file, loff_t offset, int whence);
extern loff_t vfs_llseek(struct file *file, loff_t offset, int whence);
extern int inode_init_always(struct super_block *, struct inode *);
extern void inode_init_once(struct inode *);
extern void address_space_init_once(struct address_space *mapping);
extern struct inode * igrab(struct inode *);
extern ino_t iunique(struct super_block *, ino_t);
extern int inode_needs_sync(struct inode *inode);
extern int generic_delete_inode(struct inode *inode);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int generic_drop_inode(struct inode *inode)
{
return !inode->i_nlink || inode_unhashed(inode);
}
extern struct inode *ilookup5_nowait(struct super_block *sb,
unsigned long hashval, int (*test)(struct inode *, void *),
void *data);
extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval,
int (*test)(struct inode *, void *), void *data);
extern struct inode *ilookup(struct super_block *sb, unsigned long ino);
extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *);
extern struct inode * iget_locked(struct super_block *, unsigned long);
extern int insert_inode_locked4(struct inode *, unsigned long, int (*test)(struct inode *, void *), void *);
extern int insert_inode_locked(struct inode *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void lockdep_annotate_inode_mutex_key(struct inode *inode) { };
extern void unlock_new_inode(struct inode *);
extern unsigned int get_next_ino(void);
extern void __iget(struct inode * inode);
extern void iget_failed(struct inode *);
extern void clear_inode(struct inode *);
extern void __destroy_inode(struct inode *);
extern struct inode *new_inode_pseudo(struct super_block *sb);
extern struct inode *new_inode(struct super_block *sb);
extern void free_inode_nonrcu(struct inode *inode);
extern int should_remove_suid(struct dentry *);
extern int file_remove_suid(struct file *);
extern void __insert_inode_hash(struct inode *, unsigned long hashval);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void insert_inode_hash(struct inode *inode)
{
__insert_inode_hash(inode, inode->i_ino);
}
extern void __remove_inode_hash(struct inode *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void remove_inode_hash(struct inode *inode)
{
if (!inode_unhashed(inode))
__remove_inode_hash(inode);
}
extern void inode_sb_list_add(struct inode *inode);
extern void submit_bio(int, struct bio *);
extern int bdev_read_only(struct block_device *);
extern int set_blocksize(struct block_device *, int);
extern int sb_set_blocksize(struct super_block *, int);
extern int sb_min_blocksize(struct super_block *, int);
extern int generic_file_mmap(struct file *, struct vm_area_struct *);
extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);
extern int generic_file_remap_pages(struct vm_area_struct *, unsigned long addr,
unsigned long size, unsigned long pgoff);
int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk);
extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *);
extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *);
extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *);
extern ssize_t generic_file_direct_write(struct kiocb *, struct iov_iter *, loff_t);
extern ssize_t generic_perform_write(struct file *, struct iov_iter *, loff_t);
extern ssize_t do_sync_read(struct file *filp, char *buf, size_t len, loff_t *ppos);
extern ssize_t do_sync_write(struct file *filp, const char *buf, size_t len, loff_t *ppos);
extern ssize_t new_sync_read(struct file *filp, char *buf, size_t len, loff_t *ppos);
extern ssize_t new_sync_write(struct file *filp, const char *buf, size_t len, loff_t *ppos);
extern ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to);
extern ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from);
extern int blkdev_fsync(struct file *filp, loff_t start, loff_t end,
int datasync);
extern void block_sync_page(struct page *page);
extern ssize_t generic_file_splice_read(struct file *, loff_t *,
struct pipe_inode_info *, size_t, unsigned int);
extern ssize_t default_file_splice_read(struct file *, loff_t *,
struct pipe_inode_info *, size_t, unsigned int);
extern ssize_t iter_file_splice_write(struct pipe_inode_info *,
struct file *, loff_t *, size_t, unsigned int);
extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
struct file *out, loff_t *, size_t len, unsigned int flags);
extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
loff_t *opos, size_t len, unsigned int flags);
extern void
file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
extern loff_t noop_llseek(struct file *file, loff_t offset, int whence);
extern loff_t no_llseek(struct file *file, loff_t offset, int whence);
extern loff_t vfs_setpos(struct file *file, loff_t offset, loff_t maxsize);
extern loff_t generic_file_llseek(struct file *file, loff_t offset, int whence);
extern loff_t generic_file_llseek_size(struct file *file, loff_t offset,
int whence, loff_t maxsize, loff_t eof);
extern loff_t fixed_size_llseek(struct file *file, loff_t offset,
int whence, loff_t size);
extern int generic_file_open(struct inode * inode, struct file * filp);
extern int nonseekable_open(struct inode * inode, struct file * filp);
extern ssize_t xip_file_read(struct file *filp, char *buf, size_t len,
loff_t *ppos);
extern int xip_file_mmap(struct file * file, struct vm_area_struct * vma);
extern ssize_t xip_file_write(struct file *filp, const char *buf,
size_t len, loff_t *ppos);
extern int xip_truncate_page(struct address_space *mapping, loff_t from);
# 2519 "include/linux/fs.h"
typedef void (dio_submit_t)(int rw, struct bio *bio, struct inode *inode,
loff_t file_offset);
enum {
DIO_LOCKING = 0x01,
DIO_SKIP_HOLES = 0x02,
DIO_ASYNC_EXTEND = 0x04,
};
void dio_end_io(struct bio *bio, int error);
ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
struct block_device *bdev, struct iov_iter *iter, loff_t offset,
get_block_t get_block, dio_iodone_t end_io,
dio_submit_t submit_io, int flags);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb,
struct inode *inode, struct iov_iter *iter, loff_t offset,
get_block_t get_block)
{
return __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iter,
offset, get_block, ((void *)0), ((void *)0),
DIO_LOCKING | DIO_SKIP_HOLES);
}
void inode_dio_wait(struct inode *inode);
void inode_dio_done(struct inode *inode);
extern void inode_set_flags(struct inode *inode, unsigned int flags,
unsigned int mask);
extern const struct file_operations generic_ro_fops;
extern int readlink_copy(char *, int, const char *);
extern int page_readlink(struct dentry *, char *, int);
extern void *page_follow_link_light(struct dentry *, struct nameidata *);
extern void page_put_link(struct dentry *, struct nameidata *, void *);
extern int __page_symlink(struct inode *inode, const char *symname, int len,
int nofs);
extern int page_symlink(struct inode *inode, const char *symname, int len);
extern const struct inode_operations page_symlink_inode_operations;
extern void kfree_put_link(struct dentry *, struct nameidata *, void *);
extern int generic_readlink(struct dentry *, char *, int);
extern void generic_fillattr(struct inode *, struct kstat *);
int vfs_getattr_nosec(struct path *path, struct kstat *stat);
extern int vfs_getattr(struct path *, struct kstat *);
void __inode_add_bytes(struct inode *inode, loff_t bytes);
void inode_add_bytes(struct inode *inode, loff_t bytes);
void __inode_sub_bytes(struct inode *inode, loff_t bytes);
void inode_sub_bytes(struct inode *inode, loff_t bytes);
loff_t inode_get_bytes(struct inode *inode);
void inode_set_bytes(struct inode *inode, loff_t bytes);
extern int vfs_readdir(struct file *, filldir_t, void *);
extern int iterate_dir(struct file *, struct dir_context *);
extern int vfs_stat(const char *, struct kstat *);
extern int vfs_lstat(const char *, struct kstat *);
extern int vfs_fstat(unsigned int, struct kstat *);
extern int vfs_fstatat(int , const char *, struct kstat *, int);
extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
unsigned long arg);
extern int __generic_block_fiemap(struct inode *inode,
struct fiemap_extent_info *fieinfo,
loff_t start, loff_t len,
get_block_t *get_block);
extern int generic_block_fiemap(struct inode *inode,
struct fiemap_extent_info *fieinfo, u64 start,
u64 len, get_block_t *get_block);
extern void get_filesystem(struct file_system_type *fs);
extern void put_filesystem(struct file_system_type *fs);
extern struct file_system_type *get_fs_type(const char *name);
extern struct super_block *get_super(struct block_device *);
extern struct super_block *get_super_thawed(struct block_device *);
extern struct super_block *get_active_super(struct block_device *bdev);
extern void drop_super(struct super_block *sb);
extern void iterate_supers(void (*)(struct super_block *, void *), void *);
extern void iterate_supers_type(struct file_system_type *,
void (*)(struct super_block *, void *), void *);
extern int dcache_dir_open(struct inode *, struct file *);
extern int dcache_dir_close(struct inode *, struct file *);
extern loff_t dcache_dir_lseek(struct file *, loff_t, int);
extern int dcache_readdir(struct file *, struct dir_context *);
extern int simple_setattr(struct dentry *, struct iattr *);
extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *);
extern int simple_statfs(struct dentry *, struct kstatfs *);
extern int simple_open(struct inode *inode, struct file *file);
extern int simple_link(struct dentry *, struct inode *, struct dentry *);
extern int simple_unlink(struct inode *, struct dentry *);
extern int simple_rmdir(struct inode *, struct dentry *);
extern int simple_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
extern int noop_fsync(struct file *, loff_t, loff_t, int);
extern int simple_empty(struct dentry *);
extern int simple_readpage(struct file *file, struct page *page);
extern int simple_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata);
extern int simple_write_end(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned copied,
struct page *page, void *fsdata);
extern int always_delete_dentry(const struct dentry *);
extern struct inode *alloc_anon_inode(struct super_block *);
extern int simple_nosetlease(struct file *, long, struct file_lock **, void **);
extern const struct dentry_operations simple_dentry_operations;
extern struct dentry *simple_lookup(struct inode *, struct dentry *, unsigned int flags);
extern ssize_t generic_read_dir(struct file *, char *, size_t, loff_t *);
extern const struct file_operations simple_dir_operations;
extern const struct inode_operations simple_dir_inode_operations;
struct tree_descr { char *name; const struct file_operations *ops; int mode; };
struct dentry *d_alloc_name(struct dentry *, const char *);
extern int simple_fill_super(struct super_block *, unsigned long, struct tree_descr *);
extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count);
extern void simple_release_fs(struct vfsmount **mount, int *count);
extern ssize_t simple_read_from_buffer(void *to, size_t count,
loff_t *ppos, const void *from, size_t available);
extern ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos,
const void *from, size_t count);
extern int __generic_file_fsync(struct file *, loff_t, loff_t, int);
extern int generic_file_fsync(struct file *, loff_t, loff_t, int);
extern int generic_check_addressable(unsigned, u64);
extern int buffer_migrate_page(struct address_space *,
struct page *, struct page *,
enum migrate_mode);
extern int inode_change_ok(const struct inode *, struct iattr *);
extern int inode_newsize_ok(const struct inode *, loff_t offset);
extern void setattr_copy(struct inode *inode, const struct iattr *attr);
extern int file_update_time(struct file *file);
extern int generic_show_options(struct seq_file *m, struct dentry *root);
extern void save_mount_options(struct super_block *sb, char *options);
extern void replace_mount_options(struct super_block *sb, char *options);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ino_t parent_ino(struct dentry *dentry)
{
ino_t res;
spin_lock(&dentry->d_lockref.lock);
res = dentry->d_parent->d_inode->i_ino;
spin_unlock(&dentry->d_lockref.lock);
return res;
}
struct simple_transaction_argresp {
ssize_t size;
char data[0];
};
char *simple_transaction_get(struct file *file, const char *buf,
size_t size);
ssize_t simple_transaction_read(struct file *file, char *buf,
size_t size, loff_t *pos);
int simple_transaction_release(struct inode *inode, struct file *file);
void simple_transaction_set(struct file *file, size_t n);
# 2739 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((format(printf, 1, 2)))
void __simple_attr_check_format(const char *fmt, ...)
{
}
int simple_attr_open(struct inode *inode, struct file *file,
int (*get)(void *, u64 *), int (*set)(void *, u64),
const char *fmt);
int simple_attr_release(struct inode *inode, struct file *file);
ssize_t simple_attr_read(struct file *file, char *buf,
size_t len, loff_t *ppos);
ssize_t simple_attr_write(struct file *file, const char *buf,
size_t len, loff_t *ppos);
struct ctl_table;
int proc_nr_files(struct ctl_table *table, int write,
void *buffer, size_t *lenp, loff_t *ppos);
int proc_nr_dentry(struct ctl_table *table, int write,
void *buffer, size_t *lenp, loff_t *ppos);
int proc_nr_inodes(struct ctl_table *table, int write,
void *buffer, size_t *lenp, loff_t *ppos);
int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) get_filesystem_list(char *buf);
# 2770 "include/linux/fs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_sxid(umode_t mode)
{
return (mode & 0004000) || ((mode & 0002000) && (mode & 00010));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int check_sticky(struct inode *dir, struct inode *inode)
{
if (!(dir->i_mode & 0001000))
return 0;
return __check_sticky(dir, inode);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void inode_has_no_xattr(struct inode *inode)
{
if (!is_sxid(inode->i_mode) && (inode->i_sb->s_flags & (1<<28)))
inode->i_flags |= 4096;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dir_emit(struct dir_context *ctx,
const char *name, int namelen,
u64 ino, unsigned type)
{
return ctx->actor(ctx, name, namelen, ctx->pos, ino, type) == 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dir_emit_dot(struct file *file, struct dir_context *ctx)
{
return ctx->actor(ctx, ".", 1, ctx->pos,
file->f_path.dentry->d_inode->i_ino, 4) == 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dir_emit_dotdot(struct file *file, struct dir_context *ctx)
{
return ctx->actor(ctx, "..", 2, ctx->pos,
parent_ino(file->f_path.dentry), 4) == 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dir_emit_dots(struct file *file, struct dir_context *ctx)
{
if (ctx->pos == 0) {
if (!dir_emit_dot(file, ctx))
return false;
ctx->pos = 1;
}
if (ctx->pos == 1) {
if (!dir_emit_dotdot(file, ctx))
return false;
ctx->pos = 2;
}
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dir_relax(struct inode *inode)
{
mutex_unlock(&inode->i_mutex);
mutex_lock(&inode->i_mutex);
return !((inode)->i_flags & 16);
}
# 9 "include/linux/proc_fs.h" 2
# 1 "include/linux/proc_ns.h" 1
struct pid_namespace;
struct nsproxy;
struct proc_ns_operations {
const char *name;
int type;
void *(*get)(struct task_struct *task);
void (*put)(void *ns);
int (*install)(struct nsproxy *nsproxy, void *ns);
unsigned int (*inum)(void *ns);
};
struct proc_ns {
void *ns;
const struct proc_ns_operations *ns_ops;
};
extern const struct proc_ns_operations netns_operations;
extern const struct proc_ns_operations utsns_operations;
extern const struct proc_ns_operations ipcns_operations;
extern const struct proc_ns_operations pidns_operations;
extern const struct proc_ns_operations userns_operations;
extern const struct proc_ns_operations mntns_operations;
enum {
PROC_ROOT_INO = 1,
PROC_IPC_INIT_INO = 0xEFFFFFFFU,
PROC_UTS_INIT_INO = 0xEFFFFFFEU,
PROC_USER_INIT_INO = 0xEFFFFFFDU,
PROC_PID_INIT_INO = 0xEFFFFFFCU,
};
extern int pid_ns_prepare_proc(struct pid_namespace *ns);
extern void pid_ns_release_proc(struct pid_namespace *ns);
extern struct file *proc_ns_fget(int fd);
extern struct proc_ns *get_proc_ns(struct inode *);
extern int proc_alloc_inum(unsigned int *pino);
extern void proc_free_inum(unsigned int inum);
extern bool proc_ns_inode(struct inode *inode);
# 11 "include/linux/proc_fs.h" 2
typedef int (read_proc_t)(char *page, char **start, off_t off,
int count, int *eof, void *data);
typedef int (write_proc_t)(struct file *file, const char *buffer,
unsigned long count, void *data);
struct proc_dir_entry {
unsigned int low_ino;
umode_t mode;
nlink_t nlink;
kuid_t uid;
kgid_t gid;
loff_t size;
const struct inode_operations *proc_iops;
const struct file_operations *proc_fops;
struct proc_dir_entry *next, *parent, *subdir;
void *data;
read_proc_t *read_proc;
write_proc_t *write_proc;
int pde_users;
atomic_t count;
atomic_t in_use;
struct completion *pde_unload_completion;
struct list_head pde_openers;
spinlock_t pde_unload_lock;
u8 namelen;
char name[];
};
union proc_op {
int (*proc_get_link)(struct dentry *, struct path *);
int (*proc_read)(struct task_struct *task, char *page);
int (*proc_show)(struct seq_file *m,
struct pid_namespace *ns, struct pid *pid,
struct task_struct *task);
};
struct proc_inode {
struct pid *pid;
int fd;
union proc_op op;
struct proc_dir_entry *pde;
struct ctl_table_header *sysctl;
struct ctl_table *sysctl_entry;
struct proc_ns ns;
struct inode vfs_inode;
};
struct proc_dir_entry;
extern void proc_root_init(void);
extern void proc_flush_task(struct task_struct *);
extern struct proc_dir_entry *proc_symlink(const char *,
struct proc_dir_entry *, const char *);
extern struct proc_dir_entry *proc_mkdir(const char *, struct proc_dir_entry *);
extern struct proc_dir_entry *proc_mkdir_data(const char *, umode_t,
struct proc_dir_entry *, void *);
extern struct proc_dir_entry *proc_mkdir_mode(const char *, umode_t,
struct proc_dir_entry *);
extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
struct proc_dir_entry *,
const struct file_operations *,
void *);
extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,
struct proc_dir_entry *parent);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct proc_dir_entry *proc_create(
const char *name, umode_t mode, struct proc_dir_entry *parent,
const struct file_operations *proc_fops)
{
return proc_create_data(name, mode, parent, proc_fops, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct proc_dir_entry *create_proc_read_entry(const char *name,
mode_t mode, struct proc_dir_entry *base,
read_proc_t *read_proc, void * data)
{
struct proc_dir_entry *res=create_proc_entry(name,mode,base);
if (res) {
res->read_proc=read_proc;
res->data=data;
}
return res;
}
extern void proc_set_size(struct proc_dir_entry *, loff_t);
extern void proc_set_user(struct proc_dir_entry *, kuid_t, kgid_t);
extern void *PDE_DATA(const struct inode *);
extern void *proc_get_parent_data(const struct inode *);
extern void proc_remove(struct proc_dir_entry *);
extern void remove_proc_entry(const char *, struct proc_dir_entry *);
extern int remove_proc_subtree(const char *, struct proc_dir_entry *);
# 141 "include/linux/proc_fs.h"
struct net;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct proc_dir_entry *proc_net_mkdir(
struct net *net, const char *name, struct proc_dir_entry *parent)
{
return proc_mkdir_data(name, 0, parent, net);
}
# 6 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "include/linux/module.h" 1
# 13 "include/linux/module.h"
# 1 "include/linux/kmod.h" 1
# 27 "include/linux/kmod.h"
# 1 "include/linux/sysctl.h" 1
# 28 "include/linux/sysctl.h"
# 1 "include/uapi/linux/sysctl.h" 1
# 29 "include/uapi/linux/sysctl.h"
struct completion;
struct __sysctl_args {
int *name;
int nlen;
void *oldval;
size_t *oldlenp;
void *newval;
size_t newlen;
unsigned long __unused[4];
};
enum
{
CTL_KERN=1,
CTL_VM=2,
CTL_NET=3,
CTL_PROC=4,
CTL_FS=5,
CTL_DEBUG=6,
CTL_DEV=7,
CTL_BUS=8,
CTL_ABI=9,
CTL_CPU=10,
CTL_ARLAN=254,
CTL_S390DBF=5677,
CTL_SUNRPC=7249,
CTL_PM=9899,
CTL_FRV=9898,
};
enum
{
CTL_BUS_ISA=1
};
enum
{
INOTIFY_MAX_USER_INSTANCES=1,
INOTIFY_MAX_USER_WATCHES=2,
INOTIFY_MAX_QUEUED_EVENTS=3
};
enum
{
KERN_OSTYPE=1,
KERN_OSRELEASE=2,
KERN_OSREV=3,
KERN_VERSION=4,
KERN_SECUREMASK=5,
KERN_PROF=6,
KERN_NODENAME=7,
KERN_DOMAINNAME=8,
KERN_PANIC=15,
KERN_REALROOTDEV=16,
KERN_SPARC_REBOOT=21,
KERN_CTLALTDEL=22,
KERN_PRINTK=23,
KERN_NAMETRANS=24,
KERN_PPC_HTABRECLAIM=25,
KERN_PPC_ZEROPAGED=26,
KERN_PPC_POWERSAVE_NAP=27,
KERN_MODPROBE=28,
KERN_SG_BIG_BUFF=29,
KERN_ACCT=30,
KERN_PPC_L2CR=31,
KERN_RTSIGNR=32,
KERN_RTSIGMAX=33,
KERN_SHMMAX=34,
KERN_MSGMAX=35,
KERN_MSGMNB=36,
KERN_MSGPOOL=37,
KERN_SYSRQ=38,
KERN_MAX_THREADS=39,
KERN_RANDOM=40,
KERN_SHMALL=41,
KERN_MSGMNI=42,
KERN_SEM=43,
KERN_SPARC_STOP_A=44,
KERN_SHMMNI=45,
KERN_OVERFLOWUID=46,
KERN_OVERFLOWGID=47,
KERN_SHMPATH=48,
KERN_HOTPLUG=49,
KERN_IEEE_EMULATION_WARNINGS=50,
KERN_S390_USER_DEBUG_LOGGING=51,
KERN_CORE_USES_PID=52,
KERN_TAINTED=53,
KERN_CADPID=54,
KERN_PIDMAX=55,
KERN_CORE_PATTERN=56,
KERN_PANIC_ON_OOPS=57,
KERN_HPPA_PWRSW=58,
KERN_HPPA_UNALIGNED=59,
KERN_PRINTK_RATELIMIT=60,
KERN_PRINTK_RATELIMIT_BURST=61,
KERN_PTY=62,
KERN_NGROUPS_MAX=63,
KERN_SPARC_SCONS_PWROFF=64,
KERN_HZ_TIMER=65,
KERN_UNKNOWN_NMI_PANIC=66,
KERN_BOOTLOADER_TYPE=67,
KERN_RANDOMIZE=68,
KERN_SETUID_DUMPABLE=69,
KERN_SPIN_RETRY=70,
KERN_ACPI_VIDEO_FLAGS=71,
KERN_IA64_UNALIGNED=72,
KERN_COMPAT_LOG=73,
KERN_MAX_LOCK_DEPTH=74,
KERN_NMI_WATCHDOG=75,
KERN_PANIC_ON_NMI=76,
};
enum
{
VM_UNUSED1=1,
VM_UNUSED2=2,
VM_UNUSED3=3,
VM_UNUSED4=4,
VM_OVERCOMMIT_MEMORY=5,
VM_UNUSED5=6,
VM_UNUSED7=7,
VM_UNUSED8=8,
VM_UNUSED9=9,
VM_PAGE_CLUSTER=10,
VM_DIRTY_BACKGROUND=11,
VM_DIRTY_RATIO=12,
VM_DIRTY_WB_CS=13,
VM_DIRTY_EXPIRE_CS=14,
VM_NR_PDFLUSH_THREADS=15,
VM_OVERCOMMIT_RATIO=16,
VM_PAGEBUF=17,
VM_HUGETLB_PAGES=18,
VM_SWAPPINESS=19,
VM_LOWMEM_RESERVE_RATIO=20,
VM_MIN_FREE_KBYTES=21,
VM_MAX_MAP_COUNT=22,
VM_LAPTOP_MODE=23,
VM_BLOCK_DUMP=24,
VM_HUGETLB_GROUP=25,
VM_VFS_CACHE_PRESSURE=26,
VM_LEGACY_VA_LAYOUT=27,
VM_SWAP_TOKEN_TIMEOUT=28,
VM_DROP_PAGECACHE=29,
VM_PERCPU_PAGELIST_FRACTION=30,
VM_ZONE_RECLAIM_MODE=31,
VM_MIN_UNMAPPED=32,
VM_PANIC_ON_OOM=33,
VM_VDSO_ENABLED=34,
VM_MIN_SLAB=35,
};
enum
{
NET_CORE=1,
NET_ETHER=2,
NET_802=3,
NET_UNIX=4,
NET_IPV4=5,
NET_IPX=6,
NET_ATALK=7,
NET_NETROM=8,
NET_AX25=9,
NET_BRIDGE=10,
NET_ROSE=11,
NET_IPV6=12,
NET_X25=13,
NET_TR=14,
NET_DECNET=15,
NET_ECONET=16,
NET_SCTP=17,
NET_LLC=18,
NET_NETFILTER=19,
NET_DCCP=20,
NET_IRDA=412,
};
enum
{
RANDOM_POOLSIZE=1,
RANDOM_ENTROPY_COUNT=2,
RANDOM_READ_THRESH=3,
RANDOM_WRITE_THRESH=4,
RANDOM_BOOT_ID=5,
RANDOM_UUID=6
};
enum
{
PTY_MAX=1,
PTY_NR=2
};
enum
{
BUS_ISA_MEM_BASE=1,
BUS_ISA_PORT_BASE=2,
BUS_ISA_PORT_SHIFT=3
};
enum
{
NET_CORE_WMEM_MAX=1,
NET_CORE_RMEM_MAX=2,
NET_CORE_WMEM_DEFAULT=3,
NET_CORE_RMEM_DEFAULT=4,
NET_CORE_MAX_BACKLOG=6,
NET_CORE_FASTROUTE=7,
NET_CORE_MSG_COST=8,
NET_CORE_MSG_BURST=9,
NET_CORE_OPTMEM_MAX=10,
NET_CORE_HOT_LIST_LENGTH=11,
NET_CORE_DIVERT_VERSION=12,
NET_CORE_NO_CONG_THRESH=13,
NET_CORE_NO_CONG=14,
NET_CORE_LO_CONG=15,
NET_CORE_MOD_CONG=16,
NET_CORE_DEV_WEIGHT=17,
NET_CORE_SOMAXCONN=18,
NET_CORE_BUDGET=19,
NET_CORE_AEVENT_ETIME=20,
NET_CORE_AEVENT_RSEQTH=21,
NET_CORE_WARNINGS=22,
};
enum
{
NET_UNIX_DESTROY_DELAY=1,
NET_UNIX_DELETE_DELAY=2,
NET_UNIX_MAX_DGRAM_QLEN=3,
};
enum
{
NET_NF_CONNTRACK_MAX=1,
NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2,
NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3,
NET_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4,
NET_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5,
NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6,
NET_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7,
NET_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8,
NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9,
NET_NF_CONNTRACK_UDP_TIMEOUT=10,
NET_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11,
NET_NF_CONNTRACK_ICMP_TIMEOUT=12,
NET_NF_CONNTRACK_GENERIC_TIMEOUT=13,
NET_NF_CONNTRACK_BUCKETS=14,
NET_NF_CONNTRACK_LOG_INVALID=15,
NET_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16,
NET_NF_CONNTRACK_TCP_LOOSE=17,
NET_NF_CONNTRACK_TCP_BE_LIBERAL=18,
NET_NF_CONNTRACK_TCP_MAX_RETRANS=19,
NET_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20,
NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21,
NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22,
NET_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23,
NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24,
NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25,
NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26,
NET_NF_CONNTRACK_COUNT=27,
NET_NF_CONNTRACK_ICMPV6_TIMEOUT=28,
NET_NF_CONNTRACK_FRAG6_TIMEOUT=29,
NET_NF_CONNTRACK_FRAG6_LOW_THRESH=30,
NET_NF_CONNTRACK_FRAG6_HIGH_THRESH=31,
NET_NF_CONNTRACK_CHECKSUM=32,
NET_NF_CONNTRACK_FTP_ENABLE=33,
NET_NF_CONNTRACK_SIP_ENABLE=34,
NET_NF_CONNTRACK_H323_ENABLE=35,
NET_NF_CONNTRACK_RTSP_ENABLE=36,
NET_NF_CONNTRACK_L2TP_ENABLE=37,
NET_NF_CONNTRACK_IPSEC_ENABLE=38,
NET_NF_CONNTRACK_PPTP_ENABLE=39,
NET_NF_CONNTRACK_PORTSCAN_ENABLE=40,
NET_NF_CONNTRACK_FTP_PORT=41,
NET_NF_CONNTRACK_ESP_TIMEOUT=42,
};
enum
{
NET_IPV4_FORWARD=8,
NET_IPV4_DYNADDR=9,
NET_IPV4_CONF=16,
NET_IPV4_NEIGH=17,
NET_IPV4_ROUTE=18,
NET_IPV4_FIB_HASH=19,
NET_IPV4_NETFILTER=20,
NET_IPV4_TCP_TIMESTAMPS=33,
NET_IPV4_TCP_WINDOW_SCALING=34,
NET_IPV4_TCP_SACK=35,
NET_IPV4_TCP_RETRANS_COLLAPSE=36,
NET_IPV4_DEFAULT_TTL=37,
NET_IPV4_AUTOCONFIG=38,
NET_IPV4_NO_PMTU_DISC=39,
NET_IPV4_TCP_SYN_RETRIES=40,
NET_IPV4_IPFRAG_HIGH_THRESH=41,
NET_IPV4_IPFRAG_LOW_THRESH=42,
NET_IPV4_IPFRAG_TIME=43,
NET_IPV4_TCP_MAX_KA_PROBES=44,
NET_IPV4_TCP_KEEPALIVE_TIME=45,
NET_IPV4_TCP_KEEPALIVE_PROBES=46,
NET_IPV4_TCP_RETRIES1=47,
NET_IPV4_TCP_RETRIES2=48,
NET_IPV4_TCP_FIN_TIMEOUT=49,
NET_IPV4_IP_MASQ_DEBUG=50,
NET_TCP_SYNCOOKIES=51,
NET_TCP_STDURG=52,
NET_TCP_RFC1337=53,
NET_TCP_SYN_TAILDROP=54,
NET_TCP_MAX_SYN_BACKLOG=55,
NET_IPV4_LOCAL_PORT_RANGE=56,
NET_IPV4_ICMP_ECHO_IGNORE_ALL=57,
NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS=58,
NET_IPV4_ICMP_SOURCEQUENCH_RATE=59,
NET_IPV4_ICMP_DESTUNREACH_RATE=60,
NET_IPV4_ICMP_TIMEEXCEED_RATE=61,
NET_IPV4_ICMP_PARAMPROB_RATE=62,
NET_IPV4_ICMP_ECHOREPLY_RATE=63,
NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES=64,
NET_IPV4_IGMP_MAX_MEMBERSHIPS=65,
NET_TCP_TW_RECYCLE=66,
NET_IPV4_ALWAYS_DEFRAG=67,
NET_IPV4_TCP_KEEPALIVE_INTVL=68,
NET_IPV4_INET_PEER_THRESHOLD=69,
NET_IPV4_INET_PEER_MINTTL=70,
NET_IPV4_INET_PEER_MAXTTL=71,
NET_IPV4_INET_PEER_GC_MINTIME=72,
NET_IPV4_INET_PEER_GC_MAXTIME=73,
NET_TCP_ORPHAN_RETRIES=74,
NET_TCP_ABORT_ON_OVERFLOW=75,
NET_TCP_SYNACK_RETRIES=76,
NET_TCP_MAX_ORPHANS=77,
NET_TCP_MAX_TW_BUCKETS=78,
NET_TCP_FACK=79,
NET_TCP_REORDERING=80,
NET_TCP_ECN=81,
NET_TCP_DSACK=82,
NET_TCP_MEM=83,
NET_TCP_WMEM=84,
NET_TCP_RMEM=85,
NET_TCP_APP_WIN=86,
NET_TCP_ADV_WIN_SCALE=87,
NET_IPV4_NONLOCAL_BIND=88,
NET_IPV4_ICMP_RATELIMIT=89,
NET_IPV4_ICMP_RATEMASK=90,
NET_TCP_TW_REUSE=91,
NET_TCP_FRTO=92,
NET_TCP_LOW_LATENCY=93,
NET_IPV4_IPFRAG_SECRET_INTERVAL=94,
NET_IPV4_IGMP_MAX_MSF=96,
NET_TCP_NO_METRICS_SAVE=97,
NET_TCP_DEFAULT_WIN_SCALE=105,
NET_TCP_MODERATE_RCVBUF=106,
NET_TCP_TSO_WIN_DIVISOR=107,
NET_TCP_BIC_BETA=108,
NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR=109,
NET_TCP_CONG_CONTROL=110,
NET_TCP_ABC=111,
NET_IPV4_IPFRAG_MAX_DIST=112,
NET_TCP_MTU_PROBING=113,
NET_TCP_BASE_MSS=114,
NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS=115,
NET_TCP_DMA_COPYBREAK=116,
NET_TCP_SLOW_START_AFTER_IDLE=117,
NET_CIPSOV4_CACHE_ENABLE=118,
NET_CIPSOV4_CACHE_BUCKET_SIZE=119,
NET_CIPSOV4_RBM_OPTFMT=120,
NET_CIPSOV4_RBM_STRICTVALID=121,
NET_TCP_AVAIL_CONG_CONTROL=122,
NET_TCP_ALLOWED_CONG_CONTROL=123,
NET_TCP_MAX_SSTHRESH=124,
NET_TCP_FRTO_RESPONSE=125,
};
enum {
NET_IPV4_ROUTE_FLUSH=1,
NET_IPV4_ROUTE_MIN_DELAY=2,
NET_IPV4_ROUTE_MAX_DELAY=3,
NET_IPV4_ROUTE_GC_THRESH=4,
NET_IPV4_ROUTE_MAX_SIZE=5,
NET_IPV4_ROUTE_GC_MIN_INTERVAL=6,
NET_IPV4_ROUTE_GC_TIMEOUT=7,
NET_IPV4_ROUTE_GC_INTERVAL=8,
NET_IPV4_ROUTE_REDIRECT_LOAD=9,
NET_IPV4_ROUTE_REDIRECT_NUMBER=10,
NET_IPV4_ROUTE_REDIRECT_SILENCE=11,
NET_IPV4_ROUTE_ERROR_COST=12,
NET_IPV4_ROUTE_ERROR_BURST=13,
NET_IPV4_ROUTE_GC_ELASTICITY=14,
NET_IPV4_ROUTE_MTU_EXPIRES=15,
NET_IPV4_ROUTE_MIN_PMTU=16,
NET_IPV4_ROUTE_MIN_ADVMSS=17,
NET_IPV4_ROUTE_SECRET_INTERVAL=18,
NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS=19,
};
enum
{
NET_PROTO_CONF_ALL=-2,
NET_PROTO_CONF_DEFAULT=-3
};
enum
{
NET_IPV4_CONF_FORWARDING=1,
NET_IPV4_CONF_MC_FORWARDING=2,
NET_IPV4_CONF_PROXY_ARP=3,
NET_IPV4_CONF_ACCEPT_REDIRECTS=4,
NET_IPV4_CONF_SECURE_REDIRECTS=5,
NET_IPV4_CONF_SEND_REDIRECTS=6,
NET_IPV4_CONF_SHARED_MEDIA=7,
NET_IPV4_CONF_RP_FILTER=8,
NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE=9,
NET_IPV4_CONF_BOOTP_RELAY=10,
NET_IPV4_CONF_LOG_MARTIANS=11,
NET_IPV4_CONF_TAG=12,
NET_IPV4_CONF_ARPFILTER=13,
NET_IPV4_CONF_MEDIUM_ID=14,
NET_IPV4_CONF_NOXFRM=15,
NET_IPV4_CONF_NOPOLICY=16,
NET_IPV4_CONF_FORCE_IGMP_VERSION=17,
NET_IPV4_CONF_ARP_ANNOUNCE=18,
NET_IPV4_CONF_ARP_IGNORE=19,
NET_IPV4_CONF_PROMOTE_SECONDARIES=20,
NET_IPV4_CONF_ARP_ACCEPT=21,
NET_IPV4_CONF_ARP_NOTIFY=22,
};
enum
{
NET_IPV4_NF_CONNTRACK_MAX=1,
NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2,
NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3,
NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4,
NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5,
NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6,
NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7,
NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8,
NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9,
NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT=10,
NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11,
NET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT=12,
NET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT=13,
NET_IPV4_NF_CONNTRACK_BUCKETS=14,
NET_IPV4_NF_CONNTRACK_LOG_INVALID=15,
NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16,
NET_IPV4_NF_CONNTRACK_TCP_LOOSE=17,
NET_IPV4_NF_CONNTRACK_TCP_BE_LIBERAL=18,
NET_IPV4_NF_CONNTRACK_TCP_MAX_RETRANS=19,
NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20,
NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21,
NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22,
NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23,
NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24,
NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25,
NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26,
NET_IPV4_NF_CONNTRACK_COUNT=27,
NET_IPV4_NF_CONNTRACK_CHECKSUM=28,
};
enum {
NET_IPV6_CONF=16,
NET_IPV6_NEIGH=17,
NET_IPV6_ROUTE=18,
NET_IPV6_ICMP=19,
NET_IPV6_BINDV6ONLY=20,
NET_IPV6_IP6FRAG_HIGH_THRESH=21,
NET_IPV6_IP6FRAG_LOW_THRESH=22,
NET_IPV6_IP6FRAG_TIME=23,
NET_IPV6_IP6FRAG_SECRET_INTERVAL=24,
NET_IPV6_MLD_MAX_MSF=25,
};
enum {
NET_IPV6_ROUTE_FLUSH=1,
NET_IPV6_ROUTE_GC_THRESH=2,
NET_IPV6_ROUTE_MAX_SIZE=3,
NET_IPV6_ROUTE_GC_MIN_INTERVAL=4,
NET_IPV6_ROUTE_GC_TIMEOUT=5,
NET_IPV6_ROUTE_GC_INTERVAL=6,
NET_IPV6_ROUTE_GC_ELASTICITY=7,
NET_IPV6_ROUTE_MTU_EXPIRES=8,
NET_IPV6_ROUTE_MIN_ADVMSS=9,
NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS=10
};
enum {
NET_IPV6_FORWARDING=1,
NET_IPV6_HOP_LIMIT=2,
NET_IPV6_MTU=3,
NET_IPV6_ACCEPT_RA=4,
NET_IPV6_ACCEPT_REDIRECTS=5,
NET_IPV6_AUTOCONF=6,
NET_IPV6_DAD_TRANSMITS=7,
NET_IPV6_RTR_SOLICITS=8,
NET_IPV6_RTR_SOLICIT_INTERVAL=9,
NET_IPV6_RTR_SOLICIT_DELAY=10,
NET_IPV6_USE_TEMPADDR=11,
NET_IPV6_TEMP_VALID_LFT=12,
NET_IPV6_TEMP_PREFERED_LFT=13,
NET_IPV6_REGEN_MAX_RETRY=14,
NET_IPV6_MAX_DESYNC_FACTOR=15,
NET_IPV6_MAX_ADDRESSES=16,
NET_IPV6_FORCE_MLD_VERSION=17,
NET_IPV6_ACCEPT_RA_DEFRTR=18,
NET_IPV6_ACCEPT_RA_PINFO=19,
NET_IPV6_ACCEPT_RA_RTR_PREF=20,
NET_IPV6_RTR_PROBE_INTERVAL=21,
NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN=22,
NET_IPV6_PROXY_NDP=23,
NET_IPV6_ACCEPT_SOURCE_ROUTE=25,
NET_IPV6_ACCEPT_RA_FROM_LOCAL=26,
__NET_IPV6_MAX
};
enum {
NET_IPV6_ICMP_RATELIMIT=1
};
enum {
NET_NEIGH_MCAST_SOLICIT=1,
NET_NEIGH_UCAST_SOLICIT=2,
NET_NEIGH_APP_SOLICIT=3,
NET_NEIGH_RETRANS_TIME=4,
NET_NEIGH_REACHABLE_TIME=5,
NET_NEIGH_DELAY_PROBE_TIME=6,
NET_NEIGH_GC_STALE_TIME=7,
NET_NEIGH_UNRES_QLEN=8,
NET_NEIGH_PROXY_QLEN=9,
NET_NEIGH_ANYCAST_DELAY=10,
NET_NEIGH_PROXY_DELAY=11,
NET_NEIGH_LOCKTIME=12,
NET_NEIGH_GC_INTERVAL=13,
NET_NEIGH_GC_THRESH1=14,
NET_NEIGH_GC_THRESH2=15,
NET_NEIGH_GC_THRESH3=16,
NET_NEIGH_RETRANS_TIME_MS=17,
NET_NEIGH_REACHABLE_TIME_MS=18,
};
enum {
NET_DCCP_DEFAULT=1,
};
enum {
NET_IPX_PPROP_BROADCASTING=1,
NET_IPX_FORWARDING=2
};
enum {
NET_LLC2=1,
NET_LLC_STATION=2,
};
enum {
NET_LLC2_TIMEOUT=1,
};
enum {
NET_LLC_STATION_ACK_TIMEOUT=1,
};
enum {
NET_LLC2_ACK_TIMEOUT=1,
NET_LLC2_P_TIMEOUT=2,
NET_LLC2_REJ_TIMEOUT=3,
NET_LLC2_BUSY_TIMEOUT=4,
};
enum {
NET_ATALK_AARP_EXPIRY_TIME=1,
NET_ATALK_AARP_TICK_TIME=2,
NET_ATALK_AARP_RETRANSMIT_LIMIT=3,
NET_ATALK_AARP_RESOLVE_TIME=4
};
enum {
NET_NETROM_DEFAULT_PATH_QUALITY=1,
NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER=2,
NET_NETROM_NETWORK_TTL_INITIALISER=3,
NET_NETROM_TRANSPORT_TIMEOUT=4,
NET_NETROM_TRANSPORT_MAXIMUM_TRIES=5,
NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY=6,
NET_NETROM_TRANSPORT_BUSY_DELAY=7,
NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE=8,
NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT=9,
NET_NETROM_ROUTING_CONTROL=10,
NET_NETROM_LINK_FAILS_COUNT=11,
NET_NETROM_RESET=12
};
enum {
NET_AX25_IP_DEFAULT_MODE=1,
NET_AX25_DEFAULT_MODE=2,
NET_AX25_BACKOFF_TYPE=3,
NET_AX25_CONNECT_MODE=4,
NET_AX25_STANDARD_WINDOW=5,
NET_AX25_EXTENDED_WINDOW=6,
NET_AX25_T1_TIMEOUT=7,
NET_AX25_T2_TIMEOUT=8,
NET_AX25_T3_TIMEOUT=9,
NET_AX25_IDLE_TIMEOUT=10,
NET_AX25_N2=11,
NET_AX25_PACLEN=12,
NET_AX25_PROTOCOL=13,
NET_AX25_DAMA_SLAVE_TIMEOUT=14
};
enum {
NET_ROSE_RESTART_REQUEST_TIMEOUT=1,
NET_ROSE_CALL_REQUEST_TIMEOUT=2,
NET_ROSE_RESET_REQUEST_TIMEOUT=3,
NET_ROSE_CLEAR_REQUEST_TIMEOUT=4,
NET_ROSE_ACK_HOLD_BACK_TIMEOUT=5,
NET_ROSE_ROUTING_CONTROL=6,
NET_ROSE_LINK_FAIL_TIMEOUT=7,
NET_ROSE_MAX_VCS=8,
NET_ROSE_WINDOW_SIZE=9,
NET_ROSE_NO_ACTIVITY_TIMEOUT=10
};
enum {
NET_X25_RESTART_REQUEST_TIMEOUT=1,
NET_X25_CALL_REQUEST_TIMEOUT=2,
NET_X25_RESET_REQUEST_TIMEOUT=3,
NET_X25_CLEAR_REQUEST_TIMEOUT=4,
NET_X25_ACK_HOLD_BACK_TIMEOUT=5,
NET_X25_FORWARD=6
};
enum
{
NET_TR_RIF_TIMEOUT=1
};
enum {
NET_DECNET_NODE_TYPE = 1,
NET_DECNET_NODE_ADDRESS = 2,
NET_DECNET_NODE_NAME = 3,
NET_DECNET_DEFAULT_DEVICE = 4,
NET_DECNET_TIME_WAIT = 5,
NET_DECNET_DN_COUNT = 6,
NET_DECNET_DI_COUNT = 7,
NET_DECNET_DR_COUNT = 8,
NET_DECNET_DST_GC_INTERVAL = 9,
NET_DECNET_CONF = 10,
NET_DECNET_NO_FC_MAX_CWND = 11,
NET_DECNET_MEM = 12,
NET_DECNET_RMEM = 13,
NET_DECNET_WMEM = 14,
NET_DECNET_DEBUG_LEVEL = 255
};
enum {
NET_DECNET_CONF_LOOPBACK = -2,
NET_DECNET_CONF_DDCMP = -3,
NET_DECNET_CONF_PPP = -4,
NET_DECNET_CONF_X25 = -5,
NET_DECNET_CONF_GRE = -6,
NET_DECNET_CONF_ETHER = -7
};
enum {
NET_DECNET_CONF_DEV_PRIORITY = 1,
NET_DECNET_CONF_DEV_T1 = 2,
NET_DECNET_CONF_DEV_T2 = 3,
NET_DECNET_CONF_DEV_T3 = 4,
NET_DECNET_CONF_DEV_FORWARDING = 5,
NET_DECNET_CONF_DEV_BLKSIZE = 6,
NET_DECNET_CONF_DEV_STATE = 7
};
enum {
NET_SCTP_RTO_INITIAL = 1,
NET_SCTP_RTO_MIN = 2,
NET_SCTP_RTO_MAX = 3,
NET_SCTP_RTO_ALPHA = 4,
NET_SCTP_RTO_BETA = 5,
NET_SCTP_VALID_COOKIE_LIFE = 6,
NET_SCTP_ASSOCIATION_MAX_RETRANS = 7,
NET_SCTP_PATH_MAX_RETRANS = 8,
NET_SCTP_MAX_INIT_RETRANSMITS = 9,
NET_SCTP_HB_INTERVAL = 10,
NET_SCTP_PRESERVE_ENABLE = 11,
NET_SCTP_MAX_BURST = 12,
NET_SCTP_ADDIP_ENABLE = 13,
NET_SCTP_PRSCTP_ENABLE = 14,
NET_SCTP_SNDBUF_POLICY = 15,
NET_SCTP_SACK_TIMEOUT = 16,
NET_SCTP_RCVBUF_POLICY = 17,
};
enum {
NET_BRIDGE_NF_CALL_ARPTABLES = 1,
NET_BRIDGE_NF_CALL_IPTABLES = 2,
NET_BRIDGE_NF_CALL_IP6TABLES = 3,
NET_BRIDGE_NF_FILTER_VLAN_TAGGED = 4,
NET_BRIDGE_NF_FILTER_PPPOE_TAGGED = 5,
};
enum {
NET_IRDA_DISCOVERY=1,
NET_IRDA_DEVNAME=2,
NET_IRDA_DEBUG=3,
NET_IRDA_FAST_POLL=4,
NET_IRDA_DISCOVERY_SLOTS=5,
NET_IRDA_DISCOVERY_TIMEOUT=6,
NET_IRDA_SLOT_TIMEOUT=7,
NET_IRDA_MAX_BAUD_RATE=8,
NET_IRDA_MIN_TX_TURN_TIME=9,
NET_IRDA_MAX_TX_DATA_SIZE=10,
NET_IRDA_MAX_TX_WINDOW=11,
NET_IRDA_MAX_NOREPLY_TIME=12,
NET_IRDA_WARN_NOREPLY_TIME=13,
NET_IRDA_LAP_KEEPALIVE_TIME=14,
};
enum
{
FS_NRINODE=1,
FS_STATINODE=2,
FS_MAXINODE=3,
FS_NRDQUOT=4,
FS_MAXDQUOT=5,
FS_NRFILE=6,
FS_MAXFILE=7,
FS_DENTRY=8,
FS_NRSUPER=9,
FS_MAXSUPER=10,
FS_OVERFLOWUID=11,
FS_OVERFLOWGID=12,
FS_LEASES=13,
FS_DIR_NOTIFY=14,
FS_LEASE_TIME=15,
FS_DQSTATS=16,
FS_XFS=17,
FS_AIO_NR=18,
FS_AIO_MAX_NR=19,
FS_INOTIFY=20,
FS_OCFS2=988,
};
enum {
FS_DQ_LOOKUPS = 1,
FS_DQ_DROPS = 2,
FS_DQ_READS = 3,
FS_DQ_WRITES = 4,
FS_DQ_CACHE_HITS = 5,
FS_DQ_ALLOCATED = 6,
FS_DQ_FREE = 7,
FS_DQ_SYNCS = 8,
FS_DQ_WARNINGS = 9,
};
enum {
DEV_CDROM=1,
DEV_HWMON=2,
DEV_PARPORT=3,
DEV_RAID=4,
DEV_MAC_HID=5,
DEV_SCSI=6,
DEV_IPMI=7,
};
enum {
DEV_CDROM_INFO=1,
DEV_CDROM_AUTOCLOSE=2,
DEV_CDROM_AUTOEJECT=3,
DEV_CDROM_DEBUG=4,
DEV_CDROM_LOCK=5,
DEV_CDROM_CHECK_MEDIA=6
};
enum {
DEV_PARPORT_DEFAULT=-3
};
enum {
DEV_RAID_SPEED_LIMIT_MIN=1,
DEV_RAID_SPEED_LIMIT_MAX=2
};
enum {
DEV_PARPORT_DEFAULT_TIMESLICE=1,
DEV_PARPORT_DEFAULT_SPINTIME=2
};
enum {
DEV_PARPORT_SPINTIME=1,
DEV_PARPORT_BASE_ADDR=2,
DEV_PARPORT_IRQ=3,
DEV_PARPORT_DMA=4,
DEV_PARPORT_MODES=5,
DEV_PARPORT_DEVICES=6,
DEV_PARPORT_AUTOPROBE=16
};
enum {
DEV_PARPORT_DEVICES_ACTIVE=-3,
};
enum {
DEV_PARPORT_DEVICE_TIMESLICE=1,
};
enum {
DEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES=1,
DEV_MAC_HID_KEYBOARD_LOCK_KEYCODES=2,
DEV_MAC_HID_MOUSE_BUTTON_EMULATION=3,
DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=4,
DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=5,
DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=6
};
enum {
DEV_SCSI_LOGGING_LEVEL=1,
};
enum {
DEV_IPMI_POWEROFF_POWERCYCLE=1,
};
enum
{
ABI_DEFHANDLER_COFF=1,
ABI_DEFHANDLER_ELF=2,
ABI_DEFHANDLER_LCALL7=3,
ABI_DEFHANDLER_LIBCSO=4,
ABI_TRACE=5,
ABI_FAKE_UTSNAME=6,
};
# 29 "include/linux/sysctl.h" 2
struct ctl_table;
struct nsproxy;
struct ctl_table_root;
struct ctl_table_header;
struct ctl_dir;
typedef int proc_handler (struct ctl_table *ctl, int write,
void *buffer, size_t *lenp, loff_t *ppos);
extern int proc_dostring(struct ctl_table *, int,
void *, size_t *, loff_t *);
extern int proc_dointvec(struct ctl_table *, int,
void *, size_t *, loff_t *);
extern int proc_dointvec_minmax(struct ctl_table *, int,
void *, size_t *, loff_t *);
extern int proc_dointvec_jiffies(struct ctl_table *, int,
void *, size_t *, loff_t *);
extern int proc_dointvec_userhz_jiffies(struct ctl_table *, int,
void *, size_t *, loff_t *);
extern int proc_dointvec_ms_jiffies(struct ctl_table *, int,
void *, size_t *, loff_t *);
extern int proc_doulongvec_minmax(struct ctl_table *, int,
void *, size_t *, loff_t *);
extern int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int,
void *, size_t *, loff_t *);
extern int proc_do_large_bitmap(struct ctl_table *, int,
void *, size_t *, loff_t *);
# 87 "include/linux/sysctl.h"
struct ctl_table_poll {
atomic_t event;
wait_queue_head_t wait;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *proc_sys_poll_event(struct ctl_table_poll *poll)
{
return (void *)(unsigned long)(*(volatile typeof((&poll->event)->counter) *)&((&poll->event)->counter));
}
# 105 "include/linux/sysctl.h"
struct ctl_table
{
const char *procname;
void *data;
int maxlen;
umode_t mode;
struct ctl_table *child;
proc_handler *proc_handler;
struct ctl_table_poll *poll;
void *extra1;
void *extra2;
};
struct ctl_node {
struct rb_node node;
struct ctl_table_header *header;
};
struct ctl_table_header
{
union {
struct {
struct ctl_table *ctl_table;
int used;
int count;
int nreg;
};
struct callback_head rcu;
};
struct completion *unregistering;
struct ctl_table *ctl_table_arg;
struct ctl_table_root *root;
struct ctl_table_set *set;
struct ctl_dir *parent;
struct ctl_node *node;
};
struct ctl_dir {
struct ctl_table_header header;
struct rb_root root;
};
struct ctl_table_set {
int (*is_seen)(struct ctl_table_set *);
struct ctl_dir dir;
};
struct ctl_table_root {
struct ctl_table_set default_set;
struct ctl_table_set *(*lookup)(struct ctl_table_root *root,
struct nsproxy *namespaces);
int (*permissions)(struct ctl_table_header *head, struct ctl_table *table);
};
struct ctl_path {
const char *procname;
};
void proc_sys_poll_notify(struct ctl_table_poll *poll);
extern void setup_sysctl_set(struct ctl_table_set *p,
struct ctl_table_root *root,
int (*is_seen)(struct ctl_table_set *));
extern void retire_sysctl_set(struct ctl_table_set *set);
void register_sysctl_root(struct ctl_table_root *root);
struct ctl_table_header *__register_sysctl_table(
struct ctl_table_set *set,
const char *path, struct ctl_table *table);
struct ctl_table_header *__register_sysctl_paths(
struct ctl_table_set *set,
const struct ctl_path *path, struct ctl_table *table);
struct ctl_table_header *register_sysctl(const char *path, struct ctl_table *table);
struct ctl_table_header *register_sysctl_table(struct ctl_table * table);
struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,
struct ctl_table *table);
void unregister_sysctl_table(struct ctl_table_header * table);
extern int sysctl_init(void);
# 28 "include/linux/kmod.h" 2
extern char modprobe_path[];
extern __attribute__((format(printf, 2, 3)))
int __request_module(bool wait, const char *name, ...);
# 48 "include/linux/kmod.h"
struct cred;
struct file;
struct subprocess_info {
struct work_struct work;
struct completion *complete;
char *path;
char **argv;
char **envp;
int wait;
int retval;
int (*init)(struct subprocess_info *info, struct cred *new);
void (*cleanup)(struct subprocess_info *info);
void *data;
};
extern int
call_usermodehelper(char *path, char **argv, char **envp, int wait);
extern struct subprocess_info *
call_usermodehelper_setup(char *path, char **argv, char **envp, gfp_t gfp_mask,
int (*init)(struct subprocess_info *info, struct cred *new),
void (*cleanup)(struct subprocess_info *), void *data);
extern int
call_usermodehelper_exec(struct subprocess_info *info, int wait);
extern struct ctl_table usermodehelper_table[];
enum umh_disable_depth {
UMH_ENABLED = 0,
UMH_FREEZING,
UMH_DISABLED,
};
extern void usermodehelper_init(void);
extern int __usermodehelper_disable(enum umh_disable_depth depth);
extern void __usermodehelper_set_disable_depth(enum umh_disable_depth depth);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int usermodehelper_disable(void)
{
return __usermodehelper_disable(UMH_DISABLED);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void usermodehelper_enable(void)
{
__usermodehelper_set_disable_depth(UMH_ENABLED);
}
extern int usermodehelper_read_trylock(void);
extern long usermodehelper_read_lock_wait(long timeout);
extern void usermodehelper_read_unlock(void);
# 14 "include/linux/module.h" 2
# 1 "include/linux/elf.h" 1
# 1 "./arch/mips/include/asm/elf.h" 1
# 171 "./arch/mips/include/asm/elf.h"
typedef unsigned long elf_greg_t;
typedef elf_greg_t elf_gregset_t[45];
typedef double elf_fpreg_t;
typedef elf_fpreg_t elf_fpregset_t[33];
# 257 "./arch/mips/include/asm/elf.h"
struct mips_abi;
extern struct mips_abi mips_abi;
extern struct mips_abi mips_abi_32;
extern struct mips_abi mips_abi_n32;
# 358 "./arch/mips/include/asm/elf.h"
extern const char *__elf_platform;
# 385 "./arch/mips/include/asm/elf.h"
struct linux_binprm;
extern int arch_setup_additional_pages(struct linux_binprm *bprm,
int uses_interp);
struct mm_struct;
extern unsigned long arch_randomize_brk(struct mm_struct *mm);
# 5 "include/linux/elf.h" 2
# 1 "include/uapi/linux/elf.h" 1
# 1 "./include/uapi/linux/elf-em.h" 1
# 6 "include/uapi/linux/elf.h" 2
typedef __u32 Elf32_Addr;
typedef __u16 Elf32_Half;
typedef __u32 Elf32_Off;
typedef __s32 Elf32_Sword;
typedef __u32 Elf32_Word;
typedef __u64 Elf64_Addr;
typedef __u16 Elf64_Half;
typedef __s16 Elf64_SHalf;
typedef __u64 Elf64_Off;
typedef __s32 Elf64_Sword;
typedef __u32 Elf64_Word;
typedef __u64 Elf64_Xword;
typedef __s64 Elf64_Sxword;
# 137 "include/uapi/linux/elf.h"
typedef struct dynamic{
Elf32_Sword d_tag;
union{
Elf32_Sword d_val;
Elf32_Addr d_ptr;
} d_un;
} Elf32_Dyn;
typedef struct {
Elf64_Sxword d_tag;
union {
Elf64_Xword d_val;
Elf64_Addr d_ptr;
} d_un;
} Elf64_Dyn;
# 160 "include/uapi/linux/elf.h"
typedef struct elf32_rel {
Elf32_Addr r_offset;
Elf32_Word r_info;
} Elf32_Rel;
typedef struct elf64_rel {
Elf64_Addr r_offset;
Elf64_Xword r_info;
} Elf64_Rel;
typedef struct elf32_rela{
Elf32_Addr r_offset;
Elf32_Word r_info;
Elf32_Sword r_addend;
} Elf32_Rela;
typedef struct elf64_rela {
Elf64_Addr r_offset;
Elf64_Xword r_info;
Elf64_Sxword r_addend;
} Elf64_Rela;
typedef struct elf32_sym{
Elf32_Word st_name;
Elf32_Addr st_value;
Elf32_Word st_size;
unsigned char st_info;
unsigned char st_other;
Elf32_Half st_shndx;
} Elf32_Sym;
typedef struct elf64_sym {
Elf64_Word st_name;
unsigned char st_info;
unsigned char st_other;
Elf64_Half st_shndx;
Elf64_Addr st_value;
Elf64_Xword st_size;
} Elf64_Sym;
typedef struct elf32_hdr{
unsigned char e_ident[16];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr;
typedef struct elf64_hdr {
unsigned char e_ident[16];
Elf64_Half e_type;
Elf64_Half e_machine;
Elf64_Word e_version;
Elf64_Addr e_entry;
Elf64_Off e_phoff;
Elf64_Off e_shoff;
Elf64_Word e_flags;
Elf64_Half e_ehsize;
Elf64_Half e_phentsize;
Elf64_Half e_phnum;
Elf64_Half e_shentsize;
Elf64_Half e_shnum;
Elf64_Half e_shstrndx;
} Elf64_Ehdr;
typedef struct elf32_phdr{
Elf32_Word p_type;
Elf32_Off p_offset;
Elf32_Addr p_vaddr;
Elf32_Addr p_paddr;
Elf32_Word p_filesz;
Elf32_Word p_memsz;
Elf32_Word p_flags;
Elf32_Word p_align;
} Elf32_Phdr;
typedef struct elf64_phdr {
Elf64_Word p_type;
Elf64_Word p_flags;
Elf64_Off p_offset;
Elf64_Addr p_vaddr;
Elf64_Addr p_paddr;
Elf64_Xword p_filesz;
Elf64_Xword p_memsz;
Elf64_Xword p_align;
} Elf64_Phdr;
# 299 "include/uapi/linux/elf.h"
typedef struct elf32_shdr {
Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
Elf32_Word sh_size;
Elf32_Word sh_link;
Elf32_Word sh_info;
Elf32_Word sh_addralign;
Elf32_Word sh_entsize;
} Elf32_Shdr;
typedef struct elf64_shdr {
Elf64_Word sh_name;
Elf64_Word sh_type;
Elf64_Xword sh_flags;
Elf64_Addr sh_addr;
Elf64_Off sh_offset;
Elf64_Xword sh_size;
Elf64_Word sh_link;
Elf64_Word sh_info;
Elf64_Xword sh_addralign;
Elf64_Xword sh_entsize;
} Elf64_Shdr;
# 406 "include/uapi/linux/elf.h"
typedef struct elf32_note {
Elf32_Word n_namesz;
Elf32_Word n_descsz;
Elf32_Word n_type;
} Elf32_Nhdr;
typedef struct elf64_note {
Elf64_Word n_namesz;
Elf64_Word n_descsz;
Elf64_Word n_type;
} Elf64_Nhdr;
# 6 "include/linux/elf.h" 2
# 20 "include/linux/elf.h"
extern Elf32_Dyn _DYNAMIC [];
# 41 "include/linux/elf.h"
struct file;
struct coredump_params;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int elf_coredump_extra_notes_size(void) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int elf_coredump_extra_notes_write(struct coredump_params *cprm) { return 0; }
# 15 "include/linux/module.h" 2
# 1 "include/linux/kobject.h" 1
# 21 "include/linux/kobject.h"
# 1 "include/linux/sysfs.h" 1
# 15 "include/linux/sysfs.h"
# 1 "include/linux/kernfs.h" 1
# 14 "include/linux/kernfs.h"
# 1 "include/linux/idr.h" 1
# 30 "include/linux/idr.h"
struct idr_layer {
int prefix;
int layer;
struct idr_layer *ary[1<<8];
int count;
union {
unsigned long bitmap[((((1 << 8)) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
struct callback_head callback_head;
};
};
struct idr {
struct idr_layer *hint;
struct idr_layer *top;
int layers;
int cur;
spinlock_t lock;
int id_free_cnt;
struct idr_layer *id_free;
};
# 79 "include/linux/idr.h"
void *idr_find_slowpath(struct idr *idp, int id);
void idr_preload(gfp_t gfp_mask);
int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask);
int idr_alloc_cyclic(struct idr *idr, void *ptr, int start, int end, gfp_t gfp_mask);
int idr_for_each(struct idr *idp,
int (*fn)(int id, void *p, void *data), void *data);
void *idr_get_next(struct idr *idp, int *nextid);
void *idr_replace(struct idr *idp, void *ptr, int id);
void idr_remove(struct idr *idp, int id);
void idr_destroy(struct idr *idp);
void idr_init(struct idr *idp);
bool idr_is_empty(struct idr *idp);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void idr_preload_end(void)
{
__asm__ __volatile__("": : :"memory");
}
# 115 "include/linux/idr.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *idr_find(struct idr *idr, int id)
{
struct idr_layer *hint = ({ typeof(*(idr->hint)) *_________p1 = (typeof(*(idr->hint)) *)(*(volatile typeof((idr->hint)) *)&((idr->hint))); do { } while (0); ; do { } while(0); ((typeof(*(idr->hint)) *)(_________p1)); });
if (hint && (id & ~((1 << 8)-1)) == hint->prefix)
return ({ typeof(*(hint->ary[id & ((1 << 8)-1)])) *_________p1 = (typeof(*(hint->ary[id & ((1 << 8)-1)])) *)(*(volatile typeof((hint->ary[id & ((1 << 8)-1)])) *)&((hint->ary[id & ((1 << 8)-1)]))); do { } while (0); ; do { } while(0); ((typeof(*(hint->ary[id & ((1 << 8)-1)])) *)(_________p1)); });
return idr_find_slowpath(idr, id);
}
# 149 "include/linux/idr.h"
struct ida_bitmap {
long nr_busy;
unsigned long bitmap[(128 / sizeof(long) - 1)];
};
struct ida {
struct idr idr;
struct ida_bitmap *free_bitmap;
};
int ida_pre_get(struct ida *ida, gfp_t gfp_mask);
int ida_get_new_above(struct ida *ida, int starting_id, int *p_id);
void ida_remove(struct ida *ida, int id);
void ida_destroy(struct ida *ida);
void ida_init(struct ida *ida);
int ida_simple_get(struct ida *ida, unsigned int start, unsigned int end,
gfp_t gfp_mask);
void ida_simple_remove(struct ida *ida, unsigned int id);
# 179 "include/linux/idr.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int ida_get_new(struct ida *ida, int *p_id)
{
return ida_get_new_above(ida, 0, p_id);
}
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) idr_init_cache(void);
# 15 "include/linux/kernfs.h" 2
struct file;
struct dentry;
struct iattr;
struct seq_file;
struct vm_area_struct;
struct super_block;
struct file_system_type;
struct kernfs_open_node;
struct kernfs_iattrs;
enum kernfs_node_type {
KERNFS_DIR = 0x0001,
KERNFS_FILE = 0x0002,
KERNFS_LINK = 0x0004,
};
enum kernfs_node_flag {
KERNFS_ACTIVATED = 0x0010,
KERNFS_NS = 0x0020,
KERNFS_HAS_SEQ_SHOW = 0x0040,
KERNFS_HAS_MMAP = 0x0080,
KERNFS_LOCKDEP = 0x0100,
KERNFS_STATIC_NAME = 0x0200,
KERNFS_SUICIDAL = 0x0400,
KERNFS_SUICIDED = 0x0800,
};
enum kernfs_root_flag {
KERNFS_ROOT_CREATE_DEACTIVATED = 0x0001,
# 70 "include/linux/kernfs.h"
KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 0x0002,
};
struct kernfs_elem_dir {
unsigned long subdirs;
struct rb_root children;
struct kernfs_root *root;
};
struct kernfs_elem_symlink {
struct kernfs_node *target_kn;
};
struct kernfs_elem_attr {
const struct kernfs_ops *ops;
struct kernfs_open_node *open;
loff_t size;
struct kernfs_node *notify_next;
};
# 106 "include/linux/kernfs.h"
struct kernfs_node {
atomic_t count;
atomic_t active;
# 118 "include/linux/kernfs.h"
struct kernfs_node *parent;
const char *name;
struct rb_node rb;
const void *ns;
unsigned int hash;
union {
struct kernfs_elem_dir dir;
struct kernfs_elem_symlink symlink;
struct kernfs_elem_attr attr;
};
void *priv;
unsigned short flags;
umode_t mode;
unsigned int ino;
struct kernfs_iattrs *iattr;
};
# 146 "include/linux/kernfs.h"
struct kernfs_syscall_ops {
int (*remount_fs)(struct kernfs_root *root, int *flags, char *data);
int (*show_options)(struct seq_file *sf, struct kernfs_root *root);
int (*mkdir)(struct kernfs_node *parent, const char *name,
umode_t mode);
int (*rmdir)(struct kernfs_node *kn);
int (*rename)(struct kernfs_node *kn, struct kernfs_node *new_parent,
const char *new_name);
};
struct kernfs_root {
struct kernfs_node *kn;
unsigned int flags;
struct ida ino_ida;
struct kernfs_syscall_ops *syscall_ops;
struct list_head supers;
wait_queue_head_t deactivate_waitq;
};
struct kernfs_open_file {
struct kernfs_node *kn;
struct file *file;
void *priv;
struct mutex mutex;
int event;
struct list_head list;
size_t atomic_write_len;
bool mmapped;
const struct vm_operations_struct *vm_ops;
};
struct kernfs_ops {
# 200 "include/linux/kernfs.h"
int (*seq_show)(struct seq_file *sf, void *v);
void *(*seq_start)(struct seq_file *sf, loff_t *ppos);
void *(*seq_next)(struct seq_file *sf, void *v, loff_t *ppos);
void (*seq_stop)(struct seq_file *sf, void *v);
ssize_t (*read)(struct kernfs_open_file *of, char *buf, size_t bytes,
loff_t off);
# 216 "include/linux/kernfs.h"
size_t atomic_write_len;
ssize_t (*write)(struct kernfs_open_file *of, char *buf, size_t bytes,
loff_t off);
int (*mmap)(struct kernfs_open_file *of, struct vm_area_struct *vma);
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum kernfs_node_type kernfs_type(struct kernfs_node *kn)
{
return kn->flags & 0x000f;
}
# 242 "include/linux/kernfs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kernfs_enable_ns(struct kernfs_node *kn)
{
({ static bool __attribute__ ((__section__(".data.unlikely"))) __warned; int __ret_warn_once = !!(kernfs_type(kn) != KERNFS_DIR); if (__builtin_expect(!!(__ret_warn_once), 0)) if (({ int __ret_warn_on = !!(!__warned); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("include/linux/kernfs.h", 244); __builtin_expect(!!(__ret_warn_on), 0); })) __warned = true; __builtin_expect(!!(__ret_warn_once), 0); });
({ static bool __attribute__ ((__section__(".data.unlikely"))) __warned; int __ret_warn_once = !!(!((&kn->dir.children)->rb_node == ((void *)0))); if (__builtin_expect(!!(__ret_warn_once), 0)) if (({ int __ret_warn_on = !!(!__warned); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("include/linux/kernfs.h", 245); __builtin_expect(!!(__ret_warn_on), 0); })) __warned = true; __builtin_expect(!!(__ret_warn_once), 0); });
kn->flags |= KERNFS_NS;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool kernfs_ns_enabled(struct kernfs_node *kn)
{
return kn->flags & KERNFS_NS;
}
int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen);
char * __attribute__((warn_unused_result)) kernfs_path(struct kernfs_node *kn, char *buf,
size_t buflen);
void pr_cont_kernfs_name(struct kernfs_node *kn);
void pr_cont_kernfs_path(struct kernfs_node *kn);
struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn);
struct kernfs_node *kernfs_find_and_get_ns(struct kernfs_node *parent,
const char *name, const void *ns);
void kernfs_get(struct kernfs_node *kn);
void kernfs_put(struct kernfs_node *kn);
struct kernfs_node *kernfs_node_from_dentry(struct dentry *dentry);
struct kernfs_root *kernfs_root_from_sb(struct super_block *sb);
struct kernfs_root *kernfs_create_root(struct kernfs_syscall_ops *scops,
unsigned int flags, void *priv);
void kernfs_destroy_root(struct kernfs_root *root);
struct kernfs_node *kernfs_create_dir_ns(struct kernfs_node *parent,
const char *name, umode_t mode,
void *priv, const void *ns);
struct kernfs_node *__kernfs_create_file(struct kernfs_node *parent,
const char *name,
umode_t mode, loff_t size,
const struct kernfs_ops *ops,
void *priv, const void *ns,
bool name_is_static,
struct lock_class_key *key);
struct kernfs_node *kernfs_create_link(struct kernfs_node *parent,
const char *name,
struct kernfs_node *target);
void kernfs_activate(struct kernfs_node *kn);
void kernfs_remove(struct kernfs_node *kn);
void kernfs_break_active_protection(struct kernfs_node *kn);
void kernfs_unbreak_active_protection(struct kernfs_node *kn);
bool kernfs_remove_self(struct kernfs_node *kn);
int kernfs_remove_by_name_ns(struct kernfs_node *parent, const char *name,
const void *ns);
int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent,
const char *new_name, const void *new_ns);
int kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr);
void kernfs_notify(struct kernfs_node *kn);
const void *kernfs_super_ns(struct super_block *sb);
struct dentry *kernfs_mount_ns(struct file_system_type *fs_type, int flags,
struct kernfs_root *root, unsigned long magic,
bool *new_sb_created, const void *ns);
void kernfs_kill_sb(struct super_block *sb);
struct super_block *kernfs_pin_sb(struct kernfs_root *root, const void *ns);
void kernfs_init(void);
# 410 "include/linux/kernfs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kernfs_node *
kernfs_find_and_get(struct kernfs_node *kn, const char *name)
{
return kernfs_find_and_get_ns(kn, name, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kernfs_node *
kernfs_create_dir(struct kernfs_node *parent, const char *name, umode_t mode,
void *priv)
{
return kernfs_create_dir_ns(parent, name, mode, priv, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kernfs_node *
kernfs_create_file_ns(struct kernfs_node *parent, const char *name,
umode_t mode, loff_t size, const struct kernfs_ops *ops,
void *priv, const void *ns)
{
struct lock_class_key *key = ((void *)0);
return __kernfs_create_file(parent, name, mode, size, ops, priv, ns,
false, key);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kernfs_node *
kernfs_create_file(struct kernfs_node *parent, const char *name, umode_t mode,
loff_t size, const struct kernfs_ops *ops, void *priv)
{
return kernfs_create_file_ns(parent, name, mode, size, ops, priv, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int kernfs_remove_by_name(struct kernfs_node *parent,
const char *name)
{
return kernfs_remove_by_name_ns(parent, name, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int kernfs_rename(struct kernfs_node *kn,
struct kernfs_node *new_parent,
const char *new_name)
{
return kernfs_rename_ns(kn, new_parent, new_name, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dentry *
kernfs_mount(struct file_system_type *fs_type, int flags,
struct kernfs_root *root, unsigned long magic,
bool *new_sb_created)
{
return kernfs_mount_ns(fs_type, flags, root,
magic, new_sb_created, ((void *)0));
}
# 16 "include/linux/sysfs.h" 2
# 1 "include/linux/kobject_ns.h" 1
# 20 "include/linux/kobject_ns.h"
struct sock;
struct kobject;
enum kobj_ns_type {
KOBJ_NS_TYPE_NONE = 0,
KOBJ_NS_TYPE_NET,
KOBJ_NS_TYPES
};
# 40 "include/linux/kobject_ns.h"
struct kobj_ns_type_operations {
enum kobj_ns_type type;
bool (*current_may_mount)(void);
void *(*grab_current_ns)(void);
const void *(*netlink_ns)(struct sock *sk);
const void *(*initial_ns)(void);
void (*drop_ns)(void *);
};
int kobj_ns_type_register(const struct kobj_ns_type_operations *ops);
int kobj_ns_type_registered(enum kobj_ns_type type);
const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent);
const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj);
bool kobj_ns_current_may_mount(enum kobj_ns_type type);
void *kobj_ns_grab_current(enum kobj_ns_type type);
const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk);
const void *kobj_ns_initial(enum kobj_ns_type type);
void kobj_ns_drop(enum kobj_ns_type type, void *ns);
# 21 "include/linux/sysfs.h" 2
struct kobject;
struct module;
struct bin_attribute;
enum kobj_ns_type;
struct attribute {
const char *name;
umode_t mode;
};
# 60 "include/linux/sysfs.h"
struct attribute_group {
const char *name;
umode_t (*is_visible)(struct kobject *,
struct attribute *, int);
struct attribute **attrs;
struct bin_attribute **bin_attrs;
};
# 118 "include/linux/sysfs.h"
struct file;
struct vm_area_struct;
struct bin_attribute {
struct attribute attr;
size_t size;
void *private;
ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *,
char *, loff_t, size_t);
ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *,
char *, loff_t, size_t);
int (*mmap)(struct file *, struct kobject *, struct bin_attribute *attr,
struct vm_area_struct *vma);
};
# 175 "include/linux/sysfs.h"
struct sysfs_ops {
ssize_t (*show)(struct kobject *, struct attribute *, char *);
ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
};
int __attribute__((warn_unused_result)) sysfs_create_dir_ns(struct kobject *kobj, const void *ns);
void sysfs_remove_dir(struct kobject *kobj);
int __attribute__((warn_unused_result)) sysfs_rename_dir_ns(struct kobject *kobj, const char *new_name,
const void *new_ns);
int __attribute__((warn_unused_result)) sysfs_move_dir_ns(struct kobject *kobj,
struct kobject *new_parent_kobj,
const void *new_ns);
int __attribute__((warn_unused_result)) sysfs_create_file_ns(struct kobject *kobj,
const struct attribute *attr,
const void *ns);
int __attribute__((warn_unused_result)) sysfs_create_files(struct kobject *kobj,
const struct attribute **attr);
int __attribute__((warn_unused_result)) sysfs_chmod_file(struct kobject *kobj,
const struct attribute *attr, umode_t mode);
void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr,
const void *ns);
bool sysfs_remove_file_self(struct kobject *kobj, const struct attribute *attr);
void sysfs_remove_files(struct kobject *kobj, const struct attribute **attr);
int __attribute__((warn_unused_result)) sysfs_create_bin_file(struct kobject *kobj,
const struct bin_attribute *attr);
void sysfs_remove_bin_file(struct kobject *kobj,
const struct bin_attribute *attr);
int __attribute__((warn_unused_result)) sysfs_create_link(struct kobject *kobj, struct kobject *target,
const char *name);
int __attribute__((warn_unused_result)) sysfs_create_link_nowarn(struct kobject *kobj,
struct kobject *target,
const char *name);
void sysfs_remove_link(struct kobject *kobj, const char *name);
int sysfs_rename_link_ns(struct kobject *kobj, struct kobject *target,
const char *old_name, const char *new_name,
const void *new_ns);
void sysfs_delete_link(struct kobject *dir, struct kobject *targ,
const char *name);
int __attribute__((warn_unused_result)) sysfs_create_group(struct kobject *kobj,
const struct attribute_group *grp);
int __attribute__((warn_unused_result)) sysfs_create_groups(struct kobject *kobj,
const struct attribute_group **groups);
int sysfs_update_group(struct kobject *kobj,
const struct attribute_group *grp);
void sysfs_remove_group(struct kobject *kobj,
const struct attribute_group *grp);
void sysfs_remove_groups(struct kobject *kobj,
const struct attribute_group **groups);
int sysfs_add_file_to_group(struct kobject *kobj,
const struct attribute *attr, const char *group);
void sysfs_remove_file_from_group(struct kobject *kobj,
const struct attribute *attr, const char *group);
int sysfs_merge_group(struct kobject *kobj,
const struct attribute_group *grp);
void sysfs_unmerge_group(struct kobject *kobj,
const struct attribute_group *grp);
int sysfs_add_link_to_group(struct kobject *kobj, const char *group_name,
struct kobject *target, const char *link_name);
void sysfs_remove_link_from_group(struct kobject *kobj, const char *group_name,
const char *link_name);
void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr);
int __attribute__((warn_unused_result)) sysfs_init(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sysfs_enable_ns(struct kernfs_node *kn)
{
return kernfs_enable_ns(kn);
}
# 431 "include/linux/sysfs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) sysfs_create_file(struct kobject *kobj,
const struct attribute *attr)
{
return sysfs_create_file_ns(kobj, attr, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sysfs_remove_file(struct kobject *kobj,
const struct attribute *attr)
{
sysfs_remove_file_ns(kobj, attr, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int sysfs_rename_link(struct kobject *kobj, struct kobject *target,
const char *old_name, const char *new_name)
{
return sysfs_rename_link_ns(kobj, target, old_name, new_name, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sysfs_notify_dirent(struct kernfs_node *kn)
{
kernfs_notify(kn);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kernfs_node *sysfs_get_dirent(struct kernfs_node *parent,
const unsigned char *name)
{
return kernfs_find_and_get(parent, name);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kernfs_node *sysfs_get(struct kernfs_node *kn)
{
kernfs_get(kn);
return kn;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sysfs_put(struct kernfs_node *kn)
{
kernfs_put(kn);
}
# 22 "include/linux/kobject.h" 2
# 1 "include/linux/kref.h" 1
# 24 "include/linux/kref.h"
struct kref {
atomic_t refcount;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kref_init(struct kref *kref)
{
((&kref->refcount)->counter = (1));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kref_get(struct kref *kref)
{
({ static bool __attribute__ ((__section__(".data.unlikely"))) __warned; int __ret_warn_once = !!(atomic_add_return(1, (&kref->refcount)) < 2); if (__builtin_expect(!!(__ret_warn_once), 0)) if (({ int __ret_warn_on = !!(!__warned); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("include/linux/kref.h", 47); __builtin_expect(!!(__ret_warn_on), 0); })) __warned = true; __builtin_expect(!!(__ret_warn_once), 0); });
}
# 68 "include/linux/kref.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int kref_sub(struct kref *kref, unsigned int count,
void (*release)(struct kref *kref))
{
({ int __ret_warn_on = !!(release == ((void *)0)); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("include/linux/kref.h", 71); __builtin_expect(!!(__ret_warn_on), 0); });
if ((atomic_sub_return(((int) count), (&kref->refcount)) == 0)) {
release(kref);
return 1;
}
return 0;
}
# 97 "include/linux/kref.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int kref_put(struct kref *kref, void (*release)(struct kref *kref))
{
return kref_sub(kref, 1, release);
}
# 115 "include/linux/kref.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int kref_put_spinlock_irqsave(struct kref *kref,
void (*release)(struct kref *kref),
spinlock_t *lock)
{
unsigned long flags;
({ int __ret_warn_on = !!(release == ((void *)0)); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("include/linux/kref.h", 121); __builtin_expect(!!(__ret_warn_on), 0); });
if (atomic_add_unless(&kref->refcount, -1, 1))
return 0;
do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = _raw_spin_lock_irqsave(spinlock_check(lock)); } while (0); } while (0);
if ((atomic_sub_return(1, (&kref->refcount)) == 0)) {
release(kref);
do { if (({ ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(flags); })) { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } } while (0);
return 1;
}
spin_unlock_irqrestore(lock, flags);
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int kref_put_mutex(struct kref *kref,
void (*release)(struct kref *kref),
struct mutex *lock)
{
({ int __ret_warn_on = !!(release == ((void *)0)); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("include/linux/kref.h", 138); __builtin_expect(!!(__ret_warn_on), 0); });
if (__builtin_expect(!!(!atomic_add_unless(&kref->refcount, -1, 1)), 0)) {
mutex_lock(lock);
if (__builtin_expect(!!(!(atomic_sub_return(1, (&kref->refcount)) == 0)), 0)) {
mutex_unlock(lock);
return 0;
}
release(kref);
return 1;
}
return 0;
}
# 167 "include/linux/kref.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) kref_get_unless_zero(struct kref *kref)
{
return atomic_add_unless(&kref->refcount, 1, 0);
}
# 25 "include/linux/kobject.h" 2
# 37 "include/linux/kobject.h"
extern char uevent_helper[];
extern u64 uevent_seqnum;
# 53 "include/linux/kobject.h"
enum kobject_action {
KOBJ_ADD,
KOBJ_REMOVE,
KOBJ_CHANGE,
KOBJ_MOVE,
KOBJ_ONLINE,
KOBJ_OFFLINE,
KOBJ_MAX
};
struct kobject {
const char *name;
struct list_head entry;
struct kobject *parent;
struct kset *kset;
struct kobj_type *ktype;
struct kernfs_node *sd;
struct kref kref;
unsigned int state_initialized:1;
unsigned int state_in_sysfs:1;
unsigned int state_add_uevent_sent:1;
unsigned int state_remove_uevent_sent:1;
unsigned int uevent_suppress:1;
};
extern __attribute__((format(printf, 2, 3)))
int kobject_set_name(struct kobject *kobj, const char *name, ...);
extern int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
va_list vargs);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const char *kobject_name(const struct kobject *kobj)
{
return kobj->name;
}
extern void kobject_init(struct kobject *kobj, struct kobj_type *ktype);
extern __attribute__((format(printf, 3, 4))) __attribute__((warn_unused_result))
int kobject_add(struct kobject *kobj, struct kobject *parent,
const char *fmt, ...);
extern __attribute__((format(printf, 4, 5))) __attribute__((warn_unused_result))
int kobject_init_and_add(struct kobject *kobj,
struct kobj_type *ktype, struct kobject *parent,
const char *fmt, ...);
extern void kobject_del(struct kobject *kobj);
extern struct kobject * __attribute__((warn_unused_result)) kobject_create(void);
extern struct kobject * __attribute__((warn_unused_result)) kobject_create_and_add(const char *name,
struct kobject *parent);
extern int __attribute__((warn_unused_result)) kobject_rename(struct kobject *, const char *new_name);
extern int __attribute__((warn_unused_result)) kobject_move(struct kobject *, struct kobject *);
extern struct kobject *kobject_get(struct kobject *kobj);
extern void kobject_put(struct kobject *kobj);
extern const void *kobject_namespace(struct kobject *kobj);
extern char *kobject_get_path(struct kobject *kobj, gfp_t flag);
struct kobj_type {
void (*release)(struct kobject *kobj);
const struct sysfs_ops *sysfs_ops;
struct attribute **default_attrs;
const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
const void *(*namespace)(struct kobject *kobj);
};
struct kobj_uevent_env {
char *argv[3];
char *envp[32];
int envp_idx;
char buf[2048];
int buflen;
};
struct kset_uevent_ops {
int (* const filter)(struct kset *kset, struct kobject *kobj);
const char *(* const name)(struct kset *kset, struct kobject *kobj);
int (* const uevent)(struct kset *kset, struct kobject *kobj,
struct kobj_uevent_env *env);
};
struct kobj_attribute {
struct attribute attr;
ssize_t (*show)(struct kobject *kobj, struct kobj_attribute *attr,
char *buf);
ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr,
const char *buf, size_t count);
};
extern const struct sysfs_ops kobj_sysfs_ops;
struct sock;
# 167 "include/linux/kobject.h"
struct kset {
struct list_head list;
spinlock_t list_lock;
struct kobject kobj;
const struct kset_uevent_ops *uevent_ops;
};
extern void kset_init(struct kset *kset);
extern int __attribute__((warn_unused_result)) kset_register(struct kset *kset);
extern void kset_unregister(struct kset *kset);
extern struct kset * __attribute__((warn_unused_result)) kset_create_and_add(const char *name,
const struct kset_uevent_ops *u,
struct kobject *parent_kobj);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kset *to_kset(struct kobject *kobj)
{
return kobj ? ({ const typeof( ((struct kset *)0)->kobj ) *__mptr = (kobj); (struct kset *)( (char *)__mptr - __builtin_offsetof(struct kset,kobj) );}) : ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kset *kset_get(struct kset *k)
{
return k ? to_kset(kobject_get(&k->kobj)) : ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kset_put(struct kset *k)
{
kobject_put(&k->kobj);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct kobj_type *get_ktype(struct kobject *kobj)
{
return kobj->ktype;
}
extern struct kobject *kset_find_obj(struct kset *, const char *);
extern struct kobject *kernel_kobj;
extern struct kobject *mm_kobj;
extern struct kobject *hypervisor_kobj;
extern struct kobject *power_kobj;
extern struct kobject *firmware_kobj;
int kobject_uevent(struct kobject *kobj, enum kobject_action action);
int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
char *envp[]);
__attribute__((format(printf, 2, 3)))
int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...);
int kobject_action_type(const char *buf, size_t count,
enum kobject_action *type);
# 17 "include/linux/module.h" 2
# 1 "include/linux/moduleparam.h" 1
# 37 "include/linux/moduleparam.h"
struct kernel_param;
enum {
KERNEL_PARAM_OPS_FL_NOARG = (1 << 0)
};
struct kernel_param_ops {
unsigned int flags;
int (*set)(const char *val, const struct kernel_param *kp);
int (*get)(char *buffer, const struct kernel_param *kp);
void (*free)(void *arg);
};
enum {
KERNEL_PARAM_FL_UNSAFE = (1 << 0)
};
struct kernel_param {
const char *name;
const struct kernel_param_ops *ops;
u16 perm;
s8 level;
u8 flags;
union {
void *arg;
const struct kparam_string *str;
const struct kparam_array *arr;
};
};
extern const struct kernel_param __start___param[], __stop___param[];
struct kparam_string {
unsigned int maxlen;
char *string;
};
struct kparam_array
{
unsigned int max;
unsigned int elemsize;
unsigned int *num;
const struct kernel_param_ops *ops;
void *elem;
};
# 235 "include/linux/moduleparam.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
__check_old_set_param(int (*oldset)(const char *, struct kernel_param *))
{
return 0;
}
# 286 "include/linux/moduleparam.h"
extern void __kernel_param_lock(void);
extern void __kernel_param_unlock(void);
# 341 "include/linux/moduleparam.h"
extern bool parameq(const char *name1, const char *name2);
# 351 "include/linux/moduleparam.h"
extern bool parameqn(const char *name1, const char *name2, size_t n);
extern char *parse_args(const char *name,
char *args,
const struct kernel_param *params,
unsigned num,
s16 level_min,
s16 level_max,
int (*unknown)(char *param, char *val,
const char *doing));
extern void destroy_params(const struct kernel_param *params, unsigned num);
# 379 "include/linux/moduleparam.h"
extern struct kernel_param_ops param_ops_byte;
extern int param_set_byte(const char *val, const struct kernel_param *kp);
extern int param_get_byte(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_short;
extern int param_set_short(const char *val, const struct kernel_param *kp);
extern int param_get_short(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_ushort;
extern int param_set_ushort(const char *val, const struct kernel_param *kp);
extern int param_get_ushort(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_int;
extern int param_set_int(const char *val, const struct kernel_param *kp);
extern int param_get_int(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_uint;
extern int param_set_uint(const char *val, const struct kernel_param *kp);
extern int param_get_uint(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_long;
extern int param_set_long(const char *val, const struct kernel_param *kp);
extern int param_get_long(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_ulong;
extern int param_set_ulong(const char *val, const struct kernel_param *kp);
extern int param_get_ulong(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_ullong;
extern int param_set_ullong(const char *val, const struct kernel_param *kp);
extern int param_get_ullong(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_charp;
extern int param_set_charp(const char *val, const struct kernel_param *kp);
extern int param_get_charp(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_bool;
extern int param_set_bool(const char *val, const struct kernel_param *kp);
extern int param_get_bool(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_invbool;
extern int param_set_invbool(const char *val, const struct kernel_param *kp);
extern int param_get_invbool(char *buffer, const struct kernel_param *kp);
extern struct kernel_param_ops param_ops_bint;
extern int param_set_bint(const char *val, const struct kernel_param *kp);
# 480 "include/linux/moduleparam.h"
extern struct kernel_param_ops param_array_ops;
extern struct kernel_param_ops param_ops_string;
extern int param_set_copystring(const char *val, const struct kernel_param *);
extern int param_get_string(char *buffer, const struct kernel_param *kp);
struct module;
extern int module_param_sysfs_setup(struct module *mod,
const struct kernel_param *kparam,
unsigned int num_params);
extern void module_param_sysfs_remove(struct module *mod);
# 18 "include/linux/module.h" 2
# 1 "include/linux/jump_label.h" 1
# 52 "include/linux/jump_label.h"
extern bool static_key_initialized;
# 72 "include/linux/jump_label.h"
struct static_key {
atomic_t enabled;
};
enum jump_label_type {
JUMP_LABEL_DISABLE = 0,
JUMP_LABEL_ENABLE,
};
struct module;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int static_key_count(struct static_key *key)
{
return (*(volatile typeof((&key->enabled)->counter) *)&((&key->enabled)->counter));
}
# 146 "include/linux/jump_label.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void jump_label_init(void)
{
static_key_initialized = true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) bool static_key_false(struct static_key *key)
{
if (__builtin_expect(!!(static_key_count(key) > 0), 0))
return true;
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) bool static_key_true(struct static_key *key)
{
if (__builtin_expect(!!(static_key_count(key) > 0), 1))
return true;
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void static_key_slow_inc(struct static_key *key)
{
({ int __ret_warn_on = !!(!static_key_initialized); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_fmt("include/linux/jump_label.h", 167, "%s used before call to jump_label_init", __func__); __builtin_expect(!!(__ret_warn_on), 0); });
atomic_add(1, (&key->enabled));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void static_key_slow_dec(struct static_key *key)
{
({ int __ret_warn_on = !!(!static_key_initialized); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_fmt("include/linux/jump_label.h", 173, "%s used before call to jump_label_init", __func__); __builtin_expect(!!(__ret_warn_on), 0); });
atomic_sub(1, (&key->enabled));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int jump_label_text_reserved(void *start, void *end)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void jump_label_lock(void) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void jump_label_unlock(void) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int jump_label_apply_nops(struct module *mod)
{
return 0;
}
# 200 "include/linux/jump_label.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool static_key_enabled(struct static_key *key)
{
return static_key_count(key) > 0;
}
# 19 "include/linux/module.h" 2
# 1 "./arch/mips/include/asm/module.h" 1
# 1 "./arch/mips/include/asm/uaccess.h" 1
# 17 "./arch/mips/include/asm/uaccess.h"
# 1 "./arch/mips/include/asm/asm-eva.h" 1
# 18 "./arch/mips/include/asm/uaccess.h" 2
# 220 "./arch/mips/include/asm/uaccess.h"
struct __large_struct { unsigned long buf[100]; };
# 267 "./arch/mips/include/asm/uaccess.h"
extern void __get_user_unknown(void);
# 489 "./arch/mips/include/asm/uaccess.h"
extern void __put_user_unknown(void);
# 593 "./arch/mips/include/asm/uaccess.h"
extern void __get_user_unaligned_unknown(void);
# 761 "./arch/mips/include/asm/uaccess.h"
extern void __put_user_unaligned_unknown(void);
# 786 "./arch/mips/include/asm/uaccess.h"
extern size_t __copy_user(void *__to, const void *__from, size_t __n);
# 845 "./arch/mips/include/asm/uaccess.h"
extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
# 1199 "./arch/mips/include/asm/uaccess.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __kernel_size_t
__clear_user(void *addr, __kernel_size_t size)
{
__kernel_size_t res;
might_fault();
__asm__ __volatile__(
"move\t$4, %1\n\t"
"move\t$5, $0\n\t"
"move\t$6, %2\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__bzero" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $6"
: "=r" (res)
: "r" (addr), "r" (size)
: "$4", "$5", "$6", "$8", "$9", "$31");
return res;
}
# 1248 "./arch/mips/include/asm/uaccess.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long
__strncpy_from_user(char *__to, const char *__from, long __len)
{
long res;
if ((((current_thread_info()->addr_limit)).seg == ((((mm_segment_t) { 0UL }))).seg)) {
__asm__ __volatile__(
"move\t$4, %1\n\t"
"move\t$5, %2\n\t"
"move\t$6, %3\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strncpy_from_kernel_nocheck_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (__to), "r" (__from), "r" (__len)
: "$2", "$3", "$4", "$5", "$6", "$8", "$31", "memory");
} else {
might_fault();
__asm__ __volatile__(
"move\t$4, %1\n\t"
"move\t$5, %2\n\t"
"move\t$6, %3\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strncpy_from_user_nocheck_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (__to), "r" (__from), "r" (__len)
: "$2", "$3", "$4", "$5", "$6", "$8", "$31", "memory");
}
return res;
}
# 1297 "./arch/mips/include/asm/uaccess.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long
strncpy_from_user(char *__to, const char *__from, long __len)
{
long res;
if ((((current_thread_info()->addr_limit)).seg == ((((mm_segment_t) { 0UL }))).seg)) {
__asm__ __volatile__(
"move\t$4, %1\n\t"
"move\t$5, %2\n\t"
"move\t$6, %3\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strncpy_from_kernel_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (__to), "r" (__from), "r" (__len)
: "$2", "$3", "$4", "$5", "$6", "$8", "$31", "memory");
} else {
might_fault();
__asm__ __volatile__(
"move\t$4, %1\n\t"
"move\t$5, %2\n\t"
"move\t$6, %3\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strncpy_from_user_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (__to), "r" (__from), "r" (__len)
: "$2", "$3", "$4", "$5", "$6", "$8", "$31", "memory");
}
return res;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long __strlen_user(const char *s)
{
long res;
if ((((current_thread_info()->addr_limit)).seg == ((((mm_segment_t) { 0UL }))).seg)) {
__asm__ __volatile__(
"move\t$4, %1\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strlen_kernel_nocheck_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (s)
: "$2", "$4", "$8", "$31");
} else {
might_fault();
__asm__ __volatile__(
"move\t$4, %1\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strlen_user_nocheck_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (s)
: "$2", "$4", "$8", "$31");
}
return res;
}
# 1369 "./arch/mips/include/asm/uaccess.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long strlen_user(const char *s)
{
long res;
if ((((current_thread_info()->addr_limit)).seg == ((((mm_segment_t) { 0UL }))).seg)) {
__asm__ __volatile__(
"move\t$4, %1\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strlen_kernel_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (s)
: "$2", "$4", "$8", "$31");
} else {
might_fault();
__asm__ __volatile__(
"move\t$4, %1\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strlen_kernel_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (s)
: "$2", "$4", "$8", "$31");
}
return res;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long __strnlen_user(const char *s, long n)
{
long res;
if ((((current_thread_info()->addr_limit)).seg == ((((mm_segment_t) { 0UL }))).seg)) {
__asm__ __volatile__(
"move\t$4, %1\n\t"
"move\t$5, %2\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strnlen_kernel_nocheck_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (s), "r" (n)
: "$2", "$4", "$5", "$8", "$31");
} else {
might_fault();
__asm__ __volatile__(
"move\t$4, %1\n\t"
"move\t$5, %2\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strnlen_user_nocheck_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (s), "r" (n)
: "$2", "$4", "$5", "$8", "$31");
}
return res;
}
# 1436 "./arch/mips/include/asm/uaccess.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long strnlen_user(const char *s, long n)
{
long res;
might_fault();
if ((((current_thread_info()->addr_limit)).seg == ((((mm_segment_t) { 0UL }))).seg)) {
__asm__ __volatile__(
"move\t$4, %1\n\t"
"move\t$5, %2\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strnlen_kernel_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (s), "r" (n)
: "$2", "$4", "$5", "$8", "$31");
} else {
__asm__ __volatile__(
"move\t$4, %1\n\t"
"move\t$5, %2\n\t"
".set\tnoat\n\t" "la" "\t$1, " "__strnlen_user_asm" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t"
"move\t%0, $2"
: "=r" (res)
: "r" (s), "r" (n)
: "$2", "$4", "$5", "$8", "$31");
}
return res;
}
struct exception_table_entry
{
unsigned long insn;
unsigned long nextinsn;
};
extern int fixup_exception(struct pt_regs *regs);
# 7 "./arch/mips/include/asm/module.h" 2
struct mod_arch_specific {
struct list_head dbe_list;
const struct exception_table_entry *dbe_start;
const struct exception_table_entry *dbe_end;
struct mips_hi16 *r_mips_hi16_list;
};
typedef uint8_t Elf64_Byte;
typedef struct {
Elf64_Addr r_offset;
Elf64_Word r_sym;
Elf64_Byte r_ssym;
Elf64_Byte r_type3;
Elf64_Byte r_type2;
Elf64_Byte r_type;
} Elf64_Mips_Rel;
typedef struct {
Elf64_Addr r_offset;
Elf64_Word r_sym;
Elf64_Byte r_ssym;
Elf64_Byte r_type3;
Elf64_Byte r_type2;
Elf64_Byte r_type;
Elf64_Sxword r_addend;
} Elf64_Mips_Rela;
# 75 "./arch/mips/include/asm/module.h"
const struct exception_table_entry*search_module_dbetables(unsigned long addr);
# 23 "include/linux/module.h" 2
# 32 "include/linux/module.h"
struct modversion_info {
unsigned long crc;
char name[(64 - sizeof(unsigned long))];
};
struct module;
struct module_kobject {
struct kobject kobj;
struct module *mod;
struct kobject *drivers_dir;
struct module_param_attrs *mp;
struct completion *kobj_completion;
};
struct module_attribute {
struct attribute attr;
ssize_t (*show)(struct module_attribute *, struct module_kobject *,
char *);
ssize_t (*store)(struct module_attribute *, struct module_kobject *,
const char *, size_t count);
void (*setup)(struct module *, const char *);
int (*test)(struct module *);
void (*free)(struct module *);
};
struct module_version_attribute {
struct module_attribute mattr;
const char *module_name;
const char *version;
} __attribute__ ((__aligned__(sizeof(void *))));
extern ssize_t __modver_version_show(struct module_attribute *,
struct module_kobject *, char *);
extern struct module_attribute module_uevent;
extern int init_module(void);
extern void cleanup_module(void);
struct exception_table_entry;
const struct exception_table_entry *
search_extable(const struct exception_table_entry *first,
const struct exception_table_entry *last,
unsigned long value);
void sort_extable(struct exception_table_entry *start,
struct exception_table_entry *finish);
void sort_main_extable(void);
void trim_init_extable(struct module *m);
# 187 "include/linux/module.h"
const struct exception_table_entry *search_exception_tables(unsigned long add);
struct notifier_block;
extern int modules_disabled;
void *__symbol_get(const char *symbol);
void *__symbol_get_gpl(const char *symbol);
struct module_use {
struct list_head source_list;
struct list_head target_list;
struct module *source, *target;
};
enum module_state {
MODULE_STATE_LIVE,
MODULE_STATE_COMING,
MODULE_STATE_GOING,
MODULE_STATE_UNFORMED,
};
# 222 "include/linux/module.h"
struct module_ref {
unsigned long incs;
unsigned long decs;
} __attribute((aligned(2 * sizeof(unsigned long))));
struct module {
enum module_state state;
struct list_head list;
char name[(64 - sizeof(unsigned long))];
struct module_kobject mkobj;
struct module_attribute *modinfo_attrs;
const char *version;
const char *srcversion;
struct kobject *holders_dir;
const struct kernel_symbol *syms;
const unsigned long *crcs;
unsigned int num_syms;
struct kernel_param *kp;
unsigned int num_kp;
unsigned int num_gpl_syms;
const struct kernel_symbol *gpl_syms;
const unsigned long *gpl_crcs;
# 275 "include/linux/module.h"
const struct kernel_symbol *gpl_future_syms;
const unsigned long *gpl_future_crcs;
unsigned int num_gpl_future_syms;
unsigned int num_exentries;
struct exception_table_entry *extable;
int (*init)(void);
void *module_init;
void *module_core;
unsigned int init_size, core_size;
unsigned int init_text_size, core_text_size;
unsigned int init_ro_size, core_ro_size;
struct mod_arch_specific arch;
unsigned int taints;
# 319 "include/linux/module.h"
Elf32_Sym *symtab, *core_symtab;
unsigned int num_symtab, core_num_syms;
char *strtab, *core_strtab;
struct module_sect_attrs *sect_attrs;
struct module_notes_attrs *notes_attrs;
char *args;
void *percpu;
unsigned int percpu_size;
# 363 "include/linux/module.h"
struct list_head source_list;
struct list_head target_list;
void (*exit)(void);
struct module_ref *refptr;
};
extern struct mutex module_mutex;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int module_is_live(struct module *mod)
{
return mod->state != MODULE_STATE_GOING;
}
struct module *__module_text_address(unsigned long addr);
struct module *__module_address(unsigned long addr);
bool is_module_address(unsigned long addr);
bool is_module_percpu_address(unsigned long addr);
bool is_module_text_address(unsigned long addr);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool within_module_core(unsigned long addr,
const struct module *mod)
{
return (unsigned long)mod->module_core <= addr &&
addr < (unsigned long)mod->module_core + mod->core_size;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool within_module_init(unsigned long addr,
const struct module *mod)
{
return (unsigned long)mod->module_init <= addr &&
addr < (unsigned long)mod->module_init + mod->init_size;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool within_module(unsigned long addr, const struct module *mod)
{
return within_module_init(addr, mod) || within_module_core(addr, mod);
}
struct module *find_module(const char *name);
struct symsearch {
const struct kernel_symbol *start, *stop;
const unsigned long *crcs;
enum {
NOT_GPL_ONLY,
GPL_ONLY,
WILL_BE_GPL_ONLY,
} licence;
bool unused;
};
const struct kernel_symbol *find_symbol(const char *name,
struct module **owner,
const unsigned long **crc,
bool gplok,
bool warn);
bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
struct module *owner,
void *data), void *data);
int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
char *name, char *module_name, int *exported);
unsigned long module_kallsyms_lookup_name(const char *name);
int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
struct module *, unsigned long),
void *data);
extern void __module_put_and_exit(struct module *mod, long code)
__attribute__((noreturn));
unsigned long module_refcount(struct module *mod);
void __symbol_put(const char *symbol);
void symbol_put_addr(void *addr);
extern void __module_get(struct module *module);
extern bool try_module_get(struct module *module);
extern void module_put(struct module *module);
# 491 "include/linux/module.h"
int ref_module(struct module *a, struct module *b);
# 503 "include/linux/module.h"
const char *module_address_lookup(unsigned long addr,
unsigned long *symbolsize,
unsigned long *offset,
char **modname,
char *namebuf);
int lookup_module_symbol_name(unsigned long addr, char *symname);
int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
const struct exception_table_entry *search_module_extables(unsigned long addr);
int register_module_notifier(struct notifier_block *nb);
int unregister_module_notifier(struct notifier_block *nb);
extern void print_modules(void);
# 632 "include/linux/module.h"
extern struct kset *module_kset;
extern struct kobj_type module_ktype;
extern int module_sysfs_initialized;
# 647 "include/linux/module.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_all_modules_text_rw(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_all_modules_text_ro(void) { }
# 658 "include/linux/module.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void module_bug_finalize(const Elf32_Ehdr *hdr,
const Elf32_Shdr *sechdrs,
struct module *mod)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void module_bug_cleanup(struct module *mod) {}
# 7 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/i2c.h" 1
# 107 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/i2c.h"
int i2c_init(void) ;
void i2c_exit(void) ;
uint ioReadPhyReg32(ushort phyReg) ;
int ioWritePhyReg32(ushort phyReg, uint value) ;
int ioWritePhyReg8(ushort phyReg, unchar value) ;
# 10 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_def.h" 1
# 1 "include/linux/mtd/rt_flash.h" 1
# 1 "./arch/mips/include/asm/tc3162/tc3162.h" 1
# 94 "./arch/mips/include/asm/tc3162/tc3162.h"
# 1 "./arch/mips/include/asm/tc3162/./tc3182_int_source.h" 1
# 20 "./arch/mips/include/asm/tc3162/./tc3182_int_source.h"
enum
interrupt_source
{
DUMMY_INT,
UART_INT,
PTM_B0_INT,
SI_SWINT1_INT0,
SI_SWINT1_INT1,
TIMER0_INT,
TIMER1_INT,
TIMER2_INT,
SI_SWINT_INT0,
SI_SWINT_INT1,
TIMER5_INT,
GPIO_INT,
RESERVED1,
SI_PC1_INT,
SI_PC_INT,
APB_DMA0_INT,
MAC1_INT,
HSUART_INT,
IRQ_RT3XXX_USB,
DYINGGASP_INT,
DMT_INT,
USB20_INT,
MAC_INT,
SAR_INT,
USB11_INT,
PCIE_A_INT,
PCIE_SERR_INT,
PTM_B1_INT,
XSLV1_INT,
USB_INT,
SI_TIMER1_INT,
SI_TIMER_INT,
SWR_INT,
BUS_TOUT_INT,
RESERVE_A_INT,
RESERVE_B_INT,
RESERVE_C_INT,
AUTO_MANUAL_INT
};
# 95 "./arch/mips/include/asm/tc3162/tc3162.h" 2
typedef signed long int int32;
typedef signed long int sint31;
typedef unsigned long int uint32;
typedef signed short sint15;
typedef signed short int int16;
typedef unsigned short uint16;
typedef signed char sint7;
typedef unsigned char uint8;
# 167 "./arch/mips/include/asm/tc3162/tc3162.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) uint32 regRead32(uint32 reg)
{
return *(volatile unsigned long int *)(reg);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void regWrite32(uint32 reg, uint32 vlaue)
{
*(volatile unsigned long int *)(reg) = vlaue;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long int regReadPhy32(uint32 reg)
{
uint32 tmp;
tmp = *(volatile unsigned long int *)(reg);
tmp = *(volatile unsigned long int *)(reg);
return tmp;
}
# 798 "./arch/mips/include/asm/tc3162/tc3162.h"
enum
interrupt_priority
{
IPL0, IPL1, IPL2, IPL3, IPL4,
IPL5, IPL6, IPL7, IPL8, IPL9,
IPL10, IPL11, IPL12, IPL13, IPL14,
IPL15, IPL16, IPL17, IPL18, IPL19,
IPL20, IPL21, IPL22, IPL23, IPL24,
IPL25, IPL26, IPL27, IPL28, IPL29,
IPL30, IPL31
};
# 5 "include/linux/mtd/rt_flash.h" 2
extern unsigned char ReadSPIByte(unsigned long index);
extern unsigned long ReadSPIDWord(unsigned long index);
# 44 "include/linux/mtd/rt_flash.h"
extern unsigned long flash_base;
extern unsigned int (*ranand_read_byte)(unsigned long long);
extern unsigned int (*ranand_read_dword)(unsigned long long);
# 4 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_def.h" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_reg.h" 1
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_reg_util.h" 1
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/i2c.h" 1
# 6 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_reg_util.h" 2
# 50 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_reg_util.h"
static uint __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) GetReg(uint reg)
{
return ioread32((void *)reg) ;
}
static void __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) SetReg(uint reg, uint value)
{
iowrite32(value, (void *)reg) ;
}
# 74 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_reg_util.h"
static uint __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) GetRegMask(uint reg, uint mask, uint shift)
{
return (((ioread32((void *)reg))>>shift) & mask) ;
}
# 87 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_reg_util.h"
static void __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) SetRegMask(uint reg, uint mask, uint shift, uint value)
{
uint data = ioread32((void *)reg) ;
data = (data & ~(mask<<shift)) | ((value&mask)<<shift) ;
iowrite32(data, (void *)reg) ;
}
static void __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) SetBits(uint reg, uint bits)
{
uint data = ioread32((void *)reg) ;
data |= bits ;
iowrite32(data, (void *)reg) ;
}
static void __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) ClearBits(uint reg, uint bits)
{
uint data =ioread32((void *)reg) ;
data &= ~bits ;
iowrite32(data, (void *)reg) ;
}
# 5 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_reg.h" 2
# 9 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_def.h" 2
# 337 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_def.h"
typedef enum {
PHY_GPON_M1_LMT_EN = 0x01,
PHY_GPON_M2_LMT_EN = 0x02,
PHY_PRESYNC_MIS_LMT_EN = 0x04,
PHY_INSYNC_MIS_LMT_EN = 0x08,
PHY_GPON_GSYNC_PROT_EN = 0x10
} ENUM_GponRxCtl_T ;
typedef struct
{
unchar gpon_m1_lmt;
unchar gpon_m2_lmt;
unchar presync_mismatch_lmt;
unchar insync_mismatch_lmt;
unchar gpon_gsync_prot;
uint mask;
}PHY_GponRxCtl_T,*PPHY_GponRxCtl_T;
# 373 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_def.h"
typedef struct
{
ushort rx_power_high_alarm_thod;
ushort rx_power_low_alarm_thod;
ushort tx_power_high_alarm_thod;
ushort tx_power_low_alarm_thod;
}PHY_TransAlarm_T, *PPHY_TransAlarm_T;
# 11 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/mt7570_reg.h" 1
# 12 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/mt7570_def.h" 1
# 13 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_global.h" 1
# 1 "include/linux/skbuff.h" 1
# 18 "include/linux/skbuff.h"
# 1 "include/linux/kmemcheck.h" 1
# 1 "include/linux/mm_types.h" 1
# 1 "include/linux/auxvec.h" 1
# 1 "include/uapi/linux/auxvec.h" 1
# 1 "arch/mips/include/generated/uapi/asm/auxvec.h" 1
# 1 "./include/uapi/asm-generic/auxvec.h" 1
# 1 "arch/mips/include/generated/uapi/asm/auxvec.h" 2
# 5 "include/uapi/linux/auxvec.h" 2
# 5 "include/linux/auxvec.h" 2
# 5 "include/linux/mm_types.h" 2
# 13 "include/linux/mm_types.h"
# 1 "include/linux/page-debug-flags.h" 1
# 14 "include/linux/page-debug-flags.h"
enum page_debug_flags {
PAGE_DEBUG_FLAG_POISON,
PAGE_DEBUG_FLAG_GUARD,
};
# 14 "include/linux/mm_types.h" 2
# 1 "include/linux/uprobes.h" 1
# 31 "include/linux/uprobes.h"
struct vm_area_struct;
struct mm_struct;
struct inode;
struct notifier_block;
struct page;
enum uprobe_filter_ctx {
UPROBE_FILTER_REGISTER,
UPROBE_FILTER_UNREGISTER,
UPROBE_FILTER_MMAP,
};
struct uprobe_consumer {
int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs);
int (*ret_handler)(struct uprobe_consumer *self,
unsigned long func,
struct pt_regs *regs);
bool (*filter)(struct uprobe_consumer *self,
enum uprobe_filter_ctx ctx,
struct mm_struct *mm);
struct uprobe_consumer *next;
};
# 135 "include/linux/uprobes.h"
struct uprobes_state {
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool add)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int uprobe_mmap(struct vm_area_struct *vma)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
uprobe_munmap(struct vm_area_struct *vma, unsigned long start, unsigned long end)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void uprobe_start_dup_mmap(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void uprobe_end_dup_mmap(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
uprobe_dup_mmap(struct mm_struct *oldmm, struct mm_struct *newmm)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void uprobe_notify_resume(struct pt_regs *regs)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool uprobe_deny_signal(void)
{
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void uprobe_free_utask(struct task_struct *t)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void uprobe_copy_process(struct task_struct *t, unsigned long flags)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void uprobe_clear_state(struct mm_struct *mm)
{
}
# 15 "include/linux/mm_types.h" 2
# 1 "./arch/mips/include/asm/mmu.h" 1
typedef struct {
unsigned long asid[2];
void *vdso;
} mm_context_t;
# 18 "include/linux/mm_types.h" 2
struct address_space;
# 44 "include/linux/mm_types.h"
struct page {
unsigned long flags;
union {
struct address_space *mapping;
void *s_mem;
};
struct {
union {
unsigned long index;
void *freelist;
bool pfmemalloc;
# 73 "include/linux/mm_types.h"
};
union {
# 86 "include/linux/mm_types.h"
unsigned counters;
struct {
union {
# 108 "include/linux/mm_types.h"
atomic_t _mapcount;
struct {
unsigned inuse:16;
unsigned objects:15;
unsigned frozen:1;
};
int units;
};
atomic_t _count;
};
unsigned int active;
};
};
union {
struct list_head lru;
struct {
struct page *next;
short int pages;
short int pobjects;
};
struct slab *slab_page;
struct callback_head callback_head;
};
union {
unsigned long private;
# 166 "include/linux/mm_types.h"
struct kmem_cache *slab_cache;
struct page *first_page;
};
# 199 "include/linux/mm_types.h"
}
;
struct page_frag {
struct page *page;
__u16 offset;
__u16 size;
};
typedef unsigned long vm_flags_t;
struct vm_region {
struct rb_node vm_rb;
vm_flags_t vm_flags;
unsigned long vm_start;
unsigned long vm_end;
unsigned long vm_top;
unsigned long vm_pgoff;
struct file *vm_file;
int vm_usage;
bool vm_icache_flushed : 1;
};
struct vm_area_struct {
unsigned long vm_start;
unsigned long vm_end;
struct vm_area_struct *vm_next, *vm_prev;
struct rb_node vm_rb;
unsigned long rb_subtree_gap;
struct mm_struct *vm_mm;
pgprot_t vm_page_prot;
unsigned long vm_flags;
union {
struct {
struct rb_node rb;
unsigned long rb_subtree_last;
} linear;
struct list_head nonlinear;
} shared;
struct list_head anon_vma_chain;
struct anon_vma *anon_vma;
const struct vm_operations_struct *vm_ops;
unsigned long vm_pgoff;
struct file * vm_file;
void * vm_private_data;
};
struct core_thread {
struct task_struct *task;
struct core_thread *next;
};
struct core_state {
atomic_t nr_threads;
struct core_thread dumper;
struct completion startup;
};
enum {
MM_FILEPAGES,
MM_ANONPAGES,
MM_SWAPENTS,
NR_MM_COUNTERS
};
# 340 "include/linux/mm_types.h"
struct mm_rss_stat {
atomic_long_t count[NR_MM_COUNTERS];
};
struct kioctx_table;
struct mm_struct {
struct vm_area_struct *mmap;
struct rb_root mm_rb;
u32 vmacache_seqnum;
unsigned long (*get_unmapped_area) (struct file *filp,
unsigned long addr, unsigned long len,
unsigned long pgoff, unsigned long flags);
unsigned long mmap_base;
unsigned long mmap_legacy_base;
unsigned long task_size;
unsigned long highest_vm_end;
pgd_t * pgd;
atomic_t mm_users;
atomic_t mm_count;
atomic_long_t nr_ptes;
int map_count;
spinlock_t page_table_lock;
struct rw_semaphore mmap_sem;
struct list_head mmlist;
unsigned long hiwater_rss;
unsigned long hiwater_vm;
unsigned long total_vm;
unsigned long locked_vm;
unsigned long pinned_vm;
unsigned long shared_vm;
unsigned long exec_vm;
unsigned long stack_vm;
unsigned long def_flags;
unsigned long start_code, end_code, start_data, end_data;
unsigned long start_brk, brk, start_stack;
unsigned long arg_start, arg_end, env_start, env_end;
unsigned long saved_auxv[(2*(0 + 20 + 1))];
struct mm_rss_stat rss_stat;
struct linux_binfmt *binfmt;
cpumask_var_t cpu_vm_mask_var;
mm_context_t context;
unsigned long flags;
struct core_state *core_state;
spinlock_t ioctx_lock;
struct kioctx_table *ioctx_table;
# 424 "include/linux/mm_types.h"
struct file *exe_file;
# 454 "include/linux/mm_types.h"
bool tlb_flush_pending;
struct uprobes_state uprobes_state;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void mm_init_cpumask(struct mm_struct *mm)
{
cpumask_clear(mm->cpu_vm_mask_var);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) cpumask_t *mm_cpumask(struct mm_struct *mm)
{
return mm->cpu_vm_mask_var;
}
# 480 "include/linux/mm_types.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool mm_tlb_flush_pending(struct mm_struct *mm)
{
__asm__ __volatile__("": : :"memory");
return mm->tlb_flush_pending;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_tlb_flush_pending(struct mm_struct *mm)
{
mm->tlb_flush_pending = true;
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clear_tlb_flush_pending(struct mm_struct *mm)
{
__asm__ __volatile__("": : :"memory");
mm->tlb_flush_pending = false;
}
# 514 "include/linux/mm_types.h"
struct vm_special_mapping
{
const char *name;
struct page **pages;
};
enum tlb_flush_reason {
TLB_FLUSH_ON_TASK_SWITCH,
TLB_REMOTE_SHOOTDOWN,
TLB_LOCAL_SHOOTDOWN,
TLB_LOCAL_MM_SHOOTDOWN,
NR_TLB_FLUSH_REASONS,
};
# 5 "include/linux/kmemcheck.h" 2
# 92 "include/linux/kmemcheck.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
kmemcheck_alloc_shadow(struct page *page, int order, gfp_t flags, int node)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
kmemcheck_free_shadow(struct page *page, int order)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
kmemcheck_slab_alloc(struct kmem_cache *s, gfp_t gfpflags, void *object,
size_t size)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemcheck_slab_free(struct kmem_cache *s, void *object,
size_t size)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemcheck_pagealloc_alloc(struct page *p,
unsigned int order, gfp_t gfpflags)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool kmemcheck_page_is_tracked(struct page *p)
{
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemcheck_mark_unallocated(void *address, unsigned int n)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemcheck_mark_uninitialized(void *address, unsigned int n)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemcheck_mark_initialized(void *address, unsigned int n)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemcheck_mark_freed(void *address, unsigned int n)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemcheck_mark_unallocated_pages(struct page *p,
unsigned int n)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemcheck_mark_uninitialized_pages(struct page *p,
unsigned int n)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void kmemcheck_mark_initialized_pages(struct page *p,
unsigned int n)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size)
{
return true;
}
# 19 "include/linux/skbuff.h" 2
# 27 "include/linux/skbuff.h"
# 1 "include/linux/net.h" 1
# 22 "include/linux/net.h"
# 1 "include/linux/random.h" 1
# 9 "include/linux/random.h"
# 1 "include/uapi/linux/random.h" 1
# 12 "include/uapi/linux/random.h"
# 1 "include/linux/irqnr.h" 1
# 1 "include/uapi/linux/irqnr.h" 1
# 5 "include/linux/irqnr.h" 2
extern int nr_irqs;
extern struct irq_desc *irq_to_desc(unsigned int irq);
unsigned int irq_get_next_irq(unsigned int offset);
# 13 "include/uapi/linux/random.h" 2
# 37 "include/uapi/linux/random.h"
struct rand_pool_info {
int entropy_count;
int buf_size;
__u32 buf[0];
};
# 10 "include/linux/random.h" 2
extern void add_device_randomness(const void *, unsigned int);
extern void add_input_randomness(unsigned int type, unsigned int code,
unsigned int value);
extern void add_interrupt_randomness(int irq, int irq_flags);
extern void get_random_bytes(void *buf, int nbytes);
extern void get_random_bytes_arch(void *buf, int nbytes);
void generate_random_uuid(unsigned char uuid_out[16]);
extern int random_int_secret_init(void);
unsigned int get_random_int(void);
unsigned long randomize_range(unsigned long start, unsigned long end, unsigned long len);
u32 prandom_u32(void);
void prandom_bytes(void *buf, size_t nbytes);
void prandom_seed(u32 seed);
void prandom_reseed_late(void);
struct rnd_state {
__u32 s1, s2, s3, s4;
};
u32 prandom_u32_state(struct rnd_state *state);
void prandom_bytes_state(struct rnd_state *state, void *buf, size_t nbytes);
# 52 "include/linux/random.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 prandom_u32_max(u32 ep_ro)
{
return (u32)(((u64) prandom_u32() * ep_ro) >> 32);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 __seed(u32 x, u32 m)
{
return (x < m) ? x + m : x;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void prandom_seed_state(struct rnd_state *state, u64 seed)
{
u32 i = (seed >> 32) ^ (seed << 10) ^ seed;
state->s1 = __seed(i, 2U);
state->s2 = __seed(i, 8U);
state->s3 = __seed(i, 16U);
state->s4 = __seed(i, 128U);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_get_random_long(unsigned long *v)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_get_random_int(unsigned int *v)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_has_random(void)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_get_random_seed_long(unsigned long *v)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_get_random_seed_int(unsigned int *v)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int arch_has_random_seed(void)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 next_pseudo_random32(u32 seed)
{
return seed * 1664525 + 1013904223;
}
# 23 "include/linux/net.h" 2
# 1 "include/uapi/linux/net.h" 1
# 21 "include/uapi/linux/net.h"
# 1 "include/linux/socket.h" 1
# 1 "./arch/mips/include/asm/socket.h" 1
# 12 "./arch/mips/include/asm/socket.h"
# 1 "./arch/mips/include/uapi/asm/socket.h" 1
# 12 "./arch/mips/include/uapi/asm/socket.h"
# 1 "./arch/mips/include/uapi/asm/sockios.h" 1
# 13 "./arch/mips/include/uapi/asm/socket.h" 2
# 13 "./arch/mips/include/asm/socket.h" 2
# 29 "./arch/mips/include/asm/socket.h"
enum sock_type {
SOCK_DGRAM = 1,
SOCK_STREAM = 2,
SOCK_RAW = 3,
SOCK_RDM = 4,
SOCK_SEQPACKET = 5,
SOCK_DCCP = 6,
SOCK_PACKET = 10,
};
# 6 "include/linux/socket.h" 2
# 1 "./include/uapi/linux/sockios.h" 1
# 7 "include/linux/socket.h" 2
# 1 "include/linux/uio.h" 1
# 13 "include/linux/uio.h"
# 1 "include/uapi/linux/uio.h" 1
# 16 "include/uapi/linux/uio.h"
struct iovec
{
void *iov_base;
__kernel_size_t iov_len;
};
# 14 "include/linux/uio.h" 2
struct page;
struct kvec {
void *iov_base;
size_t iov_len;
};
enum {
ITER_IOVEC = 0,
ITER_KVEC = 2,
ITER_BVEC = 4,
};
struct iov_iter {
int type;
size_t iov_offset;
size_t count;
union {
const struct iovec *iov;
const struct bio_vec *bvec;
};
unsigned long nr_segs;
};
# 46 "include/linux/uio.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) size_t iov_length(const struct iovec *iov, unsigned long nr_segs)
{
unsigned long seg;
size_t ret = 0;
for (seg = 0; seg < nr_segs; seg++)
ret += iov[seg].iov_len;
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct iovec iov_iter_iovec(const struct iov_iter *iter)
{
return (struct iovec) {
.iov_base = iter->iov->iov_base + iter->iov_offset,
.iov_len = ({ typeof(iter->count) _min1 = (iter->count); typeof(iter->iov->iov_len - iter->iov_offset) _min2 = (iter->iov->iov_len - iter->iov_offset); (void) (&_min1 == &_min2); _min1 < _min2 ? _min1 : _min2; })
,
};
}
# 72 "include/linux/uio.h"
unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to);
size_t iov_iter_copy_from_user_atomic(struct page *page,
struct iov_iter *i, unsigned long offset, size_t bytes);
void iov_iter_advance(struct iov_iter *i, size_t bytes);
int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes);
size_t iov_iter_single_seg_count(const struct iov_iter *i);
size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes,
struct iov_iter *i);
size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes,
struct iov_iter *i);
size_t copy_to_iter(void *addr, size_t bytes, struct iov_iter *i);
size_t copy_from_iter(void *addr, size_t bytes, struct iov_iter *i);
size_t iov_iter_zero(size_t bytes, struct iov_iter *);
unsigned long iov_iter_alignment(const struct iov_iter *i);
void iov_iter_init(struct iov_iter *i, int direction, const struct iovec *iov,
unsigned long nr_segs, size_t count);
ssize_t iov_iter_get_pages(struct iov_iter *i, struct page **pages,
size_t maxsize, unsigned maxpages, size_t *start);
ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, struct page ***pages,
size_t maxsize, size_t *start);
int iov_iter_npages(const struct iov_iter *i, int maxpages);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) size_t iov_iter_count(struct iov_iter *i)
{
return i->count;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void iov_iter_truncate(struct iov_iter *i, u64 count)
{
if (i->count > count)
i->count = count;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void iov_iter_reexpand(struct iov_iter *i, size_t count)
{
i->count = count;
}
int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
int memcpy_toiovec(struct iovec *iov, unsigned char *kdata, int len);
int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov,
int offset, int len);
int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata,
int offset, int len);
# 8 "include/linux/socket.h" 2
# 1 "include/uapi/linux/socket.h" 1
# 11 "include/uapi/linux/socket.h"
typedef unsigned short __kernel_sa_family_t;
struct __kernel_sockaddr_storage {
__kernel_sa_family_t ss_family;
char __data[128 - sizeof(unsigned short)];
} __attribute__ ((aligned((__alignof__ (struct sockaddr *)))));
# 11 "include/linux/socket.h" 2
struct pid;
struct cred;
struct seq_file;
extern void socket_seq_show(struct seq_file *seq);
typedef __kernel_sa_family_t sa_family_t;
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
};
struct linger {
int l_onoff;
int l_linger;
};
# 47 "include/linux/socket.h"
struct msghdr {
void *msg_name;
int msg_namelen;
struct iovec *msg_iov;
__kernel_size_t msg_iovlen;
void *msg_control;
__kernel_size_t msg_controllen;
unsigned int msg_flags;
};
struct mmsghdr {
struct msghdr msg_hdr;
unsigned int msg_len;
};
struct cmsghdr {
__kernel_size_t cmsg_len;
int cmsg_level;
int cmsg_type;
};
# 111 "include/linux/socket.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size,
struct cmsghdr *__cmsg)
{
struct cmsghdr * __ptr;
__ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + ( ((__cmsg->cmsg_len)+sizeof(long)-1) & ~(sizeof(long)-1) ));
if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
return (struct cmsghdr *)0;
return __ptr;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg)
{
return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
}
struct ucred {
__u32 pid;
__u32 uid;
__u32 gid;
};
# 308 "include/linux/socket.h"
extern int csum_partial_copy_fromiovecend(unsigned char *kdata,
struct iovec *iov,
int offset,
unsigned int len, __wsum *csump);
extern unsigned long iov_pages(const struct iovec *iov, int offset,
unsigned long nr_segs);
extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct __kernel_sockaddr_storage *address, int mode);
extern int move_addr_to_kernel(void *uaddr, int ulen, struct __kernel_sockaddr_storage *kaddr);
extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data);
struct timespec;
extern long __sys_recvmsg(int fd, struct msghdr *msg, unsigned flags);
extern long __sys_sendmsg(int fd, struct msghdr *msg, unsigned flags);
extern int __sys_recvmmsg(int fd, struct mmsghdr *mmsg, unsigned int vlen,
unsigned int flags, struct timespec *timeout);
extern int __sys_sendmmsg(int fd, struct mmsghdr *mmsg,
unsigned int vlen, unsigned int flags);
# 22 "include/uapi/linux/net.h" 2
# 47 "include/uapi/linux/net.h"
typedef enum {
SS_FREE = 0,
SS_UNCONNECTED,
SS_CONNECTING,
SS_CONNECTED,
SS_DISCONNECTING
} socket_state;
# 29 "include/linux/net.h" 2
struct poll_table_struct;
struct pipe_inode_info;
struct inode;
struct file;
struct net;
# 82 "include/linux/net.h"
enum sock_shutdown_cmd {
SHUT_RD,
SHUT_WR,
SHUT_RDWR,
};
struct socket_wq {
wait_queue_head_t wait;
struct fasync_struct *fasync_list;
struct callback_head rcu;
} __attribute__((__aligned__((1 << 5))));
# 105 "include/linux/net.h"
struct socket {
socket_state state;
;
short type;
;
unsigned long flags;
struct socket_wq *wq;
struct file *file;
struct sock *sk;
const struct proto_ops *ops;
};
struct vm_area_struct;
struct page;
struct kiocb;
struct sockaddr;
struct msghdr;
struct module;
struct proto_ops {
int family;
struct module *owner;
int (*release) (struct socket *sock);
int (*bind) (struct socket *sock,
struct sockaddr *myaddr,
int sockaddr_len);
int (*connect) (struct socket *sock,
struct sockaddr *vaddr,
int sockaddr_len, int flags);
int (*socketpair)(struct socket *sock1,
struct socket *sock2);
int (*accept) (struct socket *sock,
struct socket *newsock, int flags);
int (*getname) (struct socket *sock,
struct sockaddr *addr,
int *sockaddr_len, int peer);
unsigned int (*poll) (struct file *file, struct socket *sock,
struct poll_table_struct *wait);
int (*ioctl) (struct socket *sock, unsigned int cmd,
unsigned long arg);
int (*listen) (struct socket *sock, int len);
int (*shutdown) (struct socket *sock, int flags);
int (*setsockopt)(struct socket *sock, int level,
int optname, char *optval, unsigned int optlen);
int (*getsockopt)(struct socket *sock, int level,
int optname, char *optval, int *optlen);
int (*sendmsg) (struct kiocb *iocb, struct socket *sock,
struct msghdr *m, size_t total_len);
# 175 "include/linux/net.h"
int (*recvmsg) (struct kiocb *iocb, struct socket *sock,
struct msghdr *m, size_t total_len,
int flags);
int (*mmap) (struct file *file, struct socket *sock,
struct vm_area_struct * vma);
ssize_t (*sendpage) (struct socket *sock, struct page *page,
int offset, size_t size, int flags);
ssize_t (*splice_read)(struct socket *sock, loff_t *ppos,
struct pipe_inode_info *pipe, size_t len, unsigned int flags);
int (*set_peek_off)(struct sock *sk, int val);
};
struct net_proto_family {
int family;
int (*create)(struct net *net, struct socket *sock,
int protocol, int kern);
struct module *owner;
};
struct iovec;
struct kvec;
enum {
SOCK_WAKE_IO,
SOCK_WAKE_WAITD,
SOCK_WAKE_SPACE,
SOCK_WAKE_URG,
};
int sock_wake_async(struct socket *sk, int how, int band);
int sock_register(const struct net_proto_family *fam);
void sock_unregister(int family);
int __sock_create(struct net *net, int family, int type, int proto,
struct socket **res, int kern);
int sock_create(int family, int type, int proto, struct socket **res);
int sock_create_kern(int family, int type, int proto, struct socket **res);
int sock_create_lite(int family, int type, int proto, struct socket **res);
void sock_release(struct socket *sock);
int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t len);
int sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
int flags);
struct file *sock_alloc_file(struct socket *sock, int flags, const char *dname);
struct socket *sockfd_lookup(int fd, int *err);
struct socket *sock_from_file(struct file *file, int *err);
int net_ratelimit(void);
# 248 "include/linux/net.h"
bool __net_get_random_once(void *buf, int nbytes, bool *done,
struct static_key *done_key);
# 265 "include/linux/net.h"
int kernel_sendmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec,
size_t num, size_t len);
int kernel_recvmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec,
size_t num, size_t len, int flags);
int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen);
int kernel_listen(struct socket *sock, int backlog);
int kernel_accept(struct socket *sock, struct socket **newsock, int flags);
int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen,
int flags);
int kernel_getsockname(struct socket *sock, struct sockaddr *addr,
int *addrlen);
int kernel_getpeername(struct socket *sock, struct sockaddr *addr,
int *addrlen);
int kernel_getsockopt(struct socket *sock, int level, int optname, char *optval,
int *optlen);
int kernel_setsockopt(struct socket *sock, int level, int optname, char *optval,
unsigned int optlen);
int kernel_sendpage(struct socket *sock, struct page *page, int offset,
size_t size, int flags);
int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg);
int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how);
# 28 "include/linux/skbuff.h" 2
# 1 "include/linux/textsearch.h" 1
# 10 "include/linux/textsearch.h"
struct module;
struct ts_config;
# 22 "include/linux/textsearch.h"
struct ts_state
{
unsigned int offset;
char cb[40];
};
# 38 "include/linux/textsearch.h"
struct ts_ops
{
const char *name;
struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
unsigned int (*find)(struct ts_config *,
struct ts_state *);
void (*destroy)(struct ts_config *);
void * (*get_pattern)(struct ts_config *);
unsigned int (*get_pattern_len)(struct ts_config *);
struct module *owner;
struct list_head list;
};
# 58 "include/linux/textsearch.h"
struct ts_config
{
struct ts_ops *ops;
int flags;
# 75 "include/linux/textsearch.h"
unsigned int (*get_next_block)(unsigned int consumed,
const u8 **dst,
struct ts_config *conf,
struct ts_state *state);
# 88 "include/linux/textsearch.h"
void (*finish)(struct ts_config *conf,
struct ts_state *state);
};
# 104 "include/linux/textsearch.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int textsearch_next(struct ts_config *conf,
struct ts_state *state)
{
unsigned int ret = conf->ops->find(conf, state);
if (conf->finish)
conf->finish(conf, state);
return ret;
}
# 123 "include/linux/textsearch.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int textsearch_find(struct ts_config *conf,
struct ts_state *state)
{
state->offset = 0;
return textsearch_next(conf, state);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *textsearch_get_pattern(struct ts_config *conf)
{
return conf->ops->get_pattern(conf);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int textsearch_get_pattern_len(struct ts_config *conf)
{
return conf->ops->get_pattern_len(conf);
}
extern int textsearch_register(struct ts_ops *);
extern int textsearch_unregister(struct ts_ops *);
extern struct ts_config *textsearch_prepare(const char *, const void *,
unsigned int, gfp_t, int);
extern void textsearch_destroy(struct ts_config *conf);
extern unsigned int textsearch_find_continuous(struct ts_config *,
struct ts_state *,
const void *, unsigned int);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct ts_config *alloc_ts_config(size_t payload,
gfp_t gfp_mask)
{
struct ts_config *conf;
conf = kzalloc((((sizeof(*conf)) + 8 -1) & ~(8 -1)) + payload, gfp_mask);
if (conf == ((void *)0))
return ERR_PTR(-12);
return conf;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *ts_config_priv(struct ts_config *conf)
{
return ((u8 *) conf + (((sizeof(struct ts_config)) + 8 -1) & ~(8 -1)));
}
# 29 "include/linux/skbuff.h" 2
# 1 "include/net/checksum.h" 1
# 26 "include/net/checksum.h"
# 1 "./arch/mips/include/asm/checksum.h" 1
# 15 "./arch/mips/include/asm/checksum.h"
# 1 "include/linux/in6.h" 1
# 23 "include/linux/in6.h"
# 1 "include/uapi/linux/in6.h" 1
# 25 "include/uapi/linux/in6.h"
# 1 "./include/uapi/linux/libc-compat.h" 1
# 26 "include/uapi/linux/in6.h" 2
struct in6_addr {
union {
__u8 u6_addr8[16];
__be16 u6_addr16[8];
__be32 u6_addr32[4];
} in6_u;
};
struct sockaddr_in6 {
unsigned short int sin6_family;
__be16 sin6_port;
__be32 sin6_flowinfo;
struct in6_addr sin6_addr;
__u32 sin6_scope_id;
};
struct ipv6_mreq {
struct in6_addr ipv6mr_multiaddr;
int ipv6mr_ifindex;
};
struct in6_flowlabel_req {
struct in6_addr flr_dst;
__be32 flr_label;
__u8 flr_action;
__u8 flr_share;
__u16 flr_flags;
__u16 flr_expires;
__u16 flr_linger;
__u32 __flr_pad;
};
# 24 "include/linux/in6.h" 2
extern const struct in6_addr in6addr_any;
extern const struct in6_addr in6addr_loopback;
extern const struct in6_addr in6addr_linklocal_allnodes;
extern const struct in6_addr in6addr_linklocal_allrouters;
extern const struct in6_addr in6addr_interfacelocal_allnodes;
extern const struct in6_addr in6addr_interfacelocal_allrouters;
extern const struct in6_addr in6addr_sitelocal_allrouters;
# 16 "./arch/mips/include/asm/checksum.h" 2
# 31 "./arch/mips/include/asm/checksum.h"
__wsum csum_partial(const void *buff, int len, __wsum sum);
__wsum __csum_partial_copy_kernel(const void *src, void *dst,
int len, __wsum sum, int *err_ptr);
__wsum __csum_partial_copy_from_user(const void *src, void *dst,
int len, __wsum sum, int *err_ptr);
__wsum __csum_partial_copy_to_user(const void *src, void *dst,
int len, __wsum sum, int *err_ptr);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
__wsum csum_partial_copy_from_user(const void *src, void *dst, int len,
__wsum sum, int *err_ptr)
{
might_fault();
if ((((current_thread_info()->addr_limit)).seg == ((((mm_segment_t) { 0UL }))).seg))
return __csum_partial_copy_kernel(( void *)src, dst,
len, sum, err_ptr);
else
return __csum_partial_copy_from_user(( void *)src, dst,
len, sum, err_ptr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
__wsum csum_and_copy_from_user(const void *src, void *dst,
int len, __wsum sum, int *err_ptr)
{
if (__builtin_expect(!!(({ unsigned long __addr = (unsigned long) ((src)); unsigned long __size = (len); unsigned long __mask = (current_thread_info()->addr_limit).seg; unsigned long __ok; (void)0; __ok = (signed long)(__mask & (__addr | (__addr + __size) | ((__builtin_constant_p(__size) && (signed long) (__size) > 0) ? 0 : (__size)))); __ok == 0; })), 1))
return csum_partial_copy_from_user(src, dst, len, sum,
err_ptr);
if (len)
*err_ptr = -14;
return sum;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
__wsum csum_and_copy_to_user(const void *src, void *dst, int len,
__wsum sum, int *err_ptr)
{
might_fault();
if (__builtin_expect(!!(({ unsigned long __addr = (unsigned long) ((dst)); unsigned long __size = (len); unsigned long __mask = (current_thread_info()->addr_limit).seg; unsigned long __ok; (void)0; __ok = (signed long)(__mask & (__addr | (__addr + __size) | ((__builtin_constant_p(__size) && (signed long) (__size) > 0) ? 0 : (__size)))); __ok == 0; })), 1)) {
if ((((current_thread_info()->addr_limit)).seg == ((((mm_segment_t) { 0UL }))).seg))
return __csum_partial_copy_kernel(src,
( void *)dst,
len, sum, err_ptr);
else
return __csum_partial_copy_to_user(src,
( void *)dst,
len, sum, err_ptr);
}
if (len)
*err_ptr = -14;
return ( __wsum)-1;
}
__wsum csum_partial_copy_nocheck(const void *src, void *dst,
int len, __wsum sum);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 csum_fold(__wsum sum)
{
__asm__(
" .set push # csum_fold\n"
" .set noat \n"
" sll $1, %0, 16 \n"
" addu %0, $1 \n"
" sltu $1, %0, $1 \n"
" srl %0, %0, 16 \n"
" addu %0, $1 \n"
" xori %0, 0xffff \n"
" .set pop"
: "=r" (sum)
: "0" (sum));
return ( __sum16)sum;
}
# 131 "./arch/mips/include/asm/checksum.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
{
const unsigned int *word = iph;
const unsigned int *stop = word + ihl;
unsigned int csum;
int carry;
csum = word[0];
csum += word[1];
carry = (csum < word[1]);
csum += carry;
csum += word[2];
carry = (csum < word[2]);
csum += carry;
csum += word[3];
carry = (csum < word[3]);
csum += carry;
word += 4;
do {
csum += *word;
carry = (csum < *word);
csum += carry;
word++;
} while (word != stop);
return csum_fold(csum);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __wsum csum_tcpudp_nofold(__be32 saddr,
__be32 daddr, unsigned short len, unsigned short proto,
__wsum sum)
{
__asm__(
" .set push # csum_tcpudp_nofold\n"
" .set noat \n"
" addu %0, %2 \n"
" sltu $1, %0, %2 \n"
" addu %0, $1 \n"
" addu %0, %3 \n"
" sltu $1, %0, %3 \n"
" addu %0, $1 \n"
" addu %0, %4 \n"
" sltu $1, %0, %4 \n"
" addu %0, $1 \n"
# 190 "./arch/mips/include/asm/checksum.h"
" .set pop"
: "=r" (sum)
: "0" (( unsigned long)daddr),
"r" (( unsigned long)saddr),
"r" (proto + len),
"r" (( unsigned long)sum));
return sum;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
unsigned short len,
unsigned short proto,
__wsum sum)
{
return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 ip_compute_csum(const void *buff, int len)
{
return csum_fold(csum_partial(buff, len, 0));
}
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr,
__u32 len, unsigned short proto,
__wsum sum)
{
__asm__(
" .set push # csum_ipv6_magic\n"
" .set noreorder \n"
" .set noat \n"
" addu %0, %5 # proto (long in network byte order)\n"
" sltu $1, %0, %5 \n"
" addu %0, $1 \n"
" addu %0, %6 # csum\n"
" sltu $1, %0, %6 \n"
" lw %1, 0(%2) # four words source address\n"
" addu %0, $1 \n"
" addu %0, %1 \n"
" sltu $1, %0, %1 \n"
" lw %1, 4(%2) \n"
" addu %0, $1 \n"
" addu %0, %1 \n"
" sltu $1, %0, %1 \n"
" lw %1, 8(%2) \n"
" addu %0, $1 \n"
" addu %0, %1 \n"
" sltu $1, %0, %1 \n"
" lw %1, 12(%2) \n"
" addu %0, $1 \n"
" addu %0, %1 \n"
" sltu $1, %0, %1 \n"
" lw %1, 0(%3) \n"
" addu %0, $1 \n"
" addu %0, %1 \n"
" sltu $1, %0, %1 \n"
" lw %1, 4(%3) \n"
" addu %0, $1 \n"
" addu %0, %1 \n"
" sltu $1, %0, %1 \n"
" lw %1, 8(%3) \n"
" addu %0, $1 \n"
" addu %0, %1 \n"
" sltu $1, %0, %1 \n"
" lw %1, 12(%3) \n"
" addu %0, $1 \n"
" addu %0, %1 \n"
" sltu $1, %0, %1 \n"
" addu %0, $1 # Add final carry\n"
" .set pop"
: "=r" (sum), "=r" (proto)
: "r" (saddr), "r" (daddr),
"0" ((( __be32)(__u32)(len))), "1" ((( __be32)(__u32)(proto))), "r" (sum));
return csum_fold(sum);
}
# 27 "include/net/checksum.h" 2
# 61 "include/net/checksum.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __wsum csum_add(__wsum csum, __wsum addend)
{
u32 res = ( u32)csum;
res += ( u32)addend;
return ( __wsum)(res + (res < ( u32)addend));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __wsum csum_sub(__wsum csum, __wsum addend)
{
return csum_add(csum, ~addend);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 csum16_add(__sum16 csum, __be16 addend)
{
u16 res = ( u16)csum;
res += ( u16)addend;
return ( __sum16)(res + (res < ( u16)addend));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 csum16_sub(__sum16 csum, __be16 addend)
{
return csum16_add(csum, ~addend);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __wsum
csum_block_add(__wsum csum, __wsum csum2, int offset)
{
u32 sum = ( u32)csum2;
if (offset&1)
sum = ((sum&0xFF00FF)<<8)+((sum>>8)&0xFF00FF);
return csum_add(csum, ( __wsum)sum);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __wsum
csum_block_add_ext(__wsum csum, __wsum csum2, int offset, int len)
{
return csum_block_add(csum, csum2, offset);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __wsum
csum_block_sub(__wsum csum, __wsum csum2, int offset)
{
u32 sum = ( u32)csum2;
if (offset&1)
sum = ((sum&0xFF00FF)<<8)+((sum>>8)&0xFF00FF);
return csum_sub(csum, ( __wsum)sum);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __wsum csum_unfold(__sum16 n)
{
return ( __wsum)n;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __wsum csum_partial_ext(const void *buff, int len, __wsum sum)
{
return csum_partial(buff, len, sum);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void csum_replace4(__sum16 *sum, __be32 from, __be32 to)
{
*sum = csum_fold(csum_add(csum_sub(~csum_unfold(*sum), from), to));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void csum_replace2(__sum16 *sum, __be16 old, __be16 new)
{
*sum = ~csum16_add(csum16_sub(~(*sum), old), new);
}
struct sk_buff;
void inet_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
__be32 from, __be32 to, int pseudohdr);
void inet_proto_csum_replace16(__sum16 *sum, struct sk_buff *skb,
const __be32 *from, const __be32 *to,
int pseudohdr);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void inet_proto_csum_replace2(__sum16 *sum, struct sk_buff *skb,
__be16 from, __be16 to,
int pseudohdr)
{
inet_proto_csum_replace4(sum, skb, ( __be32)from,
( __be32)to, pseudohdr);
}
# 30 "include/linux/skbuff.h" 2
# 1 "include/linux/hrtimer.h" 1
# 25 "include/linux/hrtimer.h"
# 1 "include/linux/timerqueue.h" 1
struct timerqueue_node {
struct rb_node node;
ktime_t expires;
};
struct timerqueue_head {
struct rb_root head;
struct timerqueue_node *next;
};
extern void timerqueue_add(struct timerqueue_head *head,
struct timerqueue_node *node);
extern void timerqueue_del(struct timerqueue_head *head,
struct timerqueue_node *node);
extern struct timerqueue_node *timerqueue_iterate_next(
struct timerqueue_node *node);
# 34 "include/linux/timerqueue.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head)
{
return head->next;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void timerqueue_init(struct timerqueue_node *node)
{
((&node->node)->__rb_parent_color = (unsigned long)(&node->node));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void timerqueue_init_head(struct timerqueue_head *head)
{
head->head = (struct rb_root) { ((void *)0), };
head->next = ((void *)0);
}
# 26 "include/linux/hrtimer.h" 2
struct hrtimer_clock_base;
struct hrtimer_cpu_base;
enum hrtimer_mode {
HRTIMER_MODE_ABS = 0x0,
HRTIMER_MODE_REL = 0x1,
HRTIMER_MODE_PINNED = 0x02,
HRTIMER_MODE_ABS_PINNED = 0x02,
HRTIMER_MODE_REL_PINNED = 0x03,
};
enum hrtimer_restart {
HRTIMER_NORESTART,
HRTIMER_RESTART,
};
# 108 "include/linux/hrtimer.h"
struct hrtimer {
struct timerqueue_node node;
ktime_t _softexpires;
enum hrtimer_restart (*function)(struct hrtimer *);
struct hrtimer_clock_base *base;
unsigned long state;
};
# 128 "include/linux/hrtimer.h"
struct hrtimer_sleeper {
struct hrtimer timer;
struct task_struct *task;
};
# 145 "include/linux/hrtimer.h"
struct hrtimer_clock_base {
struct hrtimer_cpu_base *cpu_base;
int index;
clockid_t clockid;
struct timerqueue_head active;
ktime_t resolution;
ktime_t (*get_time)(void);
ktime_t softirq_time;
ktime_t offset;
};
enum hrtimer_base_type {
HRTIMER_BASE_MONOTONIC,
HRTIMER_BASE_REALTIME,
HRTIMER_BASE_BOOTTIME,
HRTIMER_BASE_TAI,
HRTIMER_MAX_CLOCK_BASES,
};
# 181 "include/linux/hrtimer.h"
struct hrtimer_cpu_base {
raw_spinlock_t lock;
unsigned int cpu;
unsigned int active_bases;
unsigned int clock_was_set;
# 195 "include/linux/hrtimer.h"
struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES];
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hrtimer_set_expires(struct hrtimer *timer, ktime_t time)
{
timer->node.expires = time;
timer->_softexpires = time;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hrtimer_set_expires_range(struct hrtimer *timer, ktime_t time, ktime_t delta)
{
timer->_softexpires = time;
timer->node.expires = ktime_add_safe(time, delta);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hrtimer_set_expires_range_ns(struct hrtimer *timer, ktime_t time, unsigned long delta)
{
timer->_softexpires = time;
timer->node.expires = ktime_add_safe(time, ns_to_ktime(delta));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hrtimer_set_expires_tv64(struct hrtimer *timer, s64 tv64)
{
timer->node.expires.tv64 = tv64;
timer->_softexpires.tv64 = tv64;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hrtimer_add_expires(struct hrtimer *timer, ktime_t time)
{
timer->node.expires = ktime_add_safe(timer->node.expires, time);
timer->_softexpires = ktime_add_safe(timer->_softexpires, time);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hrtimer_add_expires_ns(struct hrtimer *timer, u64 ns)
{
timer->node.expires = ({ (ktime_t){ .tv64 = (timer->node.expires).tv64 + (ns) }; });
timer->_softexpires = ({ (ktime_t){ .tv64 = (timer->_softexpires).tv64 + (ns) }; });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t hrtimer_get_expires(const struct hrtimer *timer)
{
return timer->node.expires;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t hrtimer_get_softexpires(const struct hrtimer *timer)
{
return timer->_softexpires;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 hrtimer_get_expires_tv64(const struct hrtimer *timer)
{
return timer->node.expires.tv64;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 hrtimer_get_softexpires_tv64(const struct hrtimer *timer)
{
return timer->_softexpires.tv64;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s64 hrtimer_get_expires_ns(const struct hrtimer *timer)
{
return ((timer->node.expires).tv64);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t hrtimer_expires_remaining(const struct hrtimer *timer)
{
return ({ (ktime_t){ .tv64 = (timer->node.expires).tv64 - (timer->base->get_time()).tv64 }; });
}
# 301 "include/linux/hrtimer.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hrtimer_peek_ahead_timers(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t hrtimer_cb_get_time(struct hrtimer *timer)
{
return timer->base->softirq_time;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hrtimer_is_hres_active(struct hrtimer *timer)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clock_was_set_delayed(void) { }
extern void clock_was_set(void);
extern void timerfd_clock_was_set(void);
extern void hrtimers_resume(void);
extern __attribute__((section(".data..percpu" ""))) __typeof__(struct tick_device) tick_cpu_device;
extern void hrtimer_init(struct hrtimer *timer, clockid_t which_clock,
enum hrtimer_mode mode);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hrtimer_init_on_stack(struct hrtimer *timer,
clockid_t which_clock,
enum hrtimer_mode mode)
{
hrtimer_init(timer, which_clock, mode);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void destroy_hrtimer_on_stack(struct hrtimer *timer) { }
extern int hrtimer_start(struct hrtimer *timer, ktime_t tim,
const enum hrtimer_mode mode);
extern int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
unsigned long range_ns, const enum hrtimer_mode mode);
extern int
__hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
unsigned long delta_ns,
const enum hrtimer_mode mode, int wakeup);
extern int hrtimer_cancel(struct hrtimer *timer);
extern int hrtimer_try_to_cancel(struct hrtimer *timer);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hrtimer_start_expires(struct hrtimer *timer,
enum hrtimer_mode mode)
{
unsigned long delta;
ktime_t soft, hard;
soft = hrtimer_get_softexpires(timer);
hard = hrtimer_get_expires(timer);
delta = ((({ (ktime_t){ .tv64 = (hard).tv64 - (soft).tv64 }; })).tv64);
return hrtimer_start_range_ns(timer, soft, delta, mode);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hrtimer_restart(struct hrtimer *timer)
{
return hrtimer_start_expires(timer, HRTIMER_MODE_ABS);
}
extern ktime_t hrtimer_get_remaining(const struct hrtimer *timer);
extern int hrtimer_get_res(const clockid_t which_clock, struct timespec *tp);
extern ktime_t hrtimer_get_next_event(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hrtimer_active(const struct hrtimer *timer)
{
return timer->state != 0x00;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hrtimer_is_queued(struct hrtimer *timer)
{
return timer->state & 0x01;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hrtimer_callback_running(struct hrtimer *timer)
{
return timer->state & 0x02;
}
extern u64
hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 hrtimer_forward_now(struct hrtimer *timer,
ktime_t interval)
{
return hrtimer_forward(timer, timer->base->get_time(), interval);
}
extern long hrtimer_nanosleep(struct timespec *rqtp,
struct timespec *rmtp,
const enum hrtimer_mode mode,
const clockid_t clockid);
extern long hrtimer_nanosleep_restart(struct restart_block *restart_block);
extern void hrtimer_init_sleeper(struct hrtimer_sleeper *sl,
struct task_struct *tsk);
extern int schedule_hrtimeout_range(ktime_t *expires, unsigned long delta,
const enum hrtimer_mode mode);
extern int schedule_hrtimeout_range_clock(ktime_t *expires,
unsigned long delta, const enum hrtimer_mode mode, int clock);
extern int schedule_hrtimeout(ktime_t *expires, const enum hrtimer_mode mode);
extern void hrtimer_run_queues(void);
extern void hrtimer_run_pending(void);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) hrtimers_init(void);
extern void sysrq_timer_list_show(void);
# 32 "include/linux/skbuff.h" 2
# 1 "include/linux/dma-mapping.h" 1
# 1 "include/linux/device.h" 1
# 16 "include/linux/device.h"
# 1 "include/linux/ioport.h" 1
# 18 "include/linux/ioport.h"
struct resource {
resource_size_t start;
resource_size_t end;
const char *name;
unsigned long flags;
struct resource *parent, *sibling, *child;
};
# 138 "include/linux/ioport.h"
extern struct resource ioport_resource;
extern struct resource iomem_resource;
extern struct resource *request_resource_conflict(struct resource *root, struct resource *new);
extern int request_resource(struct resource *root, struct resource *new);
extern int release_resource(struct resource *new);
void release_child_resources(struct resource *new);
extern void reserve_region_with_split(struct resource *root,
resource_size_t start, resource_size_t end,
const char *name);
extern struct resource *insert_resource_conflict(struct resource *parent, struct resource *new);
extern int insert_resource(struct resource *parent, struct resource *new);
extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new);
extern void arch_remove_reservations(struct resource *avail);
extern int allocate_resource(struct resource *root, struct resource *new,
resource_size_t size, resource_size_t min,
resource_size_t max, resource_size_t align,
resource_size_t (*alignf)(void *,
const struct resource *,
resource_size_t,
resource_size_t),
void *alignf_data);
struct resource *lookup_resource(struct resource *root, resource_size_t start);
int adjust_resource(struct resource *res, resource_size_t start,
resource_size_t size);
resource_size_t resource_alignment(struct resource *res);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) resource_size_t resource_size(const struct resource *res)
{
return res->end - res->start + 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long resource_type(const struct resource *res)
{
return res->flags & 0x00001f00;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool resource_contains(struct resource *r1, struct resource *r2)
{
if (resource_type(r1) != resource_type(r2))
return false;
if (r1->flags & 0x20000000 || r2->flags & 0x20000000)
return false;
return r1->start <= r2->start && r1->end >= r2->end;
}
# 192 "include/linux/ioport.h"
extern struct resource * __request_region(struct resource *,
resource_size_t start,
resource_size_t n,
const char *name, int flags);
extern int __check_region(struct resource *, resource_size_t, resource_size_t);
extern void __release_region(struct resource *, resource_size_t,
resource_size_t);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((deprecated)) check_region(resource_size_t s,
resource_size_t n)
{
return __check_region(&ioport_resource, s, n);
}
struct device;
extern int devm_request_resource(struct device *dev, struct resource *root,
struct resource *new);
extern void devm_release_resource(struct device *dev, struct resource *new);
extern struct resource * __devm_request_region(struct device *dev,
struct resource *parent, resource_size_t start,
resource_size_t n, const char *name);
extern void __devm_release_region(struct device *dev, struct resource *parent,
resource_size_t start, resource_size_t n);
extern int iomem_map_sanity_check(resource_size_t addr, unsigned long size);
extern int iomem_is_exclusive(u64 addr);
extern int
walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
void *arg, int (*func)(unsigned long, unsigned long, void *));
extern int
walk_system_ram_res(u64 start, u64 end, void *arg,
int (*func)(u64, u64, void *));
extern int
walk_iomem_res(char *name, unsigned long flags, u64 start, u64 end, void *arg,
int (*func)(u64, u64, void *));
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool resource_overlaps(struct resource *r1, struct resource *r2)
{
return (r1->start <= r2->end && r1->end >= r2->start);
}
# 17 "include/linux/device.h" 2
# 1 "include/linux/klist.h" 1
# 19 "include/linux/klist.h"
struct klist_node;
struct klist {
spinlock_t k_lock;
struct list_head k_list;
void (*get)(struct klist_node *);
void (*put)(struct klist_node *);
} __attribute__ ((aligned (sizeof(void *))));
# 36 "include/linux/klist.h"
extern void klist_init(struct klist *k, void (*get)(struct klist_node *),
void (*put)(struct klist_node *));
struct klist_node {
void *n_klist;
struct list_head n_node;
struct kref n_ref;
};
extern void klist_add_tail(struct klist_node *n, struct klist *k);
extern void klist_add_head(struct klist_node *n, struct klist *k);
extern void klist_add_behind(struct klist_node *n, struct klist_node *pos);
extern void klist_add_before(struct klist_node *n, struct klist_node *pos);
extern void klist_del(struct klist_node *n);
extern void klist_remove(struct klist_node *n);
extern int klist_node_attached(struct klist_node *n);
struct klist_iter {
struct klist *i_klist;
struct klist_node *i_cur;
};
extern void klist_iter_init(struct klist *k, struct klist_iter *i);
extern void klist_iter_init_node(struct klist *k, struct klist_iter *i,
struct klist_node *n);
extern void klist_iter_exit(struct klist_iter *i);
extern struct klist_node *klist_next(struct klist_iter *i);
# 19 "include/linux/device.h" 2
# 1 "include/linux/pinctrl/devinfo.h" 1
# 43 "include/linux/pinctrl/devinfo.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pinctrl_bind_pins(struct device *dev)
{
return 0;
}
# 25 "include/linux/device.h" 2
# 1 "include/linux/pm.h" 1
# 34 "include/linux/pm.h"
extern void (*pm_power_off)(void);
extern void (*pm_power_off_prepare)(void);
struct device;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pm_vt_switch_required(struct device *dev, bool required)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pm_vt_switch_unregister(struct device *dev)
{
}
struct device;
typedef struct pm_message {
int event;
} pm_message_t;
# 295 "include/linux/pm.h"
struct dev_pm_ops {
int (*prepare)(struct device *dev);
void (*complete)(struct device *dev);
int (*suspend)(struct device *dev);
int (*resume)(struct device *dev);
int (*freeze)(struct device *dev);
int (*thaw)(struct device *dev);
int (*poweroff)(struct device *dev);
int (*restore)(struct device *dev);
int (*suspend_late)(struct device *dev);
int (*resume_early)(struct device *dev);
int (*freeze_late)(struct device *dev);
int (*thaw_early)(struct device *dev);
int (*poweroff_late)(struct device *dev);
int (*restore_early)(struct device *dev);
int (*suspend_noirq)(struct device *dev);
int (*resume_noirq)(struct device *dev);
int (*freeze_noirq)(struct device *dev);
int (*thaw_noirq)(struct device *dev);
int (*poweroff_noirq)(struct device *dev);
int (*restore_noirq)(struct device *dev);
int (*runtime_suspend)(struct device *dev);
int (*runtime_resume)(struct device *dev);
int (*runtime_idle)(struct device *dev);
};
# 510 "include/linux/pm.h"
enum rpm_status {
RPM_ACTIVE = 0,
RPM_RESUMING,
RPM_SUSPENDED,
RPM_SUSPENDING,
};
# 532 "include/linux/pm.h"
enum rpm_request {
RPM_REQ_NONE = 0,
RPM_REQ_IDLE,
RPM_REQ_SUSPEND,
RPM_REQ_AUTOSUSPEND,
RPM_REQ_RESUME,
};
struct wakeup_source;
struct pm_domain_data {
struct list_head list_node;
struct device *dev;
};
struct pm_subsys_data {
spinlock_t lock;
unsigned int refcount;
};
struct dev_pm_info {
pm_message_t power_state;
unsigned int can_wakeup:1;
unsigned int async_suspend:1;
bool is_prepared:1;
bool is_suspended:1;
bool is_noirq_suspended:1;
bool is_late_suspended:1;
bool ignore_children:1;
bool early_init:1;
bool direct_complete:1;
spinlock_t lock;
unsigned int should_wakeup:1;
# 606 "include/linux/pm.h"
struct pm_subsys_data *subsys_data;
void (*set_latency_tolerance)(struct device *, s32);
struct dev_pm_qos *qos;
};
extern void update_pm_runtime_accounting(struct device *dev);
extern int dev_pm_get_subsys_data(struct device *dev);
extern int dev_pm_put_subsys_data(struct device *dev);
struct dev_pm_domain {
struct dev_pm_ops ops;
void (*detach)(struct device *dev, bool power_off);
};
# 732 "include/linux/pm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dpm_suspend_start(pm_message_t state)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_pm_wait_for_dev(struct device *a, struct device *b)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dpm_for_each_dev(void *data, void (*fn)(struct device *, void *))
{
}
# 771 "include/linux/pm.h"
enum dpm_order {
DPM_ORDER_NONE,
DPM_ORDER_DEV_AFTER_PARENT,
DPM_ORDER_PARENT_BEFORE_DEV,
DPM_ORDER_DEV_LAST,
};
# 26 "include/linux/device.h" 2
# 1 "include/linux/ratelimit.h" 1
# 10 "include/linux/ratelimit.h"
struct ratelimit_state {
raw_spinlock_t lock;
int interval;
int burst;
int printed;
int missed;
unsigned long begin;
};
# 28 "include/linux/ratelimit.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ratelimit_state_init(struct ratelimit_state *rs,
int interval, int burst)
{
do { *(&rs->lock) = (raw_spinlock_t) { .raw_lock = { .lock = 0 }, }; } while (0);
rs->interval = interval;
rs->burst = burst;
rs->printed = 0;
rs->missed = 0;
rs->begin = 0;
}
extern struct ratelimit_state printk_ratelimit_state;
extern int ___ratelimit(struct ratelimit_state *rs, const char *func);
# 28 "include/linux/device.h" 2
# 1 "./arch/mips/include/asm/device.h" 1
# 9 "./arch/mips/include/asm/device.h"
struct dma_map_ops;
struct dev_archdata {
struct dma_map_ops *dma_ops;
};
struct pdev_archdata {
};
# 31 "include/linux/device.h" 2
struct device;
struct device_private;
struct device_driver;
struct driver_private;
struct module;
struct class;
struct subsys_private;
struct bus_type;
struct device_node;
struct iommu_ops;
struct iommu_group;
struct bus_attribute {
struct attribute attr;
ssize_t (*show)(struct bus_type *bus, char *buf);
ssize_t (*store)(struct bus_type *bus, const char *buf, size_t count);
};
# 57 "include/linux/device.h"
extern int __attribute__((warn_unused_result)) bus_create_file(struct bus_type *,
struct bus_attribute *);
extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
# 104 "include/linux/device.h"
struct bus_type {
const char *name;
const char *dev_name;
struct device *dev_root;
struct device_attribute *dev_attrs;
const struct attribute_group **bus_groups;
const struct attribute_group **dev_groups;
const struct attribute_group **drv_groups;
int (*match)(struct device *dev, struct device_driver *drv);
int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
int (*probe)(struct device *dev);
int (*remove)(struct device *dev);
void (*shutdown)(struct device *dev);
int (*online)(struct device *dev);
int (*offline)(struct device *dev);
int (*suspend)(struct device *dev, pm_message_t state);
int (*resume)(struct device *dev);
const struct dev_pm_ops *pm;
const struct iommu_ops *iommu_ops;
struct subsys_private *p;
struct lock_class_key lock_key;
};
extern int __attribute__((warn_unused_result)) bus_register(struct bus_type *bus);
extern void bus_unregister(struct bus_type *bus);
extern int __attribute__((warn_unused_result)) bus_rescan_devices(struct bus_type *bus);
struct subsys_dev_iter {
struct klist_iter ki;
const struct device_type *type;
};
void subsys_dev_iter_init(struct subsys_dev_iter *iter,
struct bus_type *subsys,
struct device *start,
const struct device_type *type);
struct device *subsys_dev_iter_next(struct subsys_dev_iter *iter);
void subsys_dev_iter_exit(struct subsys_dev_iter *iter);
int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
int (*fn)(struct device *dev, void *data));
struct device *bus_find_device(struct bus_type *bus, struct device *start,
void *data,
int (*match)(struct device *dev, void *data));
struct device *bus_find_device_by_name(struct bus_type *bus,
struct device *start,
const char *name);
struct device *subsys_find_device_by_id(struct bus_type *bus, unsigned int id,
struct device *hint);
int bus_for_each_drv(struct bus_type *bus, struct device_driver *start,
void *data, int (*fn)(struct device_driver *, void *));
void bus_sort_breadthfirst(struct bus_type *bus,
int (*compare)(const struct device *a,
const struct device *b));
struct notifier_block;
extern int bus_register_notifier(struct bus_type *bus,
struct notifier_block *nb);
extern int bus_unregister_notifier(struct bus_type *bus,
struct notifier_block *nb);
# 194 "include/linux/device.h"
extern struct kset *bus_get_kset(struct bus_type *bus);
extern struct klist *bus_get_device_klist(struct bus_type *bus);
# 229 "include/linux/device.h"
struct device_driver {
const char *name;
struct bus_type *bus;
struct module *owner;
const char *mod_name;
bool suppress_bind_attrs;
const struct of_device_id *of_match_table;
const struct acpi_device_id *acpi_match_table;
int (*probe) (struct device *dev);
int (*remove) (struct device *dev);
void (*shutdown) (struct device *dev);
int (*suspend) (struct device *dev, pm_message_t state);
int (*resume) (struct device *dev);
const struct attribute_group **groups;
const struct dev_pm_ops *pm;
struct driver_private *p;
};
extern int __attribute__((warn_unused_result)) driver_register(struct device_driver *drv);
extern void driver_unregister(struct device_driver *drv);
extern struct device_driver *driver_find(const char *name,
struct bus_type *bus);
extern int driver_probe_done(void);
extern void wait_for_device_probe(void);
struct driver_attribute {
struct attribute attr;
ssize_t (*show)(struct device_driver *driver, char *buf);
ssize_t (*store)(struct device_driver *driver, const char *buf,
size_t count);
};
# 281 "include/linux/device.h"
extern int __attribute__((warn_unused_result)) driver_create_file(struct device_driver *driver,
const struct driver_attribute *attr);
extern void driver_remove_file(struct device_driver *driver,
const struct driver_attribute *attr);
extern int __attribute__((warn_unused_result)) driver_for_each_device(struct device_driver *drv,
struct device *start,
void *data,
int (*fn)(struct device *dev,
void *));
struct device *driver_find_device(struct device_driver *drv,
struct device *start, void *data,
int (*match)(struct device *dev, void *data));
# 308 "include/linux/device.h"
struct subsys_interface {
const char *name;
struct bus_type *subsys;
struct list_head node;
int (*add_dev)(struct device *dev, struct subsys_interface *sif);
int (*remove_dev)(struct device *dev, struct subsys_interface *sif);
};
int subsys_interface_register(struct subsys_interface *sif);
void subsys_interface_unregister(struct subsys_interface *sif);
int subsys_system_register(struct bus_type *subsys,
const struct attribute_group **groups);
int subsys_virtual_register(struct bus_type *subsys,
const struct attribute_group **groups);
# 352 "include/linux/device.h"
struct class {
const char *name;
struct module *owner;
struct class_attribute *class_attrs;
const struct attribute_group **dev_groups;
struct kobject *dev_kobj;
int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
char *(*devnode)(struct device *dev, umode_t *mode);
void (*class_release)(struct class *class);
void (*dev_release)(struct device *dev);
int (*suspend)(struct device *dev, pm_message_t state);
int (*resume)(struct device *dev);
const struct kobj_ns_type_operations *ns_type;
const void *(*namespace)(struct device *dev);
const struct dev_pm_ops *pm;
struct subsys_private *p;
};
struct class_dev_iter {
struct klist_iter ki;
const struct device_type *type;
};
extern struct kobject *sysfs_dev_block_kobj;
extern struct kobject *sysfs_dev_char_kobj;
extern int __attribute__((warn_unused_result)) __class_register(struct class *class,
struct lock_class_key *key);
extern void class_unregister(struct class *class);
# 396 "include/linux/device.h"
struct class_compat;
struct class_compat *class_compat_register(const char *name);
void class_compat_unregister(struct class_compat *cls);
int class_compat_create_link(struct class_compat *cls, struct device *dev,
struct device *device_link);
void class_compat_remove_link(struct class_compat *cls, struct device *dev,
struct device *device_link);
extern void class_dev_iter_init(struct class_dev_iter *iter,
struct class *class,
struct device *start,
const struct device_type *type);
extern struct device *class_dev_iter_next(struct class_dev_iter *iter);
extern void class_dev_iter_exit(struct class_dev_iter *iter);
extern int class_for_each_device(struct class *class, struct device *start,
void *data,
int (*fn)(struct device *dev, void *data));
extern struct device *class_find_device(struct class *class,
struct device *start, const void *data,
int (*match)(struct device *, const void *));
struct class_attribute {
struct attribute attr;
ssize_t (*show)(struct class *class, struct class_attribute *attr,
char *buf);
ssize_t (*store)(struct class *class, struct class_attribute *attr,
const char *buf, size_t count);
};
# 433 "include/linux/device.h"
extern int __attribute__((warn_unused_result)) class_create_file_ns(struct class *class,
const struct class_attribute *attr,
const void *ns);
extern void class_remove_file_ns(struct class *class,
const struct class_attribute *attr,
const void *ns);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result)) class_create_file(struct class *class,
const struct class_attribute *attr)
{
return class_create_file_ns(class, attr, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void class_remove_file(struct class *class,
const struct class_attribute *attr)
{
return class_remove_file_ns(class, attr, ((void *)0));
}
struct class_attribute_string {
struct class_attribute attr;
char *str;
};
# 465 "include/linux/device.h"
extern ssize_t show_class_attr_string(struct class *class, struct class_attribute *attr,
char *buf);
struct class_interface {
struct list_head node;
struct class *class;
int (*add_dev) (struct device *, struct class_interface *);
void (*remove_dev) (struct device *, struct class_interface *);
};
extern int __attribute__((warn_unused_result)) class_interface_register(struct class_interface *);
extern void class_interface_unregister(struct class_interface *);
extern struct class * __attribute__((warn_unused_result)) __class_create(struct module *owner,
const char *name,
struct lock_class_key *key);
extern void class_destroy(struct class *cls);
# 501 "include/linux/device.h"
struct device_type {
const char *name;
const struct attribute_group **groups;
int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
char *(*devnode)(struct device *dev, umode_t *mode,
kuid_t *uid, kgid_t *gid);
void (*release)(struct device *dev);
const struct dev_pm_ops *pm;
};
struct device_attribute {
struct attribute attr;
ssize_t (*show)(struct device *dev, struct device_attribute *attr,
char *buf);
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count);
};
struct dev_ext_attribute {
struct device_attribute attr;
void *var;
};
ssize_t device_show_ulong(struct device *dev, struct device_attribute *attr,
char *buf);
ssize_t device_store_ulong(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count);
ssize_t device_show_int(struct device *dev, struct device_attribute *attr,
char *buf);
ssize_t device_store_int(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count);
ssize_t device_show_bool(struct device *dev, struct device_attribute *attr,
char *buf);
ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count);
# 560 "include/linux/device.h"
extern int device_create_file(struct device *device,
const struct device_attribute *entry);
extern void device_remove_file(struct device *dev,
const struct device_attribute *attr);
extern bool device_remove_file_self(struct device *dev,
const struct device_attribute *attr);
extern int __attribute__((warn_unused_result)) device_create_bin_file(struct device *dev,
const struct bin_attribute *attr);
extern void device_remove_bin_file(struct device *dev,
const struct bin_attribute *attr);
typedef void (*dr_release_t)(struct device *dev, void *res);
typedef int (*dr_match_t)(struct device *dev, void *res, void *match_data);
extern void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
extern void devres_for_each_res(struct device *dev, dr_release_t release,
dr_match_t match, void *match_data,
void (*fn)(struct device *, void *, void *),
void *data);
extern void devres_free(void *res);
extern void devres_add(struct device *dev, void *res);
extern void *devres_find(struct device *dev, dr_release_t release,
dr_match_t match, void *match_data);
extern void *devres_get(struct device *dev, void *new_res,
dr_match_t match, void *match_data);
extern void *devres_remove(struct device *dev, dr_release_t release,
dr_match_t match, void *match_data);
extern int devres_destroy(struct device *dev, dr_release_t release,
dr_match_t match, void *match_data);
extern int devres_release(struct device *dev, dr_release_t release,
dr_match_t match, void *match_data);
extern void * __attribute__((warn_unused_result)) devres_open_group(struct device *dev, void *id,
gfp_t gfp);
extern void devres_close_group(struct device *dev, void *id);
extern void devres_remove_group(struct device *dev, void *id);
extern int devres_release_group(struct device *dev, void *id);
extern void *devm_kmalloc(struct device *dev, size_t size, gfp_t gfp);
extern char *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt,
va_list ap);
extern __attribute__((format(printf, 3, 4)))
char *devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt, ...);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)
{
return devm_kmalloc(dev, size, gfp | (( gfp_t)0x8000u));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *devm_kmalloc_array(struct device *dev,
size_t n, size_t size, gfp_t flags)
{
if (size != 0 && n > (~(size_t)0) / size)
return ((void *)0);
return devm_kmalloc(dev, n * size, flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *devm_kcalloc(struct device *dev,
size_t n, size_t size, gfp_t flags)
{
return devm_kmalloc_array(dev, n, size, flags | (( gfp_t)0x8000u));
}
extern void devm_kfree(struct device *dev, void *p);
extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp);
extern void *devm_kmemdup(struct device *dev, const void *src, size_t len,
gfp_t gfp);
extern unsigned long devm_get_free_pages(struct device *dev,
gfp_t gfp_mask, unsigned int order);
extern void devm_free_pages(struct device *dev, unsigned long addr);
void *devm_ioremap_resource(struct device *dev, struct resource *res);
int devm_add_action(struct device *dev, void (*action)(void *), void *data);
void devm_remove_action(struct device *dev, void (*action)(void *), void *data);
struct device_dma_parameters {
unsigned int max_segment_size;
unsigned long segment_boundary_mask;
};
struct acpi_device;
struct acpi_dev_node {
};
# 730 "include/linux/device.h"
struct device {
struct device *parent;
struct device_private *p;
struct kobject kobj;
const char *init_name;
const struct device_type *type;
struct mutex mutex;
struct bus_type *bus;
struct device_driver *driver;
void *platform_data;
void *driver_data;
struct dev_pm_info power;
struct dev_pm_domain *pm_domain;
# 760 "include/linux/device.h"
u64 *dma_mask;
u64 coherent_dma_mask;
unsigned long dma_pfn_offset;
struct device_dma_parameters *dma_parms;
struct list_head dma_pools;
struct dma_coherent_mem *dma_mem;
struct dev_archdata archdata;
struct device_node *of_node;
struct acpi_dev_node acpi_node;
dev_t devt;
u32 id;
spinlock_t devres_lock;
struct list_head devres_head;
struct klist_node knode_class;
struct class *class;
const struct attribute_group **groups;
void (*release)(struct device *dev);
struct iommu_group *iommu_group;
bool offline_disabled:1;
bool offline:1;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device *kobj_to_dev(struct kobject *kobj)
{
return ({ const typeof( ((struct device *)0)->kobj ) *__mptr = (kobj); (struct device *)( (char *)__mptr - __builtin_offsetof(struct device,kobj) );});
}
# 1 "include/linux/pm_wakeup.h" 1
# 46 "include/linux/pm_wakeup.h"
struct wakeup_source {
const char *name;
struct list_head entry;
spinlock_t lock;
struct timer_list timer;
unsigned long timer_expires;
ktime_t total_time;
ktime_t max_time;
ktime_t last_time;
ktime_t start_prevent_time;
ktime_t prevent_sleep_time;
unsigned long event_count;
unsigned long active_count;
unsigned long relax_count;
unsigned long expire_count;
unsigned long wakeup_count;
bool active:1;
bool autosleep_enabled:1;
};
# 105 "include/linux/pm_wakeup.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void device_set_wakeup_capable(struct device *dev, bool capable)
{
dev->power.can_wakeup = capable;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool device_can_wakeup(struct device *dev)
{
return dev->power.can_wakeup;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void wakeup_source_prepare(struct wakeup_source *ws,
const char *name) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct wakeup_source *wakeup_source_create(const char *name)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void wakeup_source_drop(struct wakeup_source *ws) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void wakeup_source_destroy(struct wakeup_source *ws) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void wakeup_source_add(struct wakeup_source *ws) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void wakeup_source_remove(struct wakeup_source *ws) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct wakeup_source *wakeup_source_register(const char *name)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void wakeup_source_unregister(struct wakeup_source *ws) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_wakeup_enable(struct device *dev)
{
dev->power.should_wakeup = true;
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_wakeup_disable(struct device *dev)
{
dev->power.should_wakeup = false;
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_set_wakeup_enable(struct device *dev, bool enable)
{
dev->power.should_wakeup = enable;
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_init_wakeup(struct device *dev, bool val)
{
device_set_wakeup_capable(dev, val);
device_set_wakeup_enable(dev, val);
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool device_may_wakeup(struct device *dev)
{
return dev->power.can_wakeup && dev->power.should_wakeup;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __pm_stay_awake(struct wakeup_source *ws) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pm_stay_awake(struct device *dev) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __pm_relax(struct wakeup_source *ws) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pm_relax(struct device *dev) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __pm_wakeup_event(struct wakeup_source *ws, unsigned int msec) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pm_wakeup_event(struct device *dev, unsigned int msec) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void wakeup_source_init(struct wakeup_source *ws,
const char *name)
{
wakeup_source_prepare(ws, name);
wakeup_source_add(ws);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void wakeup_source_trash(struct wakeup_source *ws)
{
wakeup_source_remove(ws);
wakeup_source_drop(ws);
}
# 808 "include/linux/device.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const char *dev_name(const struct device *dev)
{
if (dev->init_name)
return dev->init_name;
return kobject_name(&dev->kobj);
}
extern __attribute__((format(printf, 2, 3)))
int dev_set_name(struct device *dev, const char *name, ...);
# 831 "include/linux/device.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_to_node(struct device *dev)
{
return -1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_dev_node(struct device *dev, int node)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *dev_get_drvdata(const struct device *dev)
{
return dev->driver_data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_set_drvdata(struct device *dev, void *data)
{
dev->driver_data = data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct pm_subsys_data *dev_to_psd(struct device *dev)
{
return dev ? dev->power.subsys_data : ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int dev_get_uevent_suppress(const struct device *dev)
{
return dev->kobj.uevent_suppress;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_set_uevent_suppress(struct device *dev, int val)
{
dev->kobj.uevent_suppress = val;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_is_registered(struct device *dev)
{
return dev->kobj.state_in_sysfs;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void device_enable_async_suspend(struct device *dev)
{
if (!dev->power.is_prepared)
dev->power.async_suspend = true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void device_disable_async_suspend(struct device *dev)
{
if (!dev->power.is_prepared)
dev->power.async_suspend = false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool device_async_suspend_enabled(struct device *dev)
{
return !!dev->power.async_suspend;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pm_suspend_ignore_children(struct device *dev, bool enable)
{
dev->power.ignore_children = enable;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_pm_syscore_device(struct device *dev, bool val)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void device_lock(struct device *dev)
{
mutex_lock(&dev->mutex);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_trylock(struct device *dev)
{
return mutex_trylock(&dev->mutex);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void device_unlock(struct device *dev)
{
mutex_unlock(&dev->mutex);
}
void driver_init(void);
extern int __attribute__((warn_unused_result)) device_register(struct device *dev);
extern void device_unregister(struct device *dev);
extern void device_initialize(struct device *dev);
extern int __attribute__((warn_unused_result)) device_add(struct device *dev);
extern void device_del(struct device *dev);
extern int device_for_each_child(struct device *dev, void *data,
int (*fn)(struct device *dev, void *data));
extern struct device *device_find_child(struct device *dev, void *data,
int (*match)(struct device *dev, void *data));
extern int device_rename(struct device *dev, const char *new_name);
extern int device_move(struct device *dev, struct device *new_parent,
enum dpm_order dpm_order);
extern const char *device_get_devnode(struct device *dev,
umode_t *mode, kuid_t *uid, kgid_t *gid,
const char **tmp);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool device_supports_offline(struct device *dev)
{
return dev->bus && dev->bus->offline && dev->bus->online;
}
extern void lock_device_hotplug(void);
extern void unlock_device_hotplug(void);
extern int lock_device_hotplug_sysfs(void);
extern int device_offline(struct device *dev);
extern int device_online(struct device *dev);
extern struct device *__root_device_register(const char *name,
struct module *owner);
extern void root_device_unregister(struct device *root);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *dev_get_platdata(const struct device *dev)
{
return dev->platform_data;
}
extern int __attribute__((warn_unused_result)) device_bind_driver(struct device *dev);
extern void device_release_driver(struct device *dev);
extern int __attribute__((warn_unused_result)) device_attach(struct device *dev);
extern int __attribute__((warn_unused_result)) driver_attach(struct device_driver *drv);
extern int __attribute__((warn_unused_result)) device_reprobe(struct device *dev);
extern struct device *device_create_vargs(struct class *cls,
struct device *parent,
dev_t devt,
void *drvdata,
const char *fmt,
va_list vargs);
extern __attribute__((format(printf, 5, 6)))
struct device *device_create(struct class *cls, struct device *parent,
dev_t devt, void *drvdata,
const char *fmt, ...);
extern __attribute__((format(printf, 6, 7)))
struct device *device_create_with_groups(struct class *cls,
struct device *parent, dev_t devt, void *drvdata,
const struct attribute_group **groups,
const char *fmt, ...);
extern void device_destroy(struct class *cls, dev_t devt);
extern int (*platform_notify)(struct device *dev);
extern int (*platform_notify_remove)(struct device *dev);
extern struct device *get_device(struct device *dev);
extern void put_device(struct device *dev);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int devtmpfs_create_node(struct device *dev) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int devtmpfs_delete_node(struct device *dev) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int devtmpfs_mount(const char *mountpoint) { return 0; }
extern void device_shutdown(void);
extern const char *dev_driver_string(const struct device *dev);
extern __attribute__((format(printf, 3, 0)))
int dev_vprintk_emit(int level, const struct device *dev,
const char *fmt, va_list args);
extern __attribute__((format(printf, 3, 4)))
int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...);
extern __attribute__((format(printf, 3, 4)))
int dev_printk(const char *level, const struct device *dev,
const char *fmt, ...);
extern __attribute__((format(printf, 2, 3)))
int dev_emerg(const struct device *dev, const char *fmt, ...);
extern __attribute__((format(printf, 2, 3)))
int dev_alert(const struct device *dev, const char *fmt, ...);
extern __attribute__((format(printf, 2, 3)))
int dev_crit(const struct device *dev, const char *fmt, ...);
extern __attribute__((format(printf, 2, 3)))
int dev_err(const struct device *dev, const char *fmt, ...);
extern __attribute__((format(printf, 2, 3)))
int dev_warn(const struct device *dev, const char *fmt, ...);
extern __attribute__((format(printf, 2, 3)))
int dev_notice(const struct device *dev, const char *fmt, ...);
extern __attribute__((format(printf, 2, 3)))
int _dev_info(const struct device *dev, const char *fmt, ...);
# 6 "include/linux/dma-mapping.h" 2
# 1 "include/linux/dma-attrs.h" 1
# 13 "include/linux/dma-attrs.h"
enum dma_attr {
DMA_ATTR_WRITE_BARRIER,
DMA_ATTR_WEAK_ORDERING,
DMA_ATTR_WRITE_COMBINE,
DMA_ATTR_NON_CONSISTENT,
DMA_ATTR_NO_KERNEL_MAPPING,
DMA_ATTR_SKIP_CPU_SYNC,
DMA_ATTR_FORCE_CONTIGUOUS,
DMA_ATTR_MAX,
};
struct dma_attrs {
unsigned long flags[(((DMA_ATTR_MAX) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_dma_attrs(struct dma_attrs *attrs)
{
bitmap_zero(attrs->flags, (((DMA_ATTR_MAX) + (8 * sizeof(long)) - 1) / (8 * sizeof(long))));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs)
{
if (attrs == ((void *)0))
return;
__BUG_ON((unsigned long)(attr >= DMA_ATTR_MAX));
__set_bit(attr, attrs->flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_get_attr(enum dma_attr attr, struct dma_attrs *attrs)
{
if (attrs == ((void *)0))
return 0;
__BUG_ON((unsigned long)(attr >= DMA_ATTR_MAX));
return test_bit(attr, attrs->flags);
}
# 8 "include/linux/dma-mapping.h" 2
# 1 "include/linux/dma-direction.h" 1
enum dma_data_direction {
DMA_BIDIRECTIONAL = 0,
DMA_TO_DEVICE = 1,
DMA_FROM_DEVICE = 2,
DMA_NONE = 3,
};
# 9 "include/linux/dma-mapping.h" 2
# 1 "include/linux/scatterlist.h" 1
# 1 "include/linux/mm.h" 1
# 15 "include/linux/mm.h"
# 1 "include/linux/debug_locks.h" 1
struct task_struct;
extern int debug_locks;
extern int debug_locks_silent;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __debug_locks_off(void)
{
return ({ ((void)sizeof(char[1 - 2*!!(sizeof(*(&debug_locks)) & ~0xc)])); ((__typeof__(*(&debug_locks))) __xchg((unsigned long)(0), (&debug_locks), sizeof(*(&debug_locks)))); });
}
extern int debug_locks_off(void);
# 48 "include/linux/debug_locks.h"
struct task_struct;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_show_all_locks(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_show_held_locks(struct task_struct *task)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
debug_check_no_locks_freed(const void *from, unsigned long len)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
debug_check_no_locks_held(void)
{
}
# 16 "include/linux/mm.h" 2
# 1 "include/linux/range.h" 1
struct range {
u64 start;
u64 end;
};
int add_range(struct range *range, int az, int nr_range,
u64 start, u64 end);
int add_range_with_merge(struct range *range, int az, int nr_range,
u64 start, u64 end);
void subtract_range(struct range *range, int az, u64 start, u64 end);
int clean_sort_range(struct range *range, int az);
void sort_range(struct range *range, int nr_range);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) resource_size_t cap_resource(u64 val)
{
if (val > ((resource_size_t)~0))
return ((resource_size_t)~0);
return val;
}
# 18 "include/linux/mm.h" 2
# 1 "include/linux/resource.h" 1
# 1 "include/uapi/linux/resource.h" 1
# 23 "include/uapi/linux/resource.h"
struct rusage {
struct timeval ru_utime;
struct timeval ru_stime;
__kernel_long_t ru_maxrss;
__kernel_long_t ru_ixrss;
__kernel_long_t ru_idrss;
__kernel_long_t ru_isrss;
__kernel_long_t ru_minflt;
__kernel_long_t ru_majflt;
__kernel_long_t ru_nswap;
__kernel_long_t ru_inblock;
__kernel_long_t ru_oublock;
__kernel_long_t ru_msgsnd;
__kernel_long_t ru_msgrcv;
__kernel_long_t ru_nsignals;
__kernel_long_t ru_nvcsw;
__kernel_long_t ru_nivcsw;
};
struct rlimit {
__kernel_ulong_t rlim_cur;
__kernel_ulong_t rlim_max;
};
struct rlimit64 {
__u64 rlim_cur;
__u64 rlim_max;
};
# 77 "include/uapi/linux/resource.h"
# 1 "./arch/mips/include/uapi/asm/resource.h" 1
# 33 "./arch/mips/include/uapi/asm/resource.h"
# 1 "include/asm-generic/resource.h" 1
# 1 "include/uapi/asm-generic/resource.h" 1
# 5 "include/asm-generic/resource.h" 2
# 34 "./arch/mips/include/uapi/asm/resource.h" 2
# 78 "include/uapi/linux/resource.h" 2
# 5 "include/linux/resource.h" 2
struct task_struct;
int getrusage(struct task_struct *p, int who, struct rusage *ru);
int do_prlimit(struct task_struct *tsk, unsigned int resource,
struct rlimit *new_rlim, struct rlimit *old_rlim);
# 22 "include/linux/mm.h" 2
struct mempolicy;
struct anon_vma;
struct anon_vma_chain;
struct file_ra_state;
struct user_struct;
struct writeback_control;
extern unsigned long max_mapnr;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_max_mapnr(unsigned long limit)
{
max_mapnr = limit;
}
extern unsigned long totalram_pages;
extern void * high_memory;
extern int page_cluster;
extern int sysctl_legacy_va_layout;
# 1 "./arch/mips/include/asm/pgtable.h" 1
# 14 "./arch/mips/include/asm/pgtable.h"
# 1 "./arch/mips/include/asm/pgtable-32.h" 1
# 17 "./arch/mips/include/asm/pgtable-32.h"
# 1 "./arch/mips/include/asm/fixmap.h" 1
# 48 "./arch/mips/include/asm/fixmap.h"
enum fixed_addresses {
FIX_CMAP_BEGIN,
FIX_CMAP_END = FIX_CMAP_BEGIN + (8 * 2),
__end_of_fixed_addresses
};
# 70 "./arch/mips/include/asm/fixmap.h"
# 1 "include/asm-generic/fixmap.h" 1
# 29 "include/asm-generic/fixmap.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) unsigned long fix_to_virt(const unsigned int idx)
{
((void)sizeof(char[1 - 2*!!(idx >= __end_of_fixed_addresses)]));
return (((unsigned long)(long)(int)0xfffe0000) - ((idx) << 12));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long virt_to_fix(const unsigned long vaddr)
{
__BUG_ON((unsigned long)(vaddr >= ((unsigned long)(long)(int)0xfffe0000) || vaddr < (((unsigned long)(long)(int)0xfffe0000) - (__end_of_fixed_addresses << 12))));
return ((((unsigned long)(long)(int)0xfffe0000) - ((vaddr)&(~((1 << 12) - 1)))) >> 12);
}
# 71 "./arch/mips/include/asm/fixmap.h" 2
extern void fixrange_init(unsigned long start, unsigned long end,
pgd_t *pgd_base);
# 18 "./arch/mips/include/asm/pgtable-32.h" 2
# 1 "include/asm-generic/pgtable-nopmd.h" 1
# 1 "include/asm-generic/pgtable-nopud.h" 1
# 13 "include/asm-generic/pgtable-nopud.h"
typedef struct { pgd_t pgd; } pud_t;
# 25 "include/asm-generic/pgtable-nopud.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pgd_none(pgd_t pgd) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pgd_bad(pgd_t pgd) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pgd_present(pgd_t pgd) { return 1; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pgd_clear(pgd_t *pgd) { }
# 38 "include/asm-generic/pgtable-nopud.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pud_t * pud_offset(pgd_t * pgd, unsigned long address)
{
return (pud_t *)pgd;
}
# 7 "include/asm-generic/pgtable-nopmd.h" 2
struct mm_struct;
# 17 "include/asm-generic/pgtable-nopmd.h"
typedef struct { pud_t pud; } pmd_t;
# 29 "include/asm-generic/pgtable-nopmd.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pud_none(pud_t pud) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pud_bad(pud_t pud) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pud_present(pud_t pud) { return 1; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pud_clear(pud_t *pud) { }
# 43 "include/asm-generic/pgtable-nopmd.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pmd_t * pmd_offset(pud_t * pud, unsigned long address)
{
return (pmd_t *)pud;
}
# 59 "include/asm-generic/pgtable-nopmd.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pmd_free(struct mm_struct *mm, pmd_t *pmd)
{
}
# 20 "./arch/mips/include/asm/pgtable-32.h" 2
extern int temp_tlb_entry ;
# 30 "./arch/mips/include/asm/pgtable-32.h"
extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1,
unsigned long entryhi, unsigned long pagemask);
# 82 "./arch/mips/include/asm/pgtable-32.h"
extern void load_pgd(unsigned long pg_dir);
extern pte_t invalid_pte_table[((1UL) << 12)/sizeof(pte_t)];
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_none(pmd_t pmd)
{
return ((((((pmd).pud).pgd).pgd))) == (unsigned long) invalid_pte_table;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_present(pmd_t pmd)
{
return ((((((pmd).pud).pgd).pgd))) != (unsigned long) invalid_pte_table;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pmd_clear(pmd_t *pmdp)
{
((((((*pmdp).pud).pgd).pgd))) = ((unsigned long) invalid_pte_table);
}
# 15 "./arch/mips/include/asm/pgtable.h" 2
# 23 "./arch/mips/include/asm/pgtable.h"
struct mm_struct;
struct vm_area_struct;
# 71 "./arch/mips/include/asm/pgtable.h"
extern unsigned long _page_cachable_default;
extern unsigned long empty_zero_page;
extern unsigned long zero_page_mask;
extern void paging_init(void);
# 131 "./arch/mips/include/asm/pgtable.h"
extern void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep,
pte_t pteval);
# 180 "./arch/mips/include/asm/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_pte(pte_t *ptep, pte_t pteval)
{
*ptep = pteval;
if (((pteval).pte) & (1 << ((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1))) {
pte_t *buddy = ((pte_t *)((unsigned long)(ptep) ^ sizeof(pte_t)));
# 202 "./arch/mips/include/asm/pgtable.h"
unsigned long page_global = (1 << ((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1));
unsigned long tmp;
__asm__ __volatile__ (
" .set push\n"
" .set noreorder\n"
"1: " "ll" " %[tmp], %[buddy]\n"
" bnez %[tmp], 2f\n"
" or %[tmp], %[tmp], %[global]\n"
" " "sc" " %[tmp], %[buddy]\n"
" beqz %[tmp], 1b\n"
" nop\n"
"2:\n"
" .set pop"
: [buddy] "+m" (buddy->pte),
[tmp] "=&r" (tmp)
: [global] "r" (page_global));
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
{
do { unsigned long flags; if ((cpu_data[0].options & 0x100000000ull)) { do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); if(!cpu_data[(current_thread_info()->cpu)].htw_seq++) { do { if (6 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$6" "\n\t" : : "Jr" ((unsigned int)(({ int __res; if (6 == 0) __asm__ __volatile__( "mfc0\t%0, " "$6" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$6" ", " "6" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }) & ~(1 << 31)))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$6" ", " "6" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(({ int __res; if (6 == 0) __asm__ __volatile__( "mfc0\t%0, " "$6" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$6" ", " "6" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }) & ~(1 << 31)))); } while (0); do { __asm__ __volatile__( "sll $0, $0, 3" ); } while (0); } do { if (({ ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(flags); })) { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } } while (0); } } while(0);
if (((*((pte_t *)((unsigned long)(ptep) ^ sizeof(pte_t)))).pte) & (1 << ((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1)))
set_pte_at(mm, addr, ptep, ((pte_t) { ((1 << ((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1))) } ));
else
set_pte_at(mm, addr, ptep, ((pte_t) { (0) } ));
do { unsigned long flags; if ((cpu_data[0].options & 0x100000000ull)) { do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0); if (!--cpu_data[(current_thread_info()->cpu)].htw_seq) { do { if (6 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$6" "\n\t" : : "Jr" ((unsigned int)(({ int __res; if (6 == 0) __asm__ __volatile__( "mfc0\t%0, " "$6" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$6" ", " "6" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }) | (1 << 31)))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$6" ", " "6" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(({ int __res; if (6 == 0) __asm__ __volatile__( "mfc0\t%0, " "$6" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$6" ", " "6" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }) | (1 << 31)))); } while (0); do { __asm__ __volatile__( "sll $0, $0, 3" ); } while (0); } do { if (({ ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(flags); })) { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } } while (0); } } while(0);
}
# 263 "./arch/mips/include/asm/pgtable.h"
extern pgd_t swapper_pg_dir[];
# 326 "./arch/mips/include/asm/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_write(pte_t pte) { return ((pte).pte) & (1 << ((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1)); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_dirty(pte_t pte) { return ((pte).pte) & (1 << ((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_young(pte_t pte) { return ((pte).pte) & (1 << (((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1)); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_file(pte_t pte) { return ((pte).pte) & ((1 << ((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_wrprotect(pte_t pte)
{
((pte).pte) &= ~((1 << ((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1)) | ((1 << ((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1))));
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_mkclean(pte_t pte)
{
((pte).pte) &= ~((1 << ((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))|((1 << ((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1))));
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_mkold(pte_t pte)
{
((pte).pte) &= ~((1 << (((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1))|((1 << (((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1))));
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_mkwrite(pte_t pte)
{
((pte).pte) |= (1 << ((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1));
if (((pte).pte) & (1 << ((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))
((pte).pte) |= ((1 << ((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1)));
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_mkdirty(pte_t pte)
{
((pte).pte) |= (1 << ((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1));
if (((pte).pte) & (1 << ((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1)))
((pte).pte) |= ((1 << ((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1)));
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_mkyoung(pte_t pte)
{
((pte).pte) |= (1 << (((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1));
if (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080)))) {
if (!(((pte).pte) & ({__BUG_ON((unsigned long)(!((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))))); 1 << (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))); })))
((pte).pte) |= ((1 << (((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1)));
} else {
if (((pte).pte) & ({__BUG_ON((unsigned long)(((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))))); 1 << (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1); }))
((pte).pte) |= ((1 << (((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1)));
}
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_huge(pte_t pte) { return ((pte).pte) & ({BUG(); 1; }); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_mkhuge(pte_t pte)
{
((pte).pte) |= ({BUG(); 1; });
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_special(pte_t pte) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_mkspecial(pte_t pte) { return pte; }
# 399 "./arch/mips/include/asm/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pgprot_t pgprot_noncached(pgprot_t _prot)
{
unsigned long prot = ((_prot).pgprot);
prot = (prot & ~(7 << (((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1) + 1))) | (2<<(((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1) + 1));
return ((pgprot_t) { (prot) } );
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pgprot_t pgprot_writecombine(pgprot_t _prot)
{
unsigned long prot = ((_prot).pgprot);
prot = (prot & ~(7 << (((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1) + 1))) | cpu_data[0].writecombine;
return ((pgprot_t) { (prot) } );
}
# 434 "./arch/mips/include/asm/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_modify(pte_t pte, pgprot_t newprot)
{
return ((pte_t) { ((((pte).pte) & ((~((1 << ((12 - 12 + (((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1) + 1) + 3))) - 1)) | (1 << (((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1)) | (1 << ((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)) | (7 << (((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1)))) + 1 : (((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))) + 1 : ((((((((cpu_data[0].options & 0x00800000ull) && !(cpu_data[0].isa_level & (0x00000002 | 0x00000004 | 0x00000008 | 0x00000040 | 0x00000080))) ? (0) : (0) + 1) + 1) + 1) + 1))))) + 1) + 1) + 1) + 1)))) | ((newprot).pgprot)) } );
}
extern void __update_tlb(struct vm_area_struct *vma, unsigned long address,
pte_t pte);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void update_mmu_cache(struct vm_area_struct *vma,
unsigned long address, pte_t *ptep)
{
pte_t pte = *ptep;
__update_tlb(vma, address, pte);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void update_mmu_cache_pmd(struct vm_area_struct *vma,
unsigned long address, pmd_t *pmdp)
{
pte_t pte = *(pte_t *)pmdp;
__update_tlb(vma, address, pte);
}
# 627 "./arch/mips/include/asm/pgtable.h"
# 1 "include/asm-generic/pgtable.h" 1
# 21 "include/asm-generic/pgtable.h"
extern int ptep_set_access_flags(struct vm_area_struct *vma,
unsigned long address, pte_t *ptep,
pte_t entry, int dirty);
extern int pmdp_set_access_flags(struct vm_area_struct *vma,
unsigned long address, pmd_t *pmdp,
pmd_t entry, int dirty);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int ptep_test_and_clear_young(struct vm_area_struct *vma,
unsigned long address,
pte_t *ptep)
{
pte_t pte = *ptep;
int r = 1;
if (!pte_young(pte))
r = 0;
else
set_pte_at(vma->vm_mm, address, ptep, pte_mkold(pte));
return r;
}
# 62 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmdp_test_and_clear_young(struct vm_area_struct *vma,
unsigned long address,
pmd_t *pmdp)
{
BUG();
return 0;
}
int ptep_clear_flush_young(struct vm_area_struct *vma,
unsigned long address, pte_t *ptep);
int pmdp_clear_flush_young(struct vm_area_struct *vma,
unsigned long address, pmd_t *pmdp);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t ptep_get_and_clear(struct mm_struct *mm,
unsigned long address,
pte_t *ptep)
{
pte_t pte = *ptep;
pte_clear(mm, address, ptep);
return pte;
}
# 107 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t ptep_get_and_clear_full(struct mm_struct *mm,
unsigned long address, pte_t *ptep,
int full)
{
pte_t pte;
pte = ptep_get_and_clear(mm, address, ptep);
return pte;
}
# 123 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pte_clear_not_present_full(struct mm_struct *mm,
unsigned long address,
pte_t *ptep,
int full)
{
pte_clear(mm, address, ptep);
}
extern pte_t ptep_clear_flush(struct vm_area_struct *vma,
unsigned long address,
pte_t *ptep);
extern pmd_t pmdp_clear_flush(struct vm_area_struct *vma,
unsigned long address,
pmd_t *pmdp);
struct mm_struct;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ptep_set_wrprotect(struct mm_struct *mm, unsigned long address, pte_t *ptep)
{
pte_t old_pte = *ptep;
set_pte_at(mm, address, ptep, pte_wrprotect(old_pte));
}
# 162 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pmdp_set_wrprotect(struct mm_struct *mm,
unsigned long address, pmd_t *pmdp)
{
BUG();
}
extern void pmdp_splitting_flush(struct vm_area_struct *vma,
unsigned long address, pmd_t *pmdp);
extern void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
pgtable_t pgtable);
extern pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp);
extern void pmdp_invalidate(struct vm_area_struct *vma, unsigned long address,
pmd_t *pmdp);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_same(pte_t pte_a, pte_t pte_b)
{
return ((pte_a).pte) == ((pte_b).pte);
}
# 203 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_unused(pte_t pte)
{
return 0;
}
# 216 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_same(pmd_t pmd_a, pmd_t pmd_b)
{
BUG();
return 0;
}
# 258 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
{
if (((oldprot).pgprot) == ((pgprot_noncached(oldprot)).pgprot))
newprot = pgprot_noncached(newprot);
if (((oldprot).pgprot) == ((pgprot_noncached(oldprot)).pgprot))
newprot = pgprot_noncached(newprot);
if (((oldprot).pgprot) == ((pgprot_noncached(oldprot)).pgprot))
newprot = pgprot_noncached(newprot);
return newprot;
}
# 300 "include/asm-generic/pgtable.h"
void pgd_clear_bad(pgd_t *);
void pud_clear_bad(pud_t *);
void pmd_clear_bad(pmd_t *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pgd_none_or_clear_bad(pgd_t *pgd)
{
if (pgd_none(*pgd))
return 1;
if (__builtin_expect(!!(pgd_bad(*pgd)), 0)) {
pgd_clear_bad(pgd);
return 1;
}
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pud_none_or_clear_bad(pud_t *pud)
{
if (pud_none(*pud))
return 1;
if (__builtin_expect(!!(pud_bad(*pud)), 0)) {
pud_clear_bad(pud);
return 1;
}
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_none_or_clear_bad(pmd_t *pmd)
{
if (pmd_none(*pmd))
return 1;
if (__builtin_expect(!!((((((((*pmd).pud).pgd).pgd))) & ~(~((1 << 12) - 1)))), 0)) {
pmd_clear_bad(pmd);
return 1;
}
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t __ptep_modify_prot_start(struct mm_struct *mm,
unsigned long addr,
pte_t *ptep)
{
return ptep_get_and_clear(mm, addr, ptep);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ptep_modify_prot_commit(struct mm_struct *mm,
unsigned long addr,
pte_t *ptep, pte_t pte)
{
set_pte_at(mm, addr, ptep, pte);
}
# 375 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t ptep_modify_prot_start(struct mm_struct *mm,
unsigned long addr,
pte_t *ptep)
{
return __ptep_modify_prot_start(mm, addr, ptep);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ptep_modify_prot_commit(struct mm_struct *mm,
unsigned long addr,
pte_t *ptep, pte_t pte)
{
__ptep_modify_prot_commit(mm, addr, ptep, pte);
}
# 432 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_soft_dirty(pte_t pte)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_soft_dirty(pmd_t pmd)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_mksoft_dirty(pte_t pte)
{
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pmd_t pmd_mksoft_dirty(pmd_t pmd)
{
return pmd;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_swp_mksoft_dirty(pte_t pte)
{
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_swp_soft_dirty(pte_t pte)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_swp_clear_soft_dirty(pte_t pte)
{
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_file_clear_soft_dirty(pte_t pte)
{
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_file_mksoft_dirty(pte_t pte)
{
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_file_soft_dirty(pte_t pte)
{
return 0;
}
# 494 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int track_pfn_remap(struct vm_area_struct *vma, pgprot_t *prot,
unsigned long pfn, unsigned long addr,
unsigned long size)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int track_pfn_insert(struct vm_area_struct *vma, pgprot_t *prot,
unsigned long pfn)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int track_pfn_copy(struct vm_area_struct *vma)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void untrack_pfn(struct vm_area_struct *vma,
unsigned long pfn, unsigned long size)
{
}
# 541 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_zero_pfn(unsigned long pfn)
{
extern unsigned long zero_pfn;
unsigned long offset_from_zero_pfn = pfn - zero_pfn;
return offset_from_zero_pfn <= (zero_page_mask >> 12);
}
# 567 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_trans_huge(pmd_t pmd)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_trans_splitting(pmd_t pmd)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_write(pmd_t pmd)
{
BUG();
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pmd_t pmd_read_atomic(pmd_t *pmdp)
{
return *pmdp;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_move_must_withdraw(spinlock_t *new_pmd_ptl,
spinlock_t *old_pmd_ptl)
{
return new_pmd_ptl != old_pmd_ptl;
}
# 629 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd)
{
pmd_t pmdval = pmd_read_atomic(pmd);
# 649 "include/asm-generic/pgtable.h"
if (pmd_none(pmdval) || pmd_trans_huge(pmdval))
return 1;
if (__builtin_expect(!!((((((((pmdval).pud).pgd).pgd))) & ~(~((1 << 12) - 1)))), 0)) {
pmd_clear_bad(pmd);
return 1;
}
return 0;
}
# 671 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_trans_unstable(pmd_t *pmd)
{
return 0;
}
# 787 "include/asm-generic/pgtable.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_numa(pmd_t pmd)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pte_numa(pte_t pte)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_mknonnuma(pte_t pte)
{
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pmd_t pmd_mknonnuma(pmd_t pmd)
{
return pmd;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t pte_mknuma(pte_t pte)
{
return pte;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ptep_set_numa(struct mm_struct *mm, unsigned long addr,
pte_t *ptep)
{
return;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pmd_t pmd_mknuma(pmd_t pmd)
{
return pmd;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pmdp_set_numa(struct mm_struct *mm, unsigned long addr,
pmd_t *pmdp)
{
return ;
}
# 628 "./arch/mips/include/asm/pgtable.h" 2
# 53 "include/linux/mm.h" 2
extern unsigned long sysctl_user_reserve_kbytes;
extern unsigned long sysctl_admin_reserve_kbytes;
extern int sysctl_overcommit_memory;
extern int sysctl_overcommit_ratio;
extern unsigned long sysctl_overcommit_kbytes;
extern int overcommit_ratio_handler(struct ctl_table *, int, void *,
size_t *, loff_t *);
extern int overcommit_kbytes_handler(struct ctl_table *, int, void *,
size_t *, loff_t *);
# 88 "include/linux/mm.h"
extern struct kmem_cache *vm_area_cachep;
# 188 "include/linux/mm.h"
extern pgprot_t protection_map[16];
# 207 "include/linux/mm.h"
struct vm_fault {
unsigned int flags;
unsigned long pgoff;
void *virtual_address;
struct page *page;
unsigned long max_pgoff;
pte_t *pte;
};
struct vm_operations_struct {
void (*open)(struct vm_area_struct * area);
void (*close)(struct vm_area_struct * area);
int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);
void (*map_pages)(struct vm_area_struct *vma, struct vm_fault *vmf);
int (*page_mkwrite)(struct vm_area_struct *vma, struct vm_fault *vmf);
int (*access)(struct vm_area_struct *vma, unsigned long addr,
void *buf, int len, int write);
const char *(*name)(struct vm_area_struct *vma);
# 275 "include/linux/mm.h"
int (*remap_pages)(struct vm_area_struct *vma, unsigned long addr,
unsigned long size, unsigned long pgoff);
};
struct mmu_gather;
struct inode;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_freepage_migratetype(struct page *page, int migratetype)
{
page->index = migratetype;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int get_freepage_migratetype(struct page *page)
{
return page->index;
}
# 1 "include/linux/page-flags.h" 1
# 74 "include/linux/page-flags.h"
enum pageflags {
PG_locked,
PG_error,
PG_referenced,
PG_uptodate,
PG_dirty,
PG_lru,
PG_active,
PG_slab,
PG_owner_priv_1,
PG_arch_1,
PG_reserved,
PG_private,
PG_private_2,
PG_writeback,
PG_head,
PG_tail,
PG_swapcache,
PG_mappedtodisk,
PG_reclaim,
PG_swapbacked,
PG_unevictable,
PG_mlocked,
# 112 "include/linux/page-flags.h"
__NR_PAGEFLAGS,
PG_checked = PG_owner_priv_1,
PG_fscache = PG_private_2,
PG_pinned = PG_owner_priv_1,
PG_savepinned = PG_dirty,
PG_slob_free = PG_private,
};
# 204 "include/linux/page-flags.h"
struct page;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageLocked(const struct page *page) { return test_bit(PG_locked, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageError(const struct page *page) { return test_bit(PG_error, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageError(struct page *page) { set_bit(PG_error, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageError(struct page *page) { clear_bit(PG_error, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPageError(struct page *page) { return test_and_clear_bit(PG_error, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageReferenced(const struct page *page) { return test_bit(PG_referenced, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageReferenced(struct page *page) { set_bit(PG_referenced, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageReferenced(struct page *page) { clear_bit(PG_referenced, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPageReferenced(struct page *page) { return test_and_clear_bit(PG_referenced, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __SetPageReferenced(struct page *page) { __set_bit(PG_referenced, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageDirty(const struct page *page) { return test_bit(PG_dirty, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageDirty(struct page *page) { set_bit(PG_dirty, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageDirty(struct page *page) { clear_bit(PG_dirty, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestSetPageDirty(struct page *page) { return test_and_set_bit(PG_dirty, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPageDirty(struct page *page) { return test_and_clear_bit(PG_dirty, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageDirty(struct page *page) { __clear_bit(PG_dirty, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageLRU(const struct page *page) { return test_bit(PG_lru, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageLRU(struct page *page) { set_bit(PG_lru, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageLRU(struct page *page) { clear_bit(PG_lru, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageLRU(struct page *page) { __clear_bit(PG_lru, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageActive(const struct page *page) { return test_bit(PG_active, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageActive(struct page *page) { set_bit(PG_active, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageActive(struct page *page) { clear_bit(PG_active, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageActive(struct page *page) { __clear_bit(PG_active, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPageActive(struct page *page) { return test_and_clear_bit(PG_active, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageSlab(const struct page *page) { return test_bit(PG_slab, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __SetPageSlab(struct page *page) { __set_bit(PG_slab, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageSlab(struct page *page) { __clear_bit(PG_slab, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageChecked(const struct page *page) { return test_bit(PG_checked, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageChecked(struct page *page) { set_bit(PG_checked, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageChecked(struct page *page) { clear_bit(PG_checked, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PagePinned(const struct page *page) { return test_bit(PG_pinned, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPagePinned(struct page *page) { set_bit(PG_pinned, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPagePinned(struct page *page) { clear_bit(PG_pinned, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestSetPagePinned(struct page *page) { return test_and_set_bit(PG_pinned, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPagePinned(struct page *page) { return test_and_clear_bit(PG_pinned, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageSavePinned(const struct page *page) { return test_bit(PG_savepinned, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageSavePinned(struct page *page) { set_bit(PG_savepinned, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageSavePinned(struct page *page) { clear_bit(PG_savepinned, &page->flags); };
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageReserved(const struct page *page) { return test_bit(PG_reserved, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageReserved(struct page *page) { set_bit(PG_reserved, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageReserved(struct page *page) { clear_bit(PG_reserved, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageReserved(struct page *page) { __clear_bit(PG_reserved, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageSwapBacked(const struct page *page) { return test_bit(PG_swapbacked, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageSwapBacked(struct page *page) { set_bit(PG_swapbacked, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageSwapBacked(struct page *page) { clear_bit(PG_swapbacked, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageSwapBacked(struct page *page) { __clear_bit(PG_swapbacked, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __SetPageSwapBacked(struct page *page) { __set_bit(PG_swapbacked, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageSlobFree(const struct page *page) { return test_bit(PG_slob_free, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __SetPageSlobFree(struct page *page) { __set_bit(PG_slob_free, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageSlobFree(struct page *page) { __clear_bit(PG_slob_free, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PagePrivate(const struct page *page) { return test_bit(PG_private, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPagePrivate(struct page *page) { set_bit(PG_private, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPagePrivate(struct page *page) { clear_bit(PG_private, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __SetPagePrivate(struct page *page) { __set_bit(PG_private, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPagePrivate(struct page *page) { __clear_bit(PG_private, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PagePrivate2(const struct page *page) { return test_bit(PG_private_2, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPagePrivate2(struct page *page) { set_bit(PG_private_2, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPagePrivate2(struct page *page) { clear_bit(PG_private_2, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestSetPagePrivate2(struct page *page) { return test_and_set_bit(PG_private_2, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPagePrivate2(struct page *page) { return test_and_clear_bit(PG_private_2, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageOwnerPriv1(const struct page *page) { return test_bit(PG_owner_priv_1, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageOwnerPriv1(struct page *page) { set_bit(PG_owner_priv_1, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageOwnerPriv1(struct page *page) { clear_bit(PG_owner_priv_1, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPageOwnerPriv1(struct page *page) { return test_and_clear_bit(PG_owner_priv_1, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageWriteback(const struct page *page) { return test_bit(PG_writeback, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestSetPageWriteback(struct page *page) { return test_and_set_bit(PG_writeback, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPageWriteback(struct page *page) { return test_and_clear_bit(PG_writeback, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageMappedToDisk(const struct page *page) { return test_bit(PG_mappedtodisk, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageMappedToDisk(struct page *page) { set_bit(PG_mappedtodisk, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageMappedToDisk(struct page *page) { clear_bit(PG_mappedtodisk, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageReclaim(const struct page *page) { return test_bit(PG_reclaim, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageReclaim(struct page *page) { set_bit(PG_reclaim, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageReclaim(struct page *page) { clear_bit(PG_reclaim, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPageReclaim(struct page *page) { return test_and_clear_bit(PG_reclaim, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageReadahead(const struct page *page) { return test_bit(PG_reclaim, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageReadahead(struct page *page) { set_bit(PG_reclaim, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageReadahead(struct page *page) { clear_bit(PG_reclaim, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPageReadahead(struct page *page) { return test_and_clear_bit(PG_reclaim, &page->flags); }
# 252 "include/linux/page-flags.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageHighMem(const struct page *page) { return 0; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageHighMem(struct page *page) { } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageHighMem(struct page *page) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageSwapCache(const struct page *page) { return 0; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageSwapCache(struct page *page) { } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageSwapCache(struct page *page) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageUnevictable(const struct page *page) { return test_bit(PG_unevictable, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageUnevictable(struct page *page) { set_bit(PG_unevictable, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageUnevictable(struct page *page) { clear_bit(PG_unevictable, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageUnevictable(struct page *page) { __clear_bit(PG_unevictable, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPageUnevictable(struct page *page) { return test_and_clear_bit(PG_unevictable, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageMlocked(const struct page *page) { return test_bit(PG_mlocked, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageMlocked(struct page *page) { set_bit(PG_mlocked, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageMlocked(struct page *page) { clear_bit(PG_mlocked, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageMlocked(struct page *page) { __clear_bit(PG_mlocked, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestSetPageMlocked(struct page *page) { return test_and_set_bit(PG_mlocked, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int TestClearPageMlocked(struct page *page) { return test_and_clear_bit(PG_mlocked, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __TestClearPageMlocked(struct page *page) { return __test_and_clear_bit(PG_mlocked, &page->flags); }
# 275 "include/linux/page-flags.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageUncached(const struct page *page) { return 0; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageUncached(struct page *page) { } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageUncached(struct page *page) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageHWPoison(const struct page *page) { return 0; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageHWPoison(struct page *page) { } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageHWPoison(struct page *page) { }
u64 stable_page_flags(struct page *page);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageUptodate(struct page *page)
{
int ret = test_bit(PG_uptodate, &(page)->flags);
# 301 "include/linux/page-flags.h"
if (ret)
__asm__ __volatile__("": : :"memory");
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __SetPageUptodate(struct page *page)
{
__asm__ __volatile__("": : :"memory");
__set_bit(PG_uptodate, &(page)->flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageUptodate(struct page *page)
{
__asm__ __volatile__("": : :"memory");
set_bit(PG_uptodate, &(page)->flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageUptodate(struct page *page) { clear_bit(PG_uptodate, &page->flags); }
extern void cancel_dirty_page(struct page *page, unsigned int account_size);
int test_clear_page_writeback(struct page *page);
int __test_set_page_writeback(struct page *page, bool keep_write);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_page_writeback(struct page *page)
{
__test_set_page_writeback(page, false);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_page_writeback_keepwrite(struct page *page)
{
__test_set_page_writeback(page, true);
}
# 355 "include/linux/page-flags.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageHead(const struct page *page) { return test_bit(PG_head, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __SetPageHead(struct page *page) { __set_bit(PG_head, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageHead(struct page *page) { __clear_bit(PG_head, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageHead(struct page *page) { clear_bit(PG_head, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageTail(const struct page *page) { return test_bit(PG_tail, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __SetPageTail(struct page *page) { __set_bit(PG_tail, &page->flags); } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageTail(struct page *page) { __clear_bit(PG_tail, &page->flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageCompound(struct page *page)
{
return page->flags & ((1L << PG_head) | (1L << PG_tail));
}
# 463 "include/linux/page-flags.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageTransHuge(struct page *page)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageTransCompound(struct page *page)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageTransTail(struct page *page)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageSlabPfmemalloc(struct page *page)
{
((void)(sizeof(( long)(!PageSlab(page)))));
return PageActive(page);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void SetPageSlabPfmemalloc(struct page *page)
{
((void)(sizeof(( long)(!PageSlab(page)))));
SetPageActive(page);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageSlabPfmemalloc(struct page *page)
{
((void)(sizeof(( long)(!PageSlab(page)))));
__ClearPageActive(page);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ClearPageSlabPfmemalloc(struct page *page)
{
((void)(sizeof(( long)(!PageSlab(page)))));
ClearPageActive(page);
}
# 547 "include/linux/page-flags.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int page_has_private(struct page *page)
{
return !!(page->flags & (1 << PG_private | 1 << PG_private_2));
}
# 302 "include/linux/mm.h" 2
# 1 "include/linux/huge_mm.h" 1
extern int do_huge_pmd_anonymous_page(struct mm_struct *mm,
struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd,
unsigned int flags);
extern int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm,
pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr,
struct vm_area_struct *vma);
extern void huge_pmd_set_accessed(struct mm_struct *mm,
struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd,
pmd_t orig_pmd, int dirty);
extern int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd,
pmd_t orig_pmd);
extern struct page *follow_trans_huge_pmd(struct vm_area_struct *vma,
unsigned long addr,
pmd_t *pmd,
unsigned int flags);
extern int zap_huge_pmd(struct mmu_gather *tlb,
struct vm_area_struct *vma,
pmd_t *pmd, unsigned long addr);
extern int mincore_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
unsigned long addr, unsigned long end,
unsigned char *vec);
extern int move_huge_pmd(struct vm_area_struct *vma,
struct vm_area_struct *new_vma,
unsigned long old_addr,
unsigned long new_addr, unsigned long old_end,
pmd_t *old_pmd, pmd_t *new_pmd);
extern int change_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
unsigned long addr, pgprot_t newprot,
int prot_numa);
enum transparent_hugepage_flag {
TRANSPARENT_HUGEPAGE_FLAG,
TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG,
TRANSPARENT_HUGEPAGE_DEFRAG_FLAG,
TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG,
TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG,
TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG,
};
enum page_check_address_pmd_flag {
PAGE_CHECK_ADDRESS_PMD_FLAG,
PAGE_CHECK_ADDRESS_PMD_NOTSPLITTING_FLAG,
PAGE_CHECK_ADDRESS_PMD_SPLITTING_FLAG,
};
extern pmd_t *page_check_address_pmd(struct page *page,
struct mm_struct *mm,
unsigned long address,
enum page_check_address_pmd_flag flag,
spinlock_t **ptl);
# 170 "include/linux/huge_mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
split_huge_page_to_list(struct page *page, struct list_head *list)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int split_huge_page(struct page *page)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hugepage_madvise(struct vm_area_struct *vma,
unsigned long *vm_flags, int advice)
{
BUG();
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vma_adjust_trans_huge(struct vm_area_struct *vma,
unsigned long start,
unsigned long end,
long adjust_next)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pmd_trans_huge_lock(pmd_t *pmd, struct vm_area_struct *vma,
spinlock_t **ptl)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int do_huge_pmd_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long addr, pmd_t pmd, pmd_t *pmdp)
{
return 0;
}
# 303 "include/linux/mm.h" 2
# 320 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int put_page_testzero(struct page *page)
{
((void)(sizeof(( long)((*(volatile typeof((&page->_count)->counter) *)&((&page->_count)->counter)) == 0))));
return (atomic_sub_return(1, (&page->_count)) == 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int get_page_unless_zero(struct page *page)
{
return atomic_add_unless((&page->_count), 1, 0);
}
# 344 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int put_page_unless_one(struct page *page)
{
return atomic_add_unless(&page->_count, -1, 1);
}
extern int page_is_ram(unsigned long pfn);
extern int region_is_ram(resource_size_t phys_addr, unsigned long size);
struct page *vmalloc_to_page(const void *addr);
unsigned long vmalloc_to_pfn(const void *addr);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_vmalloc_addr(const void *x)
{
unsigned long addr = (unsigned long)x;
return addr >= (0xc0000000UL) && addr < ((((unsigned long)(long)(int)0xfffe0000) - (__end_of_fixed_addresses << 12))-2*((1UL) << 12));
}
extern int is_vmalloc_or_module_addr(const void *x);
extern void kvfree(const void *addr);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void compound_lock(struct page *page)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void compound_unlock(struct page *page)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long compound_lock_irqsave(struct page *page)
{
unsigned long flags = flags;
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void compound_unlock_irqrestore(struct page *page,
unsigned long flags)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *compound_head_by_tail(struct page *tail)
{
struct page *head = tail->first_page;
__asm__ __volatile__("": : :"memory");
if (__builtin_expect(!!(PageTail(tail)), 1))
return head;
return tail;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *compound_head(struct page *page)
{
if (__builtin_expect(!!(PageTail(page)), 0))
return compound_head_by_tail(page);
return page;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void page_mapcount_reset(struct page *page)
{
((&(page)->_mapcount)->counter = (-1));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int page_mapcount(struct page *page)
{
return (*(volatile typeof((&(page)->_mapcount)->counter) *)&((&(page)->_mapcount)->counter)) + 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int page_count(struct page *page)
{
return (*(volatile typeof((&compound_head(page)->_count)->counter) *)&((&compound_head(page)->_count)->counter));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageHeadHuge(struct page *page_head)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __compound_tail_refcounted(struct page *page)
{
return !PageSlab(page) && !PageHeadHuge(page);
}
# 482 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool compound_tail_refcounted(struct page *page)
{
((void)(sizeof(( long)(!PageHead(page)))));
return __compound_tail_refcounted(page);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void get_huge_page_tail(struct page *page)
{
((void)(sizeof(( long)(!PageTail(page)))));
((void)(sizeof(( long)(page_mapcount(page) < 0))));
((void)(sizeof(( long)((*(volatile typeof((&page->_count)->counter) *)&((&page->_count)->counter)) != 0))));
if (compound_tail_refcounted(page->first_page))
atomic_add(1, (&page->_mapcount));
}
extern bool __get_page_tail(struct page *page);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void get_page(struct page *page)
{
if (__builtin_expect(!!(PageTail(page)), 0))
if (__builtin_expect(!!(__get_page_tail(page)), 1))
return;
((void)(sizeof(( long)((*(volatile typeof((&page->_count)->counter) *)&((&page->_count)->counter)) <= 0))));
atomic_add(1, (&page->_count));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *virt_to_head_page(const void *x)
{
struct page *page = (mem_map + ((((virt_to_phys((void *) (x))) >> 12)) - ((((0UL)) + ((1UL) << 12)-1) >> 12)));
return compound_head(page);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_page_count(struct page *page)
{
((&page->_count)->counter = (1));
}
# 541 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageBuddy(struct page *page)
{
return (*(volatile typeof((&page->_mapcount)->counter) *)&((&page->_mapcount)->counter)) == (-128);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __SetPageBuddy(struct page *page)
{
((void)(sizeof(( long)((*(volatile typeof((&page->_mapcount)->counter) *)&((&page->_mapcount)->counter)) != -1))));
((&page->_mapcount)->counter = ((-128)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageBuddy(struct page *page)
{
((void)(sizeof(( long)(!PageBuddy(page)))));
((&page->_mapcount)->counter = (-1));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageBalloon(struct page *page)
{
return (*(volatile typeof((&page->_mapcount)->counter) *)&((&page->_mapcount)->counter)) == (-256);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __SetPageBalloon(struct page *page)
{
((void)(sizeof(( long)((*(volatile typeof((&page->_mapcount)->counter) *)&((&page->_mapcount)->counter)) != -1))));
((&page->_mapcount)->counter = ((-256)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __ClearPageBalloon(struct page *page)
{
((void)(sizeof(( long)(!PageBalloon(page)))));
((&page->_mapcount)->counter = (-1));
}
void put_page(struct page *page);
void put_pages_list(struct list_head *pages);
void split_page(struct page *page, unsigned int order);
int split_free_page(struct page *page);
typedef void compound_page_dtor(struct page *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_compound_page_dtor(struct page *page,
compound_page_dtor *dtor)
{
page[1].lru.next = (void *)dtor;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) compound_page_dtor *get_compound_page_dtor(struct page *page)
{
return (compound_page_dtor *)page[1].lru.next;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int compound_order(struct page *page)
{
if (!PageHead(page))
return 0;
return (unsigned long)page[1].lru.prev;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_compound_order(struct page *page, unsigned long order)
{
page[1].lru.prev = (void *)order;
}
# 620 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma)
{
if (__builtin_expect(!!(vma->vm_flags & 0x00000002), 1))
pte = pte_mkwrite(pte);
return pte;
}
void do_set_pte(struct vm_area_struct *vma, unsigned long address,
struct page *page, pte_t *pte, bool write, bool anon);
# 735 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum zone_type page_zonenum(const struct page *page)
{
return (page->flags >> (((((sizeof(unsigned long)*8) - 0) - 0) - 1) * (1 != 0))) & ((1UL << 1) - 1);
}
# 752 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int page_zone_id(struct page *page)
{
return (page->flags >> ((((((sizeof(unsigned long)*8) - 0) - 0) < ((((sizeof(unsigned long)*8) - 0) - 0) - 1))? (((sizeof(unsigned long)*8) - 0) - 0) : ((((sizeof(unsigned long)*8) - 0) - 0) - 1)) * ((0 + 1) != 0))) & ((1UL << (0 + 1)) - 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int zone_to_nid(struct zone *zone)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int page_to_nid(const struct page *page)
{
return (page->flags >> ((((sizeof(unsigned long)*8) - 0) - 0) * (0 != 0))) & ((1UL << 0) - 1);
}
# 843 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int page_cpupid_xchg_last(struct page *page, int cpupid)
{
return page_to_nid(page);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int page_cpupid_last(struct page *page)
{
return page_to_nid(page);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpupid_to_nid(int cpupid)
{
return -1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpupid_to_pid(int cpupid)
{
return -1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpupid_to_cpu(int cpupid)
{
return -1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cpu_pid_to_cpupid(int nid, int pid)
{
return -1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool cpupid_pid_unset(int cpupid)
{
return 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void page_cpupid_reset_last(struct page *page)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool cpupid_match_pid(struct task_struct *task, int cpupid)
{
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct zone *page_zone(const struct page *page)
{
return &(&contig_page_data)->node_zones[page_zonenum(page)];
}
# 906 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_page_zone(struct page *page, enum zone_type zone)
{
page->flags &= ~(((1UL << 1) - 1) << (((((sizeof(unsigned long)*8) - 0) - 0) - 1) * (1 != 0)));
page->flags |= (zone & ((1UL << 1) - 1)) << (((((sizeof(unsigned long)*8) - 0) - 0) - 1) * (1 != 0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_page_node(struct page *page, unsigned long node)
{
page->flags &= ~(((1UL << 0) - 1) << ((((sizeof(unsigned long)*8) - 0) - 0) * (0 != 0)));
page->flags |= (node & ((1UL << 0) - 1)) << ((((sizeof(unsigned long)*8) - 0) - 0) * (0 != 0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_page_links(struct page *page, enum zone_type zone,
unsigned long node, unsigned long pfn)
{
set_page_zone(page, zone);
set_page_node(page, node);
}
# 1 "include/linux/vmstat.h" 1
# 1 "include/linux/mm.h" 1
# 7 "include/linux/vmstat.h" 2
# 1 "include/linux/vm_event_item.h" 1
# 24 "include/linux/vm_event_item.h"
enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
PGALLOC_NORMAL , PGALLOC_MOVABLE,
PGFREE, PGACTIVATE, PGDEACTIVATE,
PGFAULT, PGMAJFAULT,
PGREFILL_NORMAL , PGREFILL_MOVABLE,
PGSTEAL_KSWAPD_NORMAL , PGSTEAL_KSWAPD_MOVABLE,
PGSTEAL_DIRECT_NORMAL , PGSTEAL_DIRECT_MOVABLE,
PGSCAN_KSWAPD_NORMAL , PGSCAN_KSWAPD_MOVABLE,
PGSCAN_DIRECT_NORMAL , PGSCAN_DIRECT_MOVABLE,
PGSCAN_DIRECT_THROTTLE,
PGINODESTEAL, SLABS_SCANNED, KSWAPD_INODESTEAL,
KSWAPD_LOW_WMARK_HIT_QUICKLY, KSWAPD_HIGH_WMARK_HIT_QUICKLY,
PAGEOUTRUN, ALLOCSTALL, PGROTATED,
DROP_PAGECACHE, DROP_SLAB,
# 49 "include/linux/vm_event_item.h"
PGMIGRATE_SUCCESS, PGMIGRATE_FAIL,
COMPACTMIGRATE_SCANNED, COMPACTFREE_SCANNED,
COMPACTISOLATED,
COMPACTSTALL, COMPACTFAIL, COMPACTSUCCESS,
UNEVICTABLE_PGCULLED,
UNEVICTABLE_PGSCANNED,
UNEVICTABLE_PGRESCUED,
UNEVICTABLE_PGMLOCKED,
UNEVICTABLE_PGMUNLOCKED,
UNEVICTABLE_PGCLEARED,
UNEVICTABLE_PGSTRANDED,
# 94 "include/linux/vm_event_item.h"
NR_VM_EVENT_ITEMS
};
# 9 "include/linux/vmstat.h" 2
extern int sysctl_stat_interval;
# 24 "include/linux/vmstat.h"
struct vm_event_state {
unsigned long event[NR_VM_EVENT_ITEMS];
};
extern __attribute__((section(".data..percpu" ""))) __typeof__(struct vm_event_state) vm_event_states;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __count_vm_event(enum vm_event_item item)
{
do { do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(vm_event_states.event[item])) { case 1: do { *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; } while (0);break; case 2: do { *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; } while (0);break; case 4: do { *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; } while (0);break; case 8: do { *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void count_vm_event(enum vm_event_item item)
{
do { do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(vm_event_states.event[item])) { case 1: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 2: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 4: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 8: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __count_vm_events(enum vm_event_item item, long delta)
{
do { do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(vm_event_states.event[item])) { case 1: do { *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += delta; } while (0);break; case 2: do { *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += delta; } while (0);break; case 4: do { *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += delta; } while (0);break; case 8: do { *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += delta; } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void count_vm_events(enum vm_event_item item, long delta)
{
do { do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(vm_event_states.event[item])) { case 1: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += delta; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 2: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += delta; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 4: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += delta; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 8: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(vm_event_states.event[item])) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))); (typeof((typeof(*(&(vm_event_states.event[item]))) *)(&(vm_event_states.event[item])))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += delta; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
}
extern void all_vm_events(unsigned long *);
extern void vm_events_fold_cpu(int cpu);
# 111 "include/linux/vmstat.h"
extern atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS];
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void zone_page_state_add(long x, struct zone *zone,
enum zone_stat_item item)
{
atomic_long_add(x, &zone->vm_stat[item]);
atomic_long_add(x, &vm_stat[item]);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long global_page_state(enum zone_stat_item item)
{
long x = atomic_long_read(&vm_stat[item]);
if (x < 0)
x = 0;
return x;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long zone_page_state(struct zone *zone,
enum zone_stat_item item)
{
long x = atomic_long_read(&zone->vm_stat[item]);
if (x < 0)
x = 0;
return x;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long zone_page_state_snapshot(struct zone *zone,
enum zone_stat_item item)
{
long x = atomic_long_read(&zone->vm_stat[item]);
int cpu;
for (((cpu)) = -1; ((cpu)) = cpumask_next(((cpu)), (cpu_online_mask)), ((cpu)) < nr_cpu_ids;)
x += ({ do { const void *__vpp_verify = (typeof((zone->pageset) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((zone->pageset))) *)((zone->pageset)))); (typeof((typeof(*((zone->pageset))) *)((zone->pageset)))) (__ptr + (((__per_cpu_offset[(cpu)])))); }); })->vm_stat_diff[item];
if (x < 0)
x = 0;
return x;
}
# 201 "include/linux/vmstat.h"
void __mod_zone_page_state(struct zone *, enum zone_stat_item item, int);
void __inc_zone_page_state(struct page *, enum zone_stat_item);
void __dec_zone_page_state(struct page *, enum zone_stat_item);
void mod_zone_page_state(struct zone *, enum zone_stat_item, int);
void inc_zone_page_state(struct page *, enum zone_stat_item);
void dec_zone_page_state(struct page *, enum zone_stat_item);
extern void inc_zone_state(struct zone *, enum zone_stat_item);
extern void __inc_zone_state(struct zone *, enum zone_stat_item);
extern void dec_zone_state(struct zone *, enum zone_stat_item);
extern void __dec_zone_state(struct zone *, enum zone_stat_item);
void cpu_vm_stats_fold(int cpu);
void refresh_zone_stat_thresholds(void);
void drain_zonestat(struct zone *zone, struct per_cpu_pageset *);
int calculate_pressure_threshold(struct zone *zone);
int calculate_normal_threshold(struct zone *zone);
void set_pgdat_percpu_threshold(pg_data_t *pgdat,
int (*calculate_pressure)(struct zone *));
# 280 "include/linux/vmstat.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __mod_zone_freepage_state(struct zone *zone, int nr_pages,
int migratetype)
{
__mod_zone_page_state(zone, NR_FREE_PAGES, nr_pages);
if (false)
__mod_zone_page_state(zone, NR_FREE_CMA_PAGES, nr_pages);
}
extern const char * const vmstat_text[];
# 932 "include/linux/mm.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) void *lowmem_page_address(const struct page *page)
{
return ((void *)((unsigned long)(((phys_addr_t)(((unsigned long)((page) - mem_map) + ((((0UL)) + ((1UL) << 12)-1) >> 12))) << 12)) + ((0x80000000UL) + (0UL)) - (0UL)));
}
# 986 "include/linux/mm.h"
extern struct address_space *page_mapping(struct page *page);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *page_rmapping(struct page *page)
{
return (void *)((unsigned long)page->mapping & ~(1 | 2));
}
extern struct address_space *__page_file_mapping(struct page *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
struct address_space *page_file_mapping(struct page *page)
{
if (__builtin_expect(!!(PageSwapCache(page)), 0))
return __page_file_mapping(page);
return page->mapping;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int PageAnon(struct page *page)
{
return ((unsigned long)page->mapping & 1) != 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long page_index(struct page *page)
{
if (__builtin_expect(!!(PageSwapCache(page)), 0))
return ((page)->private);
return page->index;
}
extern unsigned long __page_file_index(struct page *page);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long page_file_index(struct page *page)
{
if (__builtin_expect(!!(PageSwapCache(page)), 0))
return __page_file_index(page);
return page->index;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int page_mapped(struct page *page)
{
return (*(volatile typeof((&(page)->_mapcount)->counter) *)&((&(page)->_mapcount)->counter)) >= 0;
}
# 1077 "include/linux/mm.h"
extern void pagefault_out_of_memory(void);
# 1087 "include/linux/mm.h"
extern void show_free_areas(unsigned int flags);
extern bool skip_free_areas_node(unsigned int flags, int nid);
int shmem_zero_setup(struct vm_area_struct *);
bool shmem_mapping(struct address_space *mapping);
extern int can_do_mlock(void);
extern int user_shm_lock(size_t, struct user_struct *);
extern void user_shm_unlock(size_t, struct user_struct *);
struct zap_details {
struct vm_area_struct *nonlinear_vma;
struct address_space *check_mapping;
unsigned long first_index;
unsigned long last_index;
};
struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
pte_t pte);
int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,
unsigned long size);
void zap_page_range(struct vm_area_struct *vma, unsigned long address,
unsigned long size, struct zap_details *);
void unmap_vmas(struct mmu_gather *tlb, struct vm_area_struct *start_vma,
unsigned long start, unsigned long end);
# 1140 "include/linux/mm.h"
struct mm_walk {
int (*pgd_entry)(pgd_t *pgd, unsigned long addr,
unsigned long next, struct mm_walk *walk);
int (*pud_entry)(pud_t *pud, unsigned long addr,
unsigned long next, struct mm_walk *walk);
int (*pmd_entry)(pmd_t *pmd, unsigned long addr,
unsigned long next, struct mm_walk *walk);
int (*pte_entry)(pte_t *pte, unsigned long addr,
unsigned long next, struct mm_walk *walk);
int (*pte_hole)(unsigned long addr, unsigned long next,
struct mm_walk *walk);
int (*hugetlb_entry)(pte_t *pte, unsigned long hmask,
unsigned long addr, unsigned long next,
struct mm_walk *walk);
struct mm_struct *mm;
void *private;
};
int walk_page_range(unsigned long addr, unsigned long end,
struct mm_walk *walk);
void free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
unsigned long end, unsigned long floor, unsigned long ceiling);
int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
struct vm_area_struct *vma);
void unmap_mapping_range(struct address_space *mapping,
loff_t const holebegin, loff_t const holelen, int even_cows);
int follow_pfn(struct vm_area_struct *vma, unsigned long address,
unsigned long *pfn);
int follow_phys(struct vm_area_struct *vma, unsigned long address,
unsigned int flags, unsigned long *prot, resource_size_t *phys);
int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
void *buf, int len, int write);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void unmap_shared_mapping_range(struct address_space *mapping,
loff_t const holebegin, loff_t const holelen)
{
unmap_mapping_range(mapping, holebegin, holelen, 0);
}
extern void truncate_pagecache(struct inode *inode, loff_t new);
extern void truncate_setsize(struct inode *inode, loff_t newsize);
void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to);
void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end);
int truncate_inode_page(struct address_space *mapping, struct page *page);
int generic_error_remove_page(struct address_space *mapping, struct page *page);
int invalidate_inode_page(struct page *page);
extern int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, unsigned int flags);
extern int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm,
unsigned long address, unsigned int fault_flags);
# 1211 "include/linux/mm.h"
extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
void *buf, int len, int write);
long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
unsigned int foll_flags, struct page **pages,
struct vm_area_struct **vmas, int *nonblocking);
long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
int write, int force, struct page **pages,
struct vm_area_struct **vmas);
int get_user_pages_fast(unsigned long start, int nr_pages, int write,
struct page **pages);
struct kvec;
int get_kernel_pages(const struct kvec *iov, int nr_pages, int write,
struct page **pages);
int get_kernel_page(unsigned long start, int write, struct page **pages);
struct page *get_dump_page(unsigned long addr);
extern int try_to_release_page(struct page * page, gfp_t gfp_mask);
extern void do_invalidatepage(struct page *page, unsigned int offset,
unsigned int length);
int __set_page_dirty_nobuffers(struct page *page);
int __set_page_dirty_no_writeback(struct page *page);
int redirty_page_for_writepage(struct writeback_control *wbc,
struct page *page);
void account_page_dirtied(struct page *page, struct address_space *mapping);
int set_page_dirty(struct page *page);
int set_page_dirty_lock(struct page *page);
int clear_page_dirty_for_io(struct page *page);
int get_cmdline(struct task_struct *task, char *buffer, int buflen);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int vma_growsdown(struct vm_area_struct *vma, unsigned long addr)
{
return vma && (vma->vm_end == addr) && (vma->vm_flags & 0x00000100);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int stack_guard_page_start(struct vm_area_struct *vma,
unsigned long addr)
{
return (vma->vm_flags & 0x00000100) &&
(vma->vm_start == addr) &&
!vma_growsdown(vma->vm_prev, addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int vma_growsup(struct vm_area_struct *vma, unsigned long addr)
{
return vma && (vma->vm_start == addr) && (vma->vm_flags & 0x00000000);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int stack_guard_page_end(struct vm_area_struct *vma,
unsigned long addr)
{
return (vma->vm_flags & 0x00000000) &&
(vma->vm_end == addr) &&
!vma_growsup(vma->vm_next, addr);
}
extern struct task_struct *task_of_stack(struct task_struct *task,
struct vm_area_struct *vma, bool in_group);
extern unsigned long move_page_tables(struct vm_area_struct *vma,
unsigned long old_addr, struct vm_area_struct *new_vma,
unsigned long new_addr, unsigned long len,
bool need_rmap_locks);
extern unsigned long change_protection(struct vm_area_struct *vma, unsigned long start,
unsigned long end, pgprot_t newprot,
int dirty_accountable, int prot_numa);
extern int mprotect_fixup(struct vm_area_struct *vma,
struct vm_area_struct **pprev, unsigned long start,
unsigned long end, unsigned long newflags);
int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
struct page **pages);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long get_mm_counter(struct mm_struct *mm, int member)
{
long val = atomic_long_read(&mm->rss_stat.count[member]);
# 1307 "include/linux/mm.h"
return (unsigned long)val;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void add_mm_counter(struct mm_struct *mm, int member, long value)
{
atomic_long_add(value, &mm->rss_stat.count[member]);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void inc_mm_counter(struct mm_struct *mm, int member)
{
atomic_long_inc(&mm->rss_stat.count[member]);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dec_mm_counter(struct mm_struct *mm, int member)
{
atomic_long_dec(&mm->rss_stat.count[member]);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long get_mm_rss(struct mm_struct *mm)
{
return get_mm_counter(mm, MM_FILEPAGES) +
get_mm_counter(mm, MM_ANONPAGES);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long get_mm_hiwater_rss(struct mm_struct *mm)
{
return ({ typeof(mm->hiwater_rss) _max1 = (mm->hiwater_rss); typeof(get_mm_rss(mm)) _max2 = (get_mm_rss(mm)); (void) (&_max1 == &_max2); _max1 > _max2 ? _max1 : _max2; });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long get_mm_hiwater_vm(struct mm_struct *mm)
{
return ({ typeof(mm->hiwater_vm) _max1 = (mm->hiwater_vm); typeof(mm->total_vm) _max2 = (mm->total_vm); (void) (&_max1 == &_max2); _max1 > _max2 ? _max1 : _max2; });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void update_hiwater_rss(struct mm_struct *mm)
{
unsigned long _rss = get_mm_rss(mm);
if ((mm)->hiwater_rss < _rss)
(mm)->hiwater_rss = _rss;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void update_hiwater_vm(struct mm_struct *mm)
{
if (mm->hiwater_vm < mm->total_vm)
mm->hiwater_vm = mm->total_vm;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void setmax_mm_hiwater_rss(unsigned long *maxrss,
struct mm_struct *mm)
{
unsigned long hiwater_rss = get_mm_hiwater_rss(mm);
if (*maxrss < hiwater_rss)
*maxrss = hiwater_rss;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sync_mm_rss(struct mm_struct *mm)
{
}
int vma_wants_writenotify(struct vm_area_struct *vma);
extern pte_t *__get_locked_pte(struct mm_struct *mm, unsigned long addr,
spinlock_t **ptl);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pte_t *get_locked_pte(struct mm_struct *mm, unsigned long addr,
spinlock_t **ptl)
{
pte_t *ptep;
(ptep = __get_locked_pte(mm, addr, ptl));
return ptep;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
unsigned long address)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
unsigned long address)
{
return 0;
}
int __pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
pmd_t *pmd, unsigned long address);
int __pte_alloc_kernel(pmd_t *pmd, unsigned long address);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
{
return (__builtin_expect(!!(pgd_none(*pgd)), 0) && __pud_alloc(mm, pgd, address))?
((void *)0): pud_offset(pgd, address);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
{
return (__builtin_expect(!!(pud_none(*pud)), 0) && __pmd_alloc(mm, pud, address))?
((void *)0): pmd_offset(pud, address);
}
# 1489 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) spinlock_t *pte_lockptr(struct mm_struct *mm, pmd_t *pmd)
{
return &mm->page_table_lock;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ptlock_cache_init(void) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ptlock_init(struct page *page) { return true; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pte_lock_deinit(struct page *page) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pgtable_init(void)
{
ptlock_cache_init();
do { } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool pgtable_page_ctor(struct page *page)
{
inc_zone_page_state(page, NR_PAGETABLE);
return ptlock_init(page);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pgtable_page_dtor(struct page *page)
{
pte_lock_deinit(page);
dec_zone_page_state(page, NR_PAGETABLE);
}
# 1577 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) spinlock_t *pmd_lockptr(struct mm_struct *mm, pmd_t *pmd)
{
return &mm->page_table_lock;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool pgtable_pmd_page_ctor(struct page *page) { return true; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pgtable_pmd_page_dtor(struct page *page) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) spinlock_t *pmd_lock(struct mm_struct *mm, pmd_t *pmd)
{
spinlock_t *ptl = pmd_lockptr(mm, pmd);
spin_lock(ptl);
return ptl;
}
extern void free_area_init(unsigned long * zones_size);
extern void free_area_init_node(int nid, unsigned long * zones_size,
unsigned long zone_start_pfn, unsigned long *zholes_size);
extern void free_initmem(void);
extern unsigned long free_reserved_area(void *start, void *end,
int poison, char *s);
# 1618 "include/linux/mm.h"
extern void adjust_managed_page_count(struct page *page, long count);
extern void mem_init_print_info(const char *str);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __free_reserved_page(struct page *page)
{
ClearPageReserved(page);
init_page_count(page);
__free_pages((page), 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void free_reserved_page(struct page *page)
{
__free_reserved_page(page);
adjust_managed_page_count(page, 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void mark_page_reserved(struct page *page)
{
SetPageReserved(page);
adjust_managed_page_count(page, -1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long free_initmem_default(int poison)
{
extern char __init_begin[], __init_end[];
return free_reserved_area(&__init_begin, &__init_end,
poison, "unused kernel");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long get_num_physpages(void)
{
int nid;
unsigned long phys_pages = 0;
for ( (nid) = 0; (nid) == 0; (nid) = 1)
phys_pages += ((&contig_page_data)->node_present_pages);
return phys_pages;
}
# 1693 "include/linux/mm.h"
extern void free_area_init_nodes(unsigned long *max_zone_pfn);
unsigned long node_map_pfn_alignment(void);
unsigned long __absent_pages_in_range(int nid, unsigned long start_pfn,
unsigned long end_pfn);
extern unsigned long absent_pages_in_range(unsigned long start_pfn,
unsigned long end_pfn);
extern void get_pfn_range_for_nid(unsigned int nid,
unsigned long *start_pfn, unsigned long *end_pfn);
extern unsigned long find_min_pfn_with_active_regions(void);
extern void free_bootmem_with_active_regions(int nid,
unsigned long max_low_pfn);
extern void sparse_memory_present_with_active_regions(int nid);
# 1716 "include/linux/mm.h"
extern int __attribute__ ((__section__(".meminit.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) early_pfn_to_nid(unsigned long pfn);
extern int __attribute__ ((__section__(".meminit.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) __early_pfn_to_nid(unsigned long pfn);
extern void set_dma_reserve(unsigned long new_dma_reserve);
extern void memmap_init_zone(unsigned long, int, unsigned long,
unsigned long, enum memmap_context);
extern void setup_per_zone_wmarks(void);
extern int __attribute__ ((__section__(".meminit.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) init_per_zone_wmark_min(void);
extern void mem_init(void);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) mmap_init(void);
extern void show_mem(unsigned int flags);
extern void si_meminfo(struct sysinfo * val);
extern void si_meminfo_node(struct sysinfo *val, int nid);
extern __attribute__((format(printf, 3, 4)))
void warn_alloc_failed(gfp_t gfp_mask, int order, const char *fmt, ...);
extern void setup_per_cpu_pageset(void);
extern void zone_pcp_update(struct zone *zone);
extern void zone_pcp_reset(struct zone *zone);
extern int min_free_kbytes;
extern atomic_long_t mmap_pages_allocated;
extern int nommu_shrink_inode_mappings(struct inode *, size_t, size_t);
void vma_interval_tree_insert(struct vm_area_struct *node,
struct rb_root *root);
void vma_interval_tree_insert_after(struct vm_area_struct *node,
struct vm_area_struct *prev,
struct rb_root *root);
void vma_interval_tree_remove(struct vm_area_struct *node,
struct rb_root *root);
struct vm_area_struct *vma_interval_tree_iter_first(struct rb_root *root,
unsigned long start, unsigned long last);
struct vm_area_struct *vma_interval_tree_iter_next(struct vm_area_struct *node,
unsigned long start, unsigned long last);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vma_nonlinear_insert(struct vm_area_struct *vma,
struct list_head *list)
{
list_add_tail(&vma->shared.nonlinear, list);
}
void anon_vma_interval_tree_insert(struct anon_vma_chain *node,
struct rb_root *root);
void anon_vma_interval_tree_remove(struct anon_vma_chain *node,
struct rb_root *root);
struct anon_vma_chain *anon_vma_interval_tree_iter_first(
struct rb_root *root, unsigned long start, unsigned long last);
struct anon_vma_chain *anon_vma_interval_tree_iter_next(
struct anon_vma_chain *node, unsigned long start, unsigned long last);
# 1787 "include/linux/mm.h"
extern int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin);
extern int vma_adjust(struct vm_area_struct *vma, unsigned long start,
unsigned long end, unsigned long pgoff, struct vm_area_struct *insert);
extern struct vm_area_struct *vma_merge(struct mm_struct *,
struct vm_area_struct *prev, unsigned long addr, unsigned long end,
unsigned long vm_flags, struct anon_vma *, struct file *, unsigned long,
struct mempolicy *);
extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
extern int split_vma(struct mm_struct *,
struct vm_area_struct *, unsigned long addr, int new_below);
extern int insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
extern void __vma_link_rb(struct mm_struct *, struct vm_area_struct *,
struct rb_node **, struct rb_node *);
extern void unlink_file_vma(struct vm_area_struct *);
extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
unsigned long addr, unsigned long len, unsigned long pgoff,
bool *need_rmap_locks);
extern void exit_mmap(struct mm_struct *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int check_data_rlimit(unsigned long rlim,
unsigned long new,
unsigned long start,
unsigned long end_data,
unsigned long start_data)
{
if (rlim < 0x7fffffffUL) {
if (((new - start) + (end_data - start_data)) > rlim)
return -28;
}
return 0;
}
extern int mm_take_all_locks(struct mm_struct *mm);
extern void mm_drop_all_locks(struct mm_struct *mm);
extern void set_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file);
extern struct file *get_mm_exe_file(struct mm_struct *mm);
extern int may_expand_vm(struct mm_struct *mm, unsigned long npages);
extern struct vm_area_struct *_install_special_mapping(struct mm_struct *mm,
unsigned long addr, unsigned long len,
unsigned long flags,
const struct vm_special_mapping *spec);
extern int install_special_mapping(struct mm_struct *mm,
unsigned long addr, unsigned long len,
unsigned long flags, struct page **pages);
extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
extern unsigned long mmap_region(struct file *file, unsigned long addr,
unsigned long len, vm_flags_t vm_flags, unsigned long pgoff);
extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
unsigned long len, unsigned long prot, unsigned long flags,
unsigned long pgoff, unsigned long *populate);
extern int do_munmap(struct mm_struct *, unsigned long, size_t);
extern int __mm_populate(unsigned long addr, unsigned long len,
int ignore_errors);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void mm_populate(unsigned long addr, unsigned long len)
{
(void) __mm_populate(addr, len, 1);
}
extern unsigned long vm_brk(unsigned long, unsigned long);
extern int vm_munmap(unsigned long, size_t);
extern unsigned long vm_mmap(struct file *, unsigned long,
unsigned long, unsigned long,
unsigned long, unsigned long);
struct vm_unmapped_area_info {
unsigned long flags;
unsigned long length;
unsigned long low_limit;
unsigned long high_limit;
unsigned long align_mask;
unsigned long align_offset;
};
extern unsigned long unmapped_area(struct vm_unmapped_area_info *info);
extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info);
# 1886 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long
vm_unmapped_area(struct vm_unmapped_area_info *info)
{
if (!(info->flags & 1))
return unmapped_area(info);
else
return unmapped_area_topdown(info);
}
extern void truncate_inode_pages(struct address_space *, loff_t);
extern void truncate_inode_pages_range(struct address_space *,
loff_t lstart, loff_t lend);
extern void truncate_inode_pages_final(struct address_space *);
extern int filemap_fault(struct vm_area_struct *, struct vm_fault *);
extern void filemap_map_pages(struct vm_area_struct *vma, struct vm_fault *vmf);
extern int filemap_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf);
int write_one_page(struct page *page, int wait);
void task_dirty_inc(struct task_struct *tsk);
int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
unsigned long offset, unsigned long nr_to_read);
void page_cache_sync_readahead(struct address_space *mapping,
struct file_ra_state *ra,
struct file *filp,
unsigned long offset,
unsigned long size);
void page_cache_async_readahead(struct address_space *mapping,
struct file_ra_state *ra,
struct file *filp,
struct page *pg,
unsigned long offset,
unsigned long size);
unsigned long max_sane_readahead(unsigned long nr);
extern int expand_stack(struct vm_area_struct *vma, unsigned long address);
extern int expand_downwards(struct vm_area_struct *vma,
unsigned long address);
extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr);
extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
struct vm_area_struct **pprev);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)
{
struct vm_area_struct * vma = find_vma(mm,start_addr);
if (vma && end_addr <= vma->vm_start)
vma = ((void *)0);
return vma;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long vma_pages(struct vm_area_struct *vma)
{
return (vma->vm_end - vma->vm_start) >> 12;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
unsigned long vm_start, unsigned long vm_end)
{
struct vm_area_struct *vma = find_vma(mm, vm_start);
if (vma && (vma->vm_start != vm_start || vma->vm_end != vm_end))
vma = ((void *)0);
return vma;
}
pgprot_t vm_get_page_prot(unsigned long vm_flags);
void vma_set_page_prot(struct vm_area_struct *vma);
# 1996 "include/linux/mm.h"
struct vm_area_struct *find_extend_vma(struct mm_struct *, unsigned long addr);
int remap_pfn_range(struct vm_area_struct *, unsigned long addr,
unsigned long pfn, unsigned long size, pgprot_t);
int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *);
int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
unsigned long pfn);
int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
unsigned long pfn);
int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len);
struct page *follow_page_mask(struct vm_area_struct *vma,
unsigned long address, unsigned int foll_flags,
unsigned int *page_mask);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *follow_page(struct vm_area_struct *vma,
unsigned long address, unsigned int foll_flags)
{
unsigned int unused_page_mask;
return follow_page_mask(vma, address, foll_flags, &unused_page_mask);
}
# 2032 "include/linux/mm.h"
typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr,
void *data);
extern int apply_to_page_range(struct mm_struct *mm, unsigned long address,
unsigned long size, pte_fn_t fn, void *data);
void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
# 2053 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
kernel_map_pages(struct page *page, int numpages, int enable) {}
# 2065 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct vm_area_struct *get_gate_vma(struct mm_struct *mm)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int in_gate_area_no_mm(unsigned long addr) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int in_gate_area(struct mm_struct *mm, unsigned long addr)
{
return 0;
}
extern int sysctl_drop_caches;
int drop_caches_sysctl_handler(struct ctl_table *, int,
void *, size_t *, loff_t *);
unsigned long shrink_slab(struct shrink_control *shrink,
unsigned long nr_pages_scanned,
unsigned long lru_pages);
extern int randomize_va_space;
const char * arch_vma_name(struct vm_area_struct *vma);
void print_vma_addr(char *prefix, unsigned long rip);
void sparse_mem_maps_populate_node(struct page **map_map,
unsigned long pnum_begin,
unsigned long pnum_end,
unsigned long map_count,
int nodeid);
struct page *sparse_mem_map_populate(unsigned long pnum, int nid);
pgd_t *vmemmap_pgd_populate(unsigned long addr, int node);
pud_t *vmemmap_pud_populate(pgd_t *pgd, unsigned long addr, int node);
pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node);
pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node);
void *vmemmap_alloc_block(unsigned long size, int node);
void *vmemmap_alloc_block_buf(unsigned long size, int node);
void vmemmap_verify(pte_t *, int, unsigned long, unsigned long);
int vmemmap_populate_basepages(unsigned long start, unsigned long end,
int node);
int vmemmap_populate(unsigned long start, unsigned long end, int node);
void vmemmap_populate_print_last(void);
void register_page_bootmem_memmap(unsigned long section_nr, struct page *map,
unsigned long size);
enum mf_flags {
MF_COUNT_INCREASED = 1 << 0,
MF_ACTION_REQUIRED = 1 << 1,
MF_MUST_KILL = 1 << 2,
MF_SOFT_OFFLINE = 1 << 3,
};
extern int memory_failure(unsigned long pfn, int trapno, int flags);
extern void memory_failure_queue(unsigned long pfn, int trapno, int flags);
extern int unpoison_memory(unsigned long pfn);
extern int sysctl_memory_failure_early_kill;
extern int sysctl_memory_failure_recovery;
extern void shake_page(struct page *p, int access);
extern atomic_long_t num_poisoned_pages;
extern int soft_offline_page(struct page *page, int flags);
# 2156 "include/linux/mm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int debug_guardpage_minorder(void) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool page_is_guard(struct page *page) { return false; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void setup_nr_node_ids(void) {}
# 7 "include/linux/scatterlist.h" 2
# 1 "arch/mips/include/generated/asm/scatterlist.h" 1
# 1 "include/asm-generic/scatterlist.h" 1
struct scatterlist {
unsigned long page_link;
unsigned int offset;
unsigned int length;
dma_addr_t dma_address;
};
# 1 "arch/mips/include/generated/asm/scatterlist.h" 2
# 10 "include/linux/scatterlist.h" 2
struct sg_table {
struct scatterlist *sgl;
unsigned int nents;
unsigned int orig_nents;
};
# 57 "include/linux/scatterlist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sg_assign_page(struct scatterlist *sg, struct page *page)
{
unsigned long page_link = sg->page_link & 0x3;
__BUG_ON((unsigned long)((unsigned long) page & 0x03));
sg->page_link = page_link | (unsigned long) page;
}
# 87 "include/linux/scatterlist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sg_set_page(struct scatterlist *sg, struct page *page,
unsigned int len, unsigned int offset)
{
sg_assign_page(sg, page);
sg->offset = offset;
sg->length = len;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *sg_page(struct scatterlist *sg)
{
return (struct page *)((sg)->page_link & ~0x3);
}
# 111 "include/linux/scatterlist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sg_set_buf(struct scatterlist *sg, const void *buf,
unsigned int buflen)
{
sg_set_page(sg, (mem_map + ((((virt_to_phys((void *) (buf))) >> 12)) - ((((0UL)) + ((1UL) << 12)-1) >> 12))), buflen, ((unsigned long)(buf) & ~(~((1 << 12) - 1))));
}
# 136 "include/linux/scatterlist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sg_chain(struct scatterlist *prv, unsigned int prv_nents,
struct scatterlist *sgl)
{
BUG();
prv[prv_nents - 1].offset = 0;
prv[prv_nents - 1].length = 0;
prv[prv_nents - 1].page_link = ((unsigned long) sgl | 0x01) & ~0x02;
}
# 165 "include/linux/scatterlist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sg_mark_end(struct scatterlist *sg)
{
sg->page_link |= 0x02;
sg->page_link &= ~0x01;
}
# 185 "include/linux/scatterlist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sg_unmark_end(struct scatterlist *sg)
{
sg->page_link &= ~0x02;
}
# 203 "include/linux/scatterlist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dma_addr_t sg_phys(struct scatterlist *sg)
{
return ((dma_addr_t)((unsigned long)((sg_page(sg)) - mem_map) + ((((0UL)) + ((1UL) << 12)-1) >> 12)) << 12) + sg->offset;
}
# 218 "include/linux/scatterlist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *sg_virt(struct scatterlist *sg)
{
return lowmem_page_address(sg_page(sg)) + sg->offset;
}
int sg_nents(struct scatterlist *sg);
struct scatterlist *sg_next(struct scatterlist *);
struct scatterlist *sg_last(struct scatterlist *s, unsigned int);
void sg_init_table(struct scatterlist *, unsigned int);
void sg_init_one(struct scatterlist *, const void *, unsigned int);
typedef struct scatterlist *(sg_alloc_fn)(unsigned int, gfp_t);
typedef void (sg_free_fn)(struct scatterlist *, unsigned int);
void __sg_free_table(struct sg_table *, unsigned int, bool, sg_free_fn *);
void sg_free_table(struct sg_table *);
int __sg_alloc_table(struct sg_table *, unsigned int, unsigned int,
struct scatterlist *, gfp_t, sg_alloc_fn *);
int sg_alloc_table(struct sg_table *, unsigned int, gfp_t);
int sg_alloc_table_from_pages(struct sg_table *sgt,
struct page **pages, unsigned int n_pages,
unsigned long offset, unsigned long size,
gfp_t gfp_mask);
size_t sg_copy_from_buffer(struct scatterlist *sgl, unsigned int nents,
void *buf, size_t buflen);
size_t sg_copy_to_buffer(struct scatterlist *sgl, unsigned int nents,
void *buf, size_t buflen);
size_t sg_pcopy_from_buffer(struct scatterlist *sgl, unsigned int nents,
void *buf, size_t buflen, off_t skip);
size_t sg_pcopy_to_buffer(struct scatterlist *sgl, unsigned int nents,
void *buf, size_t buflen, off_t skip);
# 268 "include/linux/scatterlist.h"
struct sg_page_iter {
struct scatterlist *sg;
unsigned int sg_pgoffset;
unsigned int __nents;
int __pg_advance;
};
bool __sg_page_iter_next(struct sg_page_iter *piter);
void __sg_page_iter_start(struct sg_page_iter *piter,
struct scatterlist *sglist, unsigned int nents,
unsigned long pgoffset);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *sg_page_iter_page(struct sg_page_iter *piter)
{
return (mem_map + ((((unsigned long)(((sg_page(piter->sg))) - mem_map) + ((((0UL)) + ((1UL) << 12)-1) >> 12)) + (piter->sg_pgoffset)) - ((((0UL)) + ((1UL) << 12)-1) >> 12)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dma_addr_t sg_page_iter_dma_address(struct sg_page_iter *piter)
{
return ((piter->sg)->dma_address) + (piter->sg_pgoffset << 12);
}
# 332 "include/linux/scatterlist.h"
struct sg_mapping_iter {
struct page *page;
void *addr;
size_t length;
size_t consumed;
struct sg_page_iter piter;
unsigned int __offset;
unsigned int __remaining;
unsigned int __flags;
};
void sg_miter_start(struct sg_mapping_iter *miter, struct scatterlist *sgl,
unsigned int nents, unsigned int flags);
bool sg_miter_skip(struct sg_mapping_iter *miter, off_t offset);
bool sg_miter_next(struct sg_mapping_iter *miter);
void sg_miter_stop(struct sg_mapping_iter *miter);
# 10 "include/linux/dma-mapping.h" 2
struct dma_map_ops {
void* (*alloc)(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp,
struct dma_attrs *attrs);
void (*free)(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_handle,
struct dma_attrs *attrs);
int (*mmap)(struct device *, struct vm_area_struct *,
void *, dma_addr_t, size_t, struct dma_attrs *attrs);
int (*get_sgtable)(struct device *dev, struct sg_table *sgt, void *,
dma_addr_t, size_t, struct dma_attrs *attrs);
dma_addr_t (*map_page)(struct device *dev, struct page *page,
unsigned long offset, size_t size,
enum dma_data_direction dir,
struct dma_attrs *attrs);
void (*unmap_page)(struct device *dev, dma_addr_t dma_handle,
size_t size, enum dma_data_direction dir,
struct dma_attrs *attrs);
int (*map_sg)(struct device *dev, struct scatterlist *sg,
int nents, enum dma_data_direction dir,
struct dma_attrs *attrs);
void (*unmap_sg)(struct device *dev,
struct scatterlist *sg, int nents,
enum dma_data_direction dir,
struct dma_attrs *attrs);
void (*sync_single_for_cpu)(struct device *dev,
dma_addr_t dma_handle, size_t size,
enum dma_data_direction dir);
void (*sync_single_for_device)(struct device *dev,
dma_addr_t dma_handle, size_t size,
enum dma_data_direction dir);
void (*sync_sg_for_cpu)(struct device *dev,
struct scatterlist *sg, int nents,
enum dma_data_direction dir);
void (*sync_sg_for_device)(struct device *dev,
struct scatterlist *sg, int nents,
enum dma_data_direction dir);
int (*mapping_error)(struct device *dev, dma_addr_t dma_addr);
int (*dma_supported)(struct device *dev, u64 mask);
int (*set_dma_mask)(struct device *dev, u64 mask);
int is_phys;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int valid_dma_direction(int dma_direction)
{
return ((dma_direction == DMA_BIDIRECTIONAL) ||
(dma_direction == DMA_TO_DEVICE) ||
(dma_direction == DMA_FROM_DEVICE));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_device_dma_capable(struct device *dev)
{
return dev->dma_mask != ((void *)0) && *dev->dma_mask != 0x0ULL;
}
# 1 "./arch/mips/include/asm/dma-mapping.h" 1
# 1 "arch/mips/include/generated/asm/scatterlist.h" 1
# 5 "./arch/mips/include/asm/dma-mapping.h" 2
# 1 "./arch/mips/include/asm/dma-coherence.h" 1
# 6 "./arch/mips/include/asm/dma-mapping.h" 2
# 1 "include/asm-generic/dma-coherent.h" 1
# 9 "include/asm-generic/dma-coherent.h"
int dma_alloc_from_coherent(struct device *dev, ssize_t size,
dma_addr_t *dma_handle, void **ret);
int dma_release_from_coherent(struct device *dev, int order, void *vaddr);
int dma_mmap_from_coherent(struct device *dev, struct vm_area_struct *vma,
void *cpu_addr, size_t size, int *ret);
int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
dma_addr_t device_addr, size_t size, int flags);
void dma_release_declared_memory(struct device *dev);
void *dma_mark_declared_memory_occupied(struct device *dev,
dma_addr_t device_addr, size_t size);
# 8 "./arch/mips/include/asm/dma-mapping.h" 2
# 1 "./arch/mips/include/asm/mach-generic/dma-coherence.h" 1
# 12 "./arch/mips/include/asm/mach-generic/dma-coherence.h"
struct device;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dma_addr_t plat_map_dma_mem(struct device *dev, void *addr,
size_t size)
{
return virt_to_phys(addr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dma_addr_t plat_map_dma_mem_page(struct device *dev,
struct page *page)
{
return ((dma_addr_t)((unsigned long)((page) - mem_map) + ((((0UL)) + ((1UL) << 12)-1) >> 12)) << 12);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long plat_dma_addr_to_phys(struct device *dev,
dma_addr_t dma_addr)
{
return dma_addr;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr,
size_t size, enum dma_data_direction direction)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int plat_dma_supported(struct device *dev, u64 mask)
{
if (mask < (((24) == 64) ? ~0ULL : ((1ULL<<(24))-1)))
return 0;
return 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int plat_device_is_coherent(struct device *dev)
{
return 0;
}
# 11 "./arch/mips/include/asm/dma-mapping.h" 2
extern struct dma_map_ops *mips_dma_map_ops;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_map_ops *get_dma_ops(struct device *dev)
{
if (dev && dev->archdata.dma_ops)
return dev->archdata.dma_ops;
else
return mips_dma_map_ops;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)
{
if (!dev->dma_mask)
return 0;
return addr + size <= *dev->dma_mask;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_mark_clean(void *addr, size_t size) {}
# 1 "include/asm-generic/dma-mapping-common.h" 1
# 1 "include/linux/dma-debug.h" 1
# 25 "include/linux/dma-debug.h"
struct device;
struct scatterlist;
struct bus_type;
# 92 "include/linux/dma-debug.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_debug_add_bus(struct bus_type *bus)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_debug_init(u32 num_entries)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_debug_resize_entries(u32 num_entries)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_map_page(struct device *dev, struct page *page,
size_t offset, size_t size,
int direction, dma_addr_t dma_addr,
bool map_single)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_mapping_error(struct device *dev,
dma_addr_t dma_addr)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_unmap_page(struct device *dev, dma_addr_t addr,
size_t size, int direction,
bool map_single)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_map_sg(struct device *dev, struct scatterlist *sg,
int nents, int mapped_ents, int direction)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_unmap_sg(struct device *dev,
struct scatterlist *sglist,
int nelems, int dir)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_alloc_coherent(struct device *dev, size_t size,
dma_addr_t dma_addr, void *virt)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_free_coherent(struct device *dev, size_t size,
void *virt, dma_addr_t addr)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_sync_single_for_cpu(struct device *dev,
dma_addr_t dma_handle,
size_t size, int direction)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_sync_single_for_device(struct device *dev,
dma_addr_t dma_handle,
size_t size, int direction)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_sync_single_range_for_cpu(struct device *dev,
dma_addr_t dma_handle,
unsigned long offset,
size_t size,
int direction)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_sync_single_range_for_device(struct device *dev,
dma_addr_t dma_handle,
unsigned long offset,
size_t size,
int direction)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_sync_sg_for_cpu(struct device *dev,
struct scatterlist *sg,
int nelems, int direction)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_sync_sg_for_device(struct device *dev,
struct scatterlist *sg,
int nelems, int direction)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_dump_mappings(struct device *dev)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void debug_dma_assert_idle(struct page *page)
{
}
# 8 "include/asm-generic/dma-mapping-common.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr,
size_t size,
enum dma_data_direction dir,
struct dma_attrs *attrs)
{
struct dma_map_ops *ops = get_dma_ops(dev);
dma_addr_t addr;
kmemcheck_mark_initialized(ptr, size);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
addr = ops->map_page(dev, (mem_map + ((((virt_to_phys((void *) (ptr))) >> 12)) - ((((0UL)) + ((1UL) << 12)-1) >> 12))),
(unsigned long)ptr & ~(~((1 << 12) - 1)), size,
dir, attrs);
debug_dma_map_page(dev, (mem_map + ((((virt_to_phys((void *) (ptr))) >> 12)) - ((((0UL)) + ((1UL) << 12)-1) >> 12))),
(unsigned long)ptr & ~(~((1 << 12) - 1)), size,
dir, addr, true);
return addr;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_unmap_single_attrs(struct device *dev, dma_addr_t addr,
size_t size,
enum dma_data_direction dir,
struct dma_attrs *attrs)
{
struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
if (ops->unmap_page)
ops->unmap_page(dev, addr, size, dir, attrs);
debug_dma_unmap_page(dev, addr, size, dir, true);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
int nents, enum dma_data_direction dir,
struct dma_attrs *attrs)
{
struct dma_map_ops *ops = get_dma_ops(dev);
int i, ents;
struct scatterlist *s;
for (i = 0, s = (sg); i < (nents); i++, s = sg_next(s))
kmemcheck_mark_initialized(sg_virt(s), s->length);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
ents = ops->map_sg(dev, sg, nents, dir, attrs);
debug_dma_map_sg(dev, sg, nents, ents, dir);
return ents;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg,
int nents, enum dma_data_direction dir,
struct dma_attrs *attrs)
{
struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
debug_dma_unmap_sg(dev, sg, nents, dir);
if (ops->unmap_sg)
ops->unmap_sg(dev, sg, nents, dir, attrs);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dma_addr_t dma_map_page(struct device *dev, struct page *page,
size_t offset, size_t size,
enum dma_data_direction dir)
{
struct dma_map_ops *ops = get_dma_ops(dev);
dma_addr_t addr;
kmemcheck_mark_initialized(lowmem_page_address(page) + offset, size);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
addr = ops->map_page(dev, page, offset, size, dir, ((void *)0));
debug_dma_map_page(dev, page, offset, size, dir, addr, false);
return addr;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_unmap_page(struct device *dev, dma_addr_t addr,
size_t size, enum dma_data_direction dir)
{
struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
if (ops->unmap_page)
ops->unmap_page(dev, addr, size, dir, ((void *)0));
debug_dma_unmap_page(dev, addr, size, dir, false);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr,
size_t size,
enum dma_data_direction dir)
{
struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
if (ops->sync_single_for_cpu)
ops->sync_single_for_cpu(dev, addr, size, dir);
debug_dma_sync_single_for_cpu(dev, addr, size, dir);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_sync_single_for_device(struct device *dev,
dma_addr_t addr, size_t size,
enum dma_data_direction dir)
{
struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
if (ops->sync_single_for_device)
ops->sync_single_for_device(dev, addr, size, dir);
debug_dma_sync_single_for_device(dev, addr, size, dir);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_sync_single_range_for_cpu(struct device *dev,
dma_addr_t addr,
unsigned long offset,
size_t size,
enum dma_data_direction dir)
{
const struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
if (ops->sync_single_for_cpu)
ops->sync_single_for_cpu(dev, addr + offset, size, dir);
debug_dma_sync_single_range_for_cpu(dev, addr, offset, size, dir);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_sync_single_range_for_device(struct device *dev,
dma_addr_t addr,
unsigned long offset,
size_t size,
enum dma_data_direction dir)
{
const struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
if (ops->sync_single_for_device)
ops->sync_single_for_device(dev, addr + offset, size, dir);
debug_dma_sync_single_range_for_device(dev, addr, offset, size, dir);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
int nelems, enum dma_data_direction dir)
{
struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
if (ops->sync_sg_for_cpu)
ops->sync_sg_for_cpu(dev, sg, nelems, dir);
debug_dma_sync_sg_for_cpu(dev, sg, nelems, dir);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
int nelems, enum dma_data_direction dir)
{
struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!valid_dma_direction(dir)));
if (ops->sync_sg_for_device)
ops->sync_sg_for_device(dev, sg, nelems, dir);
debug_dma_sync_sg_for_device(dev, sg, nelems, dir);
}
extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
void *cpu_addr, dma_addr_t dma_addr, size_t size);
void *dma_common_contiguous_remap(struct page *page, size_t size,
unsigned long vm_flags,
pgprot_t prot, const void *caller);
void *dma_common_pages_remap(struct page **pages, size_t size,
unsigned long vm_flags, pgprot_t prot,
const void *caller);
void dma_common_free_remap(void *cpu_addr, size_t size, unsigned long vm_flags);
# 204 "include/asm-generic/dma-mapping-common.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr,
dma_addr_t dma_addr, size_t size, struct dma_attrs *attrs)
{
struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!ops));
if (ops->mmap)
return ops->mmap(dev, vma, cpu_addr, dma_addr, size, attrs);
return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size);
}
int
dma_common_get_sgtable(struct device *dev, struct sg_table *sgt,
void *cpu_addr, dma_addr_t dma_addr, size_t size);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
dma_get_sgtable_attrs(struct device *dev, struct sg_table *sgt, void *cpu_addr,
dma_addr_t dma_addr, size_t size, struct dma_attrs *attrs)
{
struct dma_map_ops *ops = get_dma_ops(dev);
__BUG_ON((unsigned long)(!ops));
if (ops->get_sgtable)
return ops->get_sgtable(dev, sgt, cpu_addr, dma_addr, size,
attrs);
return dma_common_get_sgtable(dev, sgt, cpu_addr, dma_addr, size);
}
# 34 "./arch/mips/include/asm/dma-mapping.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_supported(struct device *dev, u64 mask)
{
struct dma_map_ops *ops = get_dma_ops(dev);
return ops->dma_supported(dev, mask);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_mapping_error(struct device *dev, u64 mask)
{
struct dma_map_ops *ops = get_dma_ops(dev);
debug_dma_mapping_error(dev, mask);
return ops->mapping_error(dev, mask);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
dma_set_mask(struct device *dev, u64 mask)
{
struct dma_map_ops *ops = get_dma_ops(dev);
if(!dev->dma_mask || !dma_supported(dev, mask))
return -5;
if (ops->set_dma_mask)
return ops->set_dma_mask(dev, mask);
*dev->dma_mask = mask;
return 0;
}
extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
enum dma_data_direction direction);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *dma_alloc_attrs(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp,
struct dma_attrs *attrs)
{
void *ret;
struct dma_map_ops *ops = get_dma_ops(dev);
ret = ops->alloc(dev, size, dma_handle, gfp, attrs);
debug_dma_alloc_coherent(dev, size, *dma_handle, ret);
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_free_attrs(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_handle,
struct dma_attrs *attrs)
{
struct dma_map_ops *ops = get_dma_ops(dev);
ops->free(dev, size, vaddr, dma_handle, attrs);
debug_dma_free_coherent(dev, size, vaddr, dma_handle);
}
void *dma_alloc_noncoherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t flag);
void dma_free_noncoherent(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_handle);
# 83 "include/linux/dma-mapping.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u64 dma_get_mask(struct device *dev)
{
if (dev && dev->dma_mask && *dev->dma_mask)
return *dev->dma_mask;
return (((32) == 64) ? ~0ULL : ((1ULL<<(32))-1));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_set_coherent_mask(struct device *dev, u64 mask)
{
if (!dma_supported(dev, mask))
return -5;
dev->coherent_dma_mask = mask;
return 0;
}
# 112 "include/linux/dma-mapping.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_set_mask_and_coherent(struct device *dev, u64 mask)
{
int rc = dma_set_mask(dev, mask);
if (rc == 0)
dma_set_coherent_mask(dev, mask);
return rc;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_coerce_mask_and_coherent(struct device *dev, u64 mask)
{
dev->dma_mask = &dev->coherent_dma_mask;
return dma_set_mask_and_coherent(dev, mask);
}
extern u64 dma_get_required_mask(struct device *dev);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int set_arch_dma_coherent_ops(struct device *dev)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int dma_get_max_seg_size(struct device *dev)
{
return dev->dma_parms ? dev->dma_parms->max_segment_size : 65536;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int dma_set_max_seg_size(struct device *dev,
unsigned int size)
{
if (dev->dma_parms) {
dev->dma_parms->max_segment_size = size;
return 0;
} else
return -5;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long dma_get_seg_boundary(struct device *dev)
{
return dev->dma_parms ?
dev->dma_parms->segment_boundary_mask : 0xffffffff;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_set_seg_boundary(struct device *dev, unsigned long mask)
{
if (dev->dma_parms) {
dev->dma_parms->segment_boundary_mask = mask;
return 0;
} else
return -5;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long dma_max_pfn(struct device *dev)
{
return *dev->dma_mask >> 12;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *dma_zalloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t flag)
{
void *ret = dma_alloc_attrs(dev,size,dma_handle,flag | (( gfp_t)0x8000u),((void *)0))
;
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_get_cache_alignment(void)
{
return 128;
return 1;
}
# 224 "include/linux/dma-mapping.h"
extern void *dmam_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp);
extern void dmam_free_coherent(struct device *dev, size_t size, void *vaddr,
dma_addr_t dma_handle);
extern void *dmam_alloc_noncoherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp);
extern void dmam_free_noncoherent(struct device *dev, size_t size, void *vaddr,
dma_addr_t dma_handle);
extern int dmam_declare_coherent_memory(struct device *dev,
phys_addr_t phys_addr,
dma_addr_t device_addr, size_t size,
int flags);
extern void dmam_release_declared_memory(struct device *dev);
# 267 "include/linux/dma-mapping.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *dma_alloc_writecombine(struct device *dev, size_t size,
dma_addr_t *dma_addr, gfp_t gfp)
{
struct dma_attrs attrs = { .flags = { [0 ... (((DMA_ATTR_MAX) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))-1] = 0 }, };
dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs);
return dma_alloc_attrs(dev, size, dma_addr, gfp, &attrs);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_free_writecombine(struct device *dev, size_t size,
void *cpu_addr, dma_addr_t dma_addr)
{
struct dma_attrs attrs = { .flags = { [0 ... (((DMA_ATTR_MAX) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))-1] = 0 }, };
dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs);
return dma_free_attrs(dev, size, cpu_addr, dma_addr, &attrs);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_mmap_writecombine(struct device *dev,
struct vm_area_struct *vma,
void *cpu_addr, dma_addr_t dma_addr,
size_t size)
{
struct dma_attrs attrs = { .flags = { [0 ... (((DMA_ATTR_MAX) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))-1] = 0 }, };
dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs);
return dma_mmap_attrs(dev, vma, cpu_addr, dma_addr, size, &attrs);
}
# 33 "include/linux/skbuff.h" 2
# 1 "include/linux/netdev_features.h" 1
# 15 "include/linux/netdev_features.h"
typedef u64 netdev_features_t;
enum {
NETIF_F_SG_BIT,
NETIF_F_IP_CSUM_BIT,
__UNUSED_NETIF_F_1,
NETIF_F_HW_CSUM_BIT,
NETIF_F_IPV6_CSUM_BIT,
NETIF_F_HIGHDMA_BIT,
NETIF_F_FRAGLIST_BIT,
NETIF_F_HW_VLAN_CTAG_TX_BIT,
NETIF_F_HW_VLAN_CTAG_RX_BIT,
NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
NETIF_F_VLAN_CHALLENGED_BIT,
NETIF_F_GSO_BIT,
NETIF_F_LLTX_BIT,
NETIF_F_NETNS_LOCAL_BIT,
NETIF_F_GRO_BIT,
NETIF_F_LRO_BIT,
NETIF_F_GSO_SHIFT,
NETIF_F_TSO_BIT
= NETIF_F_GSO_SHIFT,
NETIF_F_UFO_BIT,
NETIF_F_GSO_ROBUST_BIT,
NETIF_F_TSO_ECN_BIT,
NETIF_F_TSO6_BIT,
NETIF_F_FSO_BIT,
NETIF_F_GSO_GRE_BIT,
NETIF_F_GSO_GRE_CSUM_BIT,
NETIF_F_GSO_IPIP_BIT,
NETIF_F_GSO_SIT_BIT,
NETIF_F_GSO_UDP_TUNNEL_BIT,
NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT,
NETIF_F_GSO_MPLS_BIT,
NETIF_F_GSO_LAST =
NETIF_F_GSO_MPLS_BIT,
NETIF_F_FCOE_CRC_BIT,
NETIF_F_SCTP_CSUM_BIT,
NETIF_F_FCOE_MTU_BIT,
NETIF_F_NTUPLE_BIT,
NETIF_F_RXHASH_BIT,
NETIF_F_RXCSUM_BIT,
NETIF_F_NOCACHE_COPY_BIT,
NETIF_F_LOOPBACK_BIT,
NETIF_F_RXFCS_BIT,
NETIF_F_RXALL_BIT,
NETIF_F_HW_VLAN_STAG_TX_BIT,
NETIF_F_HW_VLAN_STAG_RX_BIT,
NETIF_F_HW_VLAN_STAG_FILTER_BIT,
NETIF_F_HW_L2FW_DOFFLOAD_BIT,
NETIF_F_BUSY_POLL_BIT,
# 77 "include/linux/netdev_features.h"
NETDEV_FEATURE_COUNT
};
# 34 "include/linux/skbuff.h" 2
# 1 "include/linux/sched.h" 1
# 1 "include/uapi/linux/sched.h" 1
# 5 "include/linux/sched.h" 2
# 1 "include/linux/sched/prio.h" 1
# 47 "include/linux/sched/prio.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long nice_to_rlimit(long nice)
{
return (19 - nice + 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long rlimit_to_nice(long prio)
{
return (19 - prio + 1);
}
# 7 "include/linux/sched.h" 2
struct sched_param {
int sched_priority;
};
# 21 "include/linux/sched.h"
# 1 "include/linux/plist.h" 1
# 81 "include/linux/plist.h"
struct plist_head {
struct list_head node_list;
};
struct plist_node {
int prio;
struct list_head prio_list;
struct list_head node_list;
};
# 123 "include/linux/plist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
plist_head_init(struct plist_head *head)
{
INIT_LIST_HEAD(&head->node_list);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void plist_node_init(struct plist_node *node, int prio)
{
node->prio = prio;
INIT_LIST_HEAD(&node->prio_list);
INIT_LIST_HEAD(&node->node_list);
}
extern void plist_add(struct plist_node *node, struct plist_head *head);
extern void plist_del(struct plist_node *node, struct plist_head *head);
extern void plist_requeue(struct plist_node *node, struct plist_head *head);
# 212 "include/linux/plist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int plist_head_empty(const struct plist_head *head)
{
return list_empty(&head->node_list);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int plist_node_empty(const struct plist_node *node)
{
return list_empty(&node->node_list);
}
# 282 "include/linux/plist.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct plist_node *plist_first(const struct plist_head *head)
{
return ({ const typeof( ((struct plist_node *)0)->node_list ) *__mptr = (head->node_list.next); (struct plist_node *)( (char *)__mptr - __builtin_offsetof(struct plist_node,node_list) );})
;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct plist_node *plist_last(const struct plist_head *head)
{
return ({ const typeof( ((struct plist_node *)0)->node_list ) *__mptr = (head->node_list.prev); (struct plist_node *)( (char *)__mptr - __builtin_offsetof(struct plist_node,node_list) );})
;
}
# 22 "include/linux/sched.h" 2
# 31 "include/linux/sched.h"
# 1 "./arch/mips/include/asm/ptrace.h" 1
# 16 "./arch/mips/include/asm/ptrace.h"
# 1 "./arch/mips/include/asm/isadep.h" 1
# 17 "./arch/mips/include/asm/ptrace.h" 2
# 1 "./arch/mips/include/uapi/asm/ptrace.h" 1
# 33 "./arch/mips/include/uapi/asm/ptrace.h"
struct user_pt_regs {
__u64 regs[32];
__u64 lo;
__u64 hi;
__u64 cp0_epc;
__u64 cp0_badvaddr;
__u64 cp0_status;
__u64 cp0_cause;
} __attribute__ ((aligned (8)));
# 70 "./arch/mips/include/uapi/asm/ptrace.h"
enum pt_watch_style {
pt_watch_style_mips32,
pt_watch_style_mips64
};
struct mips32_watch_regs {
unsigned int watchlo[8];
unsigned short watchhi[8];
unsigned short watch_masks[8];
unsigned int num_valid;
} __attribute__((aligned(8)));
struct mips64_watch_regs {
unsigned long long watchlo[8];
unsigned short watchhi[8];
unsigned short watch_masks[8];
unsigned int num_valid;
} __attribute__((aligned(8)));
struct pt_watch_regs {
enum pt_watch_style style;
union {
struct mips32_watch_regs mips32;
struct mips64_watch_regs mips64;
};
};
# 18 "./arch/mips/include/asm/ptrace.h" 2
struct pt_regs {
unsigned long pad0[8];
unsigned long regs[32];
unsigned long cp0_status;
unsigned long hi;
unsigned long lo;
unsigned long cp0_badvaddr;
unsigned long cp0_cause;
unsigned long cp0_epc;
} __attribute__((aligned(8)));
struct task_struct;
extern int ptrace_getregs(struct task_struct *child,
struct user_pt_regs *data);
extern int ptrace_setregs(struct task_struct *child,
struct user_pt_regs *data);
extern int ptrace_getfpregs(struct task_struct *child, __u32 *data);
extern int ptrace_setfpregs(struct task_struct *child, __u32 *data);
extern int ptrace_get_watch_regs(struct task_struct *child,
struct pt_watch_regs *addr);
extern int ptrace_set_watch_regs(struct task_struct *child,
struct pt_watch_regs *addr);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_syscall_success(struct pt_regs *regs)
{
return !regs->regs[7];
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long regs_return_value(struct pt_regs *regs)
{
if (is_syscall_success(regs))
return regs->regs[2];
else
return -regs->regs[2];
}
extern long syscall_trace_enter(struct pt_regs *regs, long syscall);
extern void syscall_trace_leave(struct pt_regs *regs);
extern void die(const char *, struct pt_regs *) __attribute__((noreturn));
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void die_if_kernel(const char *str, struct pt_regs *regs)
{
if (__builtin_expect(!!(!(((regs)->cp0_status & 0x18) == 0x10)), 0))
die(str, regs);
}
# 103 "./arch/mips/include/asm/ptrace.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long user_stack_pointer(struct pt_regs *regs)
{
return regs->regs[29];
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void user_stack_pointer_set(struct pt_regs *regs,
unsigned long val)
{
regs->regs[29] = val;
}
# 32 "include/linux/sched.h" 2
# 1 "include/linux/cputime.h" 1
# 1 "arch/mips/include/generated/asm/cputime.h" 1
# 1 "include/asm-generic/cputime.h" 1
# 1 "include/asm-generic/cputime_jiffies.h" 1
typedef unsigned long cputime_t;
# 13 "include/asm-generic/cputime_jiffies.h"
typedef u64 cputime64_t;
# 9 "include/asm-generic/cputime.h" 2
# 1 "arch/mips/include/generated/asm/cputime.h" 2
# 5 "include/linux/cputime.h" 2
# 33 "include/linux/sched.h" 2
# 1 "include/linux/sem.h" 1
# 1 "include/uapi/linux/sem.h" 1
# 1 "include/linux/ipc.h" 1
# 1 "include/uapi/linux/ipc.h" 1
# 9 "include/uapi/linux/ipc.h"
struct ipc_perm
{
__kernel_key_t key;
__kernel_uid_t uid;
__kernel_gid_t gid;
__kernel_uid_t cuid;
__kernel_gid_t cgid;
__kernel_mode_t mode;
unsigned short seq;
};
# 1 "arch/mips/include/generated/uapi/asm/ipcbuf.h" 1
# 1 "./include/uapi/asm-generic/ipcbuf.h" 1
# 19 "./include/uapi/asm-generic/ipcbuf.h"
struct ipc64_perm {
__kernel_key_t key;
__kernel_uid32_t uid;
__kernel_gid32_t gid;
__kernel_uid32_t cuid;
__kernel_gid32_t cgid;
__kernel_mode_t mode;
unsigned char __pad1[4 - sizeof(__kernel_mode_t)];
unsigned short seq;
unsigned short __pad2;
__kernel_ulong_t __unused1;
__kernel_ulong_t __unused2;
};
# 1 "arch/mips/include/generated/uapi/asm/ipcbuf.h" 2
# 22 "include/uapi/linux/ipc.h" 2
# 57 "include/uapi/linux/ipc.h"
struct ipc_kludge {
struct msgbuf *msgp;
long msgtyp;
};
# 7 "include/linux/ipc.h" 2
struct kern_ipc_perm
{
spinlock_t lock;
bool deleted;
int id;
key_t key;
kuid_t uid;
kgid_t gid;
kuid_t cuid;
kgid_t cgid;
umode_t mode;
unsigned long seq;
void *security;
};
# 5 "include/uapi/linux/sem.h" 2
# 23 "include/uapi/linux/sem.h"
struct semid_ds {
struct ipc_perm sem_perm;
__kernel_time_t sem_otime;
__kernel_time_t sem_ctime;
struct sem *sem_base;
struct sem_queue *sem_pending;
struct sem_queue **sem_pending_last;
struct sem_undo *undo;
unsigned short sem_nsems;
};
# 1 "./arch/mips/include/uapi/asm/sembuf.h" 1
# 13 "./arch/mips/include/uapi/asm/sembuf.h"
struct semid64_ds {
struct ipc64_perm sem_perm;
__kernel_time_t sem_otime;
__kernel_time_t sem_ctime;
unsigned long sem_nsems;
unsigned long __unused1;
unsigned long __unused2;
};
# 36 "include/uapi/linux/sem.h" 2
struct sembuf {
unsigned short sem_num;
short sem_op;
short sem_flg;
};
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
struct seminfo *__buf;
void *__pad;
};
struct seminfo {
int semmap;
int semmni;
int semmns;
int semmnu;
int semmsl;
int semopm;
int semume;
int semusz;
int semvmx;
int semaem;
};
# 8 "include/linux/sem.h" 2
struct task_struct;
struct sem_array {
struct kern_ipc_perm __attribute__((__aligned__((1 << 5))))
sem_perm;
time_t sem_ctime;
struct sem *sem_base;
struct list_head pending_alter;
struct list_head pending_const;
struct list_head list_id;
int sem_nsems;
int complex_count;
};
struct sysv_sem {
struct sem_undo_list *undo_list;
};
extern int copy_semundo(unsigned long clone_flags, struct task_struct *tsk);
extern void exit_sem(struct task_struct *tsk);
# 36 "include/linux/sched.h" 2
# 1 "include/linux/shm.h" 1
# 1 "include/uapi/linux/shm.h" 1
# 26 "include/uapi/linux/shm.h"
struct shmid_ds {
struct ipc_perm shm_perm;
int shm_segsz;
__kernel_time_t shm_atime;
__kernel_time_t shm_dtime;
__kernel_time_t shm_ctime;
__kernel_ipc_pid_t shm_cpid;
__kernel_ipc_pid_t shm_lpid;
unsigned short shm_nattch;
unsigned short shm_unused;
void *shm_unused2;
void *shm_unused3;
};
# 1 "./arch/mips/include/uapi/asm/shmbuf.h" 1
# 13 "./arch/mips/include/uapi/asm/shmbuf.h"
struct shmid64_ds {
struct ipc64_perm shm_perm;
size_t shm_segsz;
__kernel_time_t shm_atime;
__kernel_time_t shm_dtime;
__kernel_time_t shm_ctime;
__kernel_pid_t shm_cpid;
__kernel_pid_t shm_lpid;
unsigned long shm_nattch;
unsigned long __unused1;
unsigned long __unused2;
};
struct shminfo64 {
unsigned long shmmax;
unsigned long shmmin;
unsigned long shmmni;
unsigned long shmseg;
unsigned long shmall;
unsigned long __unused1;
unsigned long __unused2;
unsigned long __unused3;
unsigned long __unused4;
};
# 42 "include/uapi/linux/shm.h" 2
# 62 "include/uapi/linux/shm.h"
struct shminfo {
int shmmax;
int shmmin;
int shmmni;
int shmseg;
int shmall;
};
struct shm_info {
int used_ids;
__kernel_ulong_t shm_tot;
__kernel_ulong_t shm_rss;
__kernel_ulong_t shm_swp;
__kernel_ulong_t swap_attempts;
__kernel_ulong_t swap_successes;
};
# 7 "include/linux/shm.h" 2
# 1 "./arch/mips/include/asm/shmparam.h" 1
# 8 "include/linux/shm.h" 2
struct shmid_kernel
{
struct kern_ipc_perm shm_perm;
struct file *shm_file;
unsigned long shm_nattch;
unsigned long shm_segsz;
time_t shm_atim;
time_t shm_dtim;
time_t shm_ctim;
pid_t shm_cprid;
pid_t shm_lprid;
struct user_struct *mlock_user;
struct task_struct *shm_creator;
struct list_head shm_clist;
};
# 49 "include/linux/shm.h"
struct sysv_shm {
struct list_head shm_clist;
};
long do_shmat(int shmid, char *shmaddr, int shmflg, unsigned long *addr,
unsigned long shmlba);
int is_file_shm_hugepages(struct file *file);
void exit_shm(struct task_struct *task);
# 37 "include/linux/sched.h" 2
# 1 "include/linux/signal.h" 1
# 1 "include/uapi/linux/signal.h" 1
# 1 "./arch/mips/include/asm/signal.h" 1
# 12 "./arch/mips/include/asm/signal.h"
# 1 "./arch/mips/include/uapi/asm/signal.h" 1
# 18 "./arch/mips/include/uapi/asm/signal.h"
typedef struct {
unsigned long sig[(128 / (sizeof(unsigned long) * 8))];
} sigset_t;
typedef unsigned long old_sigset_t;
# 101 "./arch/mips/include/uapi/asm/signal.h"
# 1 "./include/uapi/asm-generic/signal-defs.h" 1
# 17 "./include/uapi/asm-generic/signal-defs.h"
typedef void __signalfn_t(int);
typedef __signalfn_t *__sighandler_t;
typedef void __restorefn_t(void);
typedef __restorefn_t *__sigrestore_t;
# 102 "./arch/mips/include/uapi/asm/signal.h" 2
# 112 "./arch/mips/include/uapi/asm/signal.h"
typedef struct sigaltstack {
void *ss_sp;
size_t ss_size;
int ss_flags;
} stack_t;
# 13 "./arch/mips/include/asm/signal.h" 2
# 21 "./arch/mips/include/asm/signal.h"
# 1 "./arch/mips/include/asm/sigcontext.h" 1
# 12 "./arch/mips/include/asm/sigcontext.h"
# 1 "./arch/mips/include/uapi/asm/sigcontext.h" 1
# 21 "./arch/mips/include/uapi/asm/sigcontext.h"
struct sigcontext {
unsigned int sc_regmask;
unsigned int sc_status;
unsigned long long sc_pc;
unsigned long long sc_regs[32];
unsigned long long sc_fpregs[32];
unsigned int sc_acx;
unsigned int sc_fpc_csr;
unsigned int sc_fpc_eir;
unsigned int sc_used_math;
unsigned int sc_dsp;
unsigned long long sc_mdhi;
unsigned long long sc_mdlo;
unsigned long sc_hi1;
unsigned long sc_lo1;
unsigned long sc_hi2;
unsigned long sc_lo2;
unsigned long sc_hi3;
unsigned long sc_lo3;
};
# 13 "./arch/mips/include/asm/sigcontext.h" 2
# 22 "./arch/mips/include/asm/signal.h" 2
# 1 "./arch/mips/include/asm/siginfo.h" 1
# 12 "./arch/mips/include/asm/siginfo.h"
# 1 "./arch/mips/include/uapi/asm/siginfo.h" 1
# 23 "./arch/mips/include/uapi/asm/siginfo.h"
struct siginfo;
# 38 "./arch/mips/include/uapi/asm/siginfo.h"
# 1 "include/asm-generic/siginfo.h" 1
# 1 "include/uapi/asm-generic/siginfo.h" 1
typedef union sigval {
int sival_int;
void *sival_ptr;
} sigval_t;
# 278 "include/uapi/asm-generic/siginfo.h"
typedef struct sigevent {
sigval_t sigev_value;
int sigev_signo;
int sigev_notify;
union {
int _pad[((64 - (sizeof(long) + 2*sizeof(int))) / sizeof(int))];
int _tid;
struct {
void (*_function)(sigval_t);
void *_attribute;
} _sigev_thread;
} _sigev_un;
} sigevent_t;
# 5 "include/asm-generic/siginfo.h" 2
# 17 "include/asm-generic/siginfo.h"
struct siginfo;
void do_schedule_next_timer(struct siginfo *info);
# 35 "include/asm-generic/siginfo.h"
extern int copy_siginfo_to_user(struct siginfo *to, const struct siginfo *from);
# 39 "./arch/mips/include/uapi/asm/siginfo.h" 2
typedef struct siginfo {
int si_signo;
int si_code;
int si_errno;
int __pad0[128 / sizeof(int) - ((128 - (3 * sizeof(int))) / sizeof(int)) - 3];
union {
int _pad[((128 - (3 * sizeof(int))) / sizeof(int))];
struct {
pid_t _pid;
__kernel_uid32_t _uid;
} _kill;
struct {
timer_t _tid;
int _overrun;
char _pad[sizeof( __kernel_uid32_t) - sizeof(int)];
sigval_t _sigval;
int _sys_private;
} _timer;
struct {
pid_t _pid;
__kernel_uid32_t _uid;
sigval_t _sigval;
} _rt;
struct {
pid_t _pid;
__kernel_uid32_t _uid;
int _status;
clock_t _utime;
clock_t _stime;
} _sigchld;
struct {
pid_t _pid;
clock_t _utime;
int _status;
clock_t _stime;
} _irix_sigchld;
struct {
void *_addr;
short _addr_lsb;
} _sigfault;
struct {
long _band;
int _fd;
} _sigpoll;
struct {
void *_call_addr;
int _syscall;
unsigned int _arch;
} _sigsys;
} _sifields;
} siginfo_t;
# 13 "./arch/mips/include/asm/siginfo.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void copy_siginfo(struct siginfo *to, struct siginfo *from)
{
if (from->si_code < 0)
memcpy(to, from, sizeof(*to));
else
memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld));
}
# 23 "./arch/mips/include/asm/signal.h" 2
# 5 "include/uapi/linux/signal.h" 2
# 7 "include/linux/signal.h" 2
struct task_struct;
extern int print_fatal_signals;
struct sigqueue {
struct list_head list;
int flags;
siginfo_t info;
struct user_struct *user;
};
struct sigpending {
struct list_head list;
sigset_t signal;
};
# 40 "include/linux/signal.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sigaddset(sigset_t *set, int _sig)
{
unsigned long sig = _sig - 1;
if ((128 / (sizeof(unsigned long) * 8)) == 1)
set->sig[0] |= 1UL << sig;
else
set->sig[sig / (sizeof(unsigned long) * 8)] |= 1UL << (sig % (sizeof(unsigned long) * 8));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sigdelset(sigset_t *set, int _sig)
{
unsigned long sig = _sig - 1;
if ((128 / (sizeof(unsigned long) * 8)) == 1)
set->sig[0] &= ~(1UL << sig);
else
set->sig[sig / (sizeof(unsigned long) * 8)] &= ~(1UL << (sig % (sizeof(unsigned long) * 8)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int sigismember(sigset_t *set, int _sig)
{
unsigned long sig = _sig - 1;
if ((128 / (sizeof(unsigned long) * 8)) == 1)
return 1 & (set->sig[0] >> sig);
else
return 1 & (set->sig[sig / (sizeof(unsigned long) * 8)] >> (sig % (sizeof(unsigned long) * 8)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int sigisemptyset(sigset_t *set)
{
switch ((128 / (sizeof(unsigned long) * 8))) {
case 4:
return (set->sig[3] | set->sig[2] |
set->sig[1] | set->sig[0]) == 0;
case 2:
return (set->sig[1] | set->sig[0]) == 0;
case 1:
return set->sig[0] == 0;
default:
do { bool __cond = !(!(1)); extern void __compiletime_assert_80(void) __attribute__((error("BUILD_BUG failed"))); if (__cond) __compiletime_assert_80(); do { } while (0); } while (0);
return 0;
}
}
# 114 "include/linux/signal.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sigorsets(sigset_t *r, const sigset_t *a, const sigset_t *b) { unsigned long a0, a1, a2, a3, b0, b1, b2, b3; switch ((128 / (sizeof(unsigned long) * 8))) { case 4: a3 = a->sig[3]; a2 = a->sig[2]; b3 = b->sig[3]; b2 = b->sig[2]; r->sig[3] = ((a3) | (b3)); r->sig[2] = ((a2) | (b2)); case 2: a1 = a->sig[1]; b1 = b->sig[1]; r->sig[1] = ((a1) | (b1)); case 1: a0 = a->sig[0]; b0 = b->sig[0]; r->sig[0] = ((a0) | (b0)); break; default: do { bool __cond = !(!(1)); extern void __compiletime_assert_114(void) __attribute__((error("BUILD_BUG failed"))); if (__cond) __compiletime_assert_114(); do { } while (0); } while (0); } }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sigandsets(sigset_t *r, const sigset_t *a, const sigset_t *b) { unsigned long a0, a1, a2, a3, b0, b1, b2, b3; switch ((128 / (sizeof(unsigned long) * 8))) { case 4: a3 = a->sig[3]; a2 = a->sig[2]; b3 = b->sig[3]; b2 = b->sig[2]; r->sig[3] = ((a3) & (b3)); r->sig[2] = ((a2) & (b2)); case 2: a1 = a->sig[1]; b1 = b->sig[1]; r->sig[1] = ((a1) & (b1)); case 1: a0 = a->sig[0]; b0 = b->sig[0]; r->sig[0] = ((a0) & (b0)); break; default: do { bool __cond = !(!(1)); extern void __compiletime_assert_117(void) __attribute__((error("BUILD_BUG failed"))); if (__cond) __compiletime_assert_117(); do { } while (0); } while (0); } }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sigandnsets(sigset_t *r, const sigset_t *a, const sigset_t *b) { unsigned long a0, a1, a2, a3, b0, b1, b2, b3; switch ((128 / (sizeof(unsigned long) * 8))) { case 4: a3 = a->sig[3]; a2 = a->sig[2]; b3 = b->sig[3]; b2 = b->sig[2]; r->sig[3] = ((a3) & ~(b3)); r->sig[2] = ((a2) & ~(b2)); case 2: a1 = a->sig[1]; b1 = b->sig[1]; r->sig[1] = ((a1) & ~(b1)); case 1: a0 = a->sig[0]; b0 = b->sig[0]; r->sig[0] = ((a0) & ~(b0)); break; default: do { bool __cond = !(!(1)); extern void __compiletime_assert_120(void) __attribute__((error("BUILD_BUG failed"))); if (__cond) __compiletime_assert_120(); do { } while (0); } while (0); } }
# 142 "include/linux/signal.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void signotset(sigset_t *set) { switch ((128 / (sizeof(unsigned long) * 8))) { case 4: set->sig[3] = (~(set->sig[3])); set->sig[2] = (~(set->sig[2])); case 2: set->sig[1] = (~(set->sig[1])); case 1: set->sig[0] = (~(set->sig[0])); break; default: do { bool __cond = !(!(1)); extern void __compiletime_assert_142(void) __attribute__((error("BUILD_BUG failed"))); if (__cond) __compiletime_assert_142(); do { } while (0); } while (0); } }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sigemptyset(sigset_t *set)
{
switch ((128 / (sizeof(unsigned long) * 8))) {
default:
memset(set, 0, sizeof(sigset_t));
break;
case 2: set->sig[1] = 0;
case 1: set->sig[0] = 0;
break;
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sigfillset(sigset_t *set)
{
switch ((128 / (sizeof(unsigned long) * 8))) {
default:
memset(set, -1, sizeof(sigset_t));
break;
case 2: set->sig[1] = -1;
case 1: set->sig[0] = -1;
break;
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sigaddsetmask(sigset_t *set, unsigned long mask)
{
set->sig[0] |= mask;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sigdelsetmask(sigset_t *set, unsigned long mask)
{
set->sig[0] &= ~mask;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int sigtestsetmask(sigset_t *set, unsigned long mask)
{
return (set->sig[0] & mask) != 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void siginitset(sigset_t *set, unsigned long mask)
{
set->sig[0] = mask;
switch ((128 / (sizeof(unsigned long) * 8))) {
default:
memset(&set->sig[1], 0, sizeof(long)*((128 / (sizeof(unsigned long) * 8))-1));
break;
case 2: set->sig[1] = 0;
case 1: ;
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void siginitsetinv(sigset_t *set, unsigned long mask)
{
set->sig[0] = ~mask;
switch ((128 / (sizeof(unsigned long) * 8))) {
default:
memset(&set->sig[1], -1, sizeof(long)*((128 / (sizeof(unsigned long) * 8))-1));
break;
case 2: set->sig[1] = -1;
case 1: ;
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_sigpending(struct sigpending *sig)
{
sigemptyset(&sig->signal);
INIT_LIST_HEAD(&sig->list);
}
extern void flush_sigqueue(struct sigpending *queue);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int valid_signal(unsigned long sig)
{
return sig <= 128 ? 1 : 0;
}
struct timespec;
struct pt_regs;
extern int next_signal(struct sigpending *pending, sigset_t *mask);
extern int do_send_sig_info(int sig, struct siginfo *info,
struct task_struct *p, bool group);
extern int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p);
extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *);
extern int do_sigtimedwait(const sigset_t *, siginfo_t *,
const struct timespec *);
extern int sigprocmask(int, sigset_t *, sigset_t *);
extern void set_current_blocked(sigset_t *);
extern void __set_current_blocked(const sigset_t *);
extern int show_unhandled_signals;
extern int sigsuspend(sigset_t *);
struct sigaction {
unsigned int sa_flags;
__sighandler_t sa_handler;
sigset_t sa_mask;
};
struct k_sigaction {
struct sigaction sa;
};
# 274 "include/linux/signal.h"
struct ksignal {
struct k_sigaction ka;
siginfo_t info;
int sig;
};
extern int get_signal(struct ksignal *ksig);
extern void signal_setup_done(int failed, struct ksignal *ksig, int stepping);
extern void exit_signals(struct task_struct *tsk);
extern void kernel_sigaction(int, __sighandler_t);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void allow_signal(int sig)
{
kernel_sigaction(sig, ( __sighandler_t)2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void disallow_signal(int sig)
{
kernel_sigaction(sig, (( __sighandler_t)1));
}
extern struct kmem_cache *sighand_cachep;
int unhandled_signal(struct task_struct *tsk, int sig);
# 427 "include/linux/signal.h"
void signals_init(void);
int restore_altstack(const stack_t *);
int __save_altstack(stack_t *, unsigned long);
# 441 "include/linux/signal.h"
struct seq_file;
extern void render_sigset_t(struct seq_file *, const char *, sigset_t *);
# 38 "include/linux/sched.h" 2
# 1 "include/linux/proportions.h" 1
# 17 "include/linux/proportions.h"
struct prop_global {
int shift;
struct percpu_counter events;
};
struct prop_descriptor {
int index;
struct prop_global pg[2];
struct mutex mutex;
};
int prop_descriptor_init(struct prop_descriptor *pd, int shift, gfp_t gfp);
void prop_change_shift(struct prop_descriptor *pd, int new_shift);
struct prop_local_percpu {
struct percpu_counter events;
int shift;
unsigned long period;
raw_spinlock_t lock;
};
int prop_local_init_percpu(struct prop_local_percpu *pl, gfp_t gfp);
void prop_local_destroy_percpu(struct prop_local_percpu *pl);
void __prop_inc_percpu(struct prop_descriptor *pd, struct prop_local_percpu *pl);
void prop_fraction_percpu(struct prop_descriptor *pd, struct prop_local_percpu *pl,
long *numerator, long *denominator);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
void prop_inc_percpu(struct prop_descriptor *pd, struct prop_local_percpu *pl)
{
unsigned long flags;
do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0);
__prop_inc_percpu(pd, pl);
do { if (({ ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(flags); })) { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } } while (0);
}
# 94 "include/linux/proportions.h"
void __prop_inc_percpu_max(struct prop_descriptor *pd,
struct prop_local_percpu *pl, long frac);
struct prop_local_single {
unsigned long events;
unsigned long period;
int shift;
raw_spinlock_t lock;
};
int prop_local_init_single(struct prop_local_single *pl);
void prop_local_destroy_single(struct prop_local_single *pl);
void __prop_inc_single(struct prop_descriptor *pd, struct prop_local_single *pl);
void prop_fraction_single(struct prop_descriptor *pd, struct prop_local_single *pl,
long *numerator, long *denominator);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
void prop_inc_single(struct prop_descriptor *pd, struct prop_local_single *pl)
{
unsigned long flags;
do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0); do { } while (0); } while (0);
__prop_inc_single(pd, pl);
do { if (({ ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_irqs_disabled_flags(flags); })) { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); do { } while (0); } else { do { } while (0); do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0); } } while (0);
}
# 44 "include/linux/sched.h" 2
# 1 "include/linux/seccomp.h" 1
# 1 "include/uapi/linux/seccomp.h" 1
# 47 "include/uapi/linux/seccomp.h"
struct seccomp_data {
int nr;
__u32 arch;
__u64 instruction_pointer;
__u64 args[6];
};
# 5 "include/linux/seccomp.h" 2
# 60 "include/linux/seccomp.h"
struct seccomp { };
struct seccomp_filter { };
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int secure_computing(void) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long prctl_get_seccomp(void)
{
return -22;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) long prctl_set_seccomp(unsigned long arg2, char *arg3)
{
return -22;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int seccomp_mode(struct seccomp *s)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void put_seccomp_filter(struct task_struct *tsk)
{
return;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void get_seccomp_filter(struct task_struct *tsk)
{
return;
}
# 45 "include/linux/sched.h" 2
# 1 "include/linux/rtmutex.h" 1
# 19 "include/linux/rtmutex.h"
extern int max_lock_depth;
# 29 "include/linux/rtmutex.h"
struct rt_mutex {
raw_spinlock_t wait_lock;
struct rb_root waiters;
struct rb_node *waiters_leftmost;
struct task_struct *owner;
};
struct rt_mutex_waiter;
struct hrtimer_sleeper;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int rt_mutex_debug_check_no_locks_freed(const void *from,
unsigned long len)
{
return 0;
}
# 84 "include/linux/rtmutex.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int rt_mutex_is_locked(struct rt_mutex *lock)
{
return lock->owner != ((void *)0);
}
extern void __rt_mutex_init(struct rt_mutex *lock, const char *name);
extern void rt_mutex_destroy(struct rt_mutex *lock);
extern void rt_mutex_lock(struct rt_mutex *lock);
extern int rt_mutex_lock_interruptible(struct rt_mutex *lock);
extern int rt_mutex_timed_lock(struct rt_mutex *lock,
struct hrtimer_sleeper *timeout);
extern int rt_mutex_trylock(struct rt_mutex *lock);
extern void rt_mutex_unlock(struct rt_mutex *lock);
# 48 "include/linux/sched.h" 2
# 1 "include/linux/task_io_accounting.h" 1
# 11 "include/linux/task_io_accounting.h"
struct task_io_accounting {
# 45 "include/linux/task_io_accounting.h"
};
# 55 "include/linux/sched.h" 2
# 1 "include/linux/latencytop.h" 1
# 13 "include/linux/latencytop.h"
struct task_struct;
# 42 "include/linux/latencytop.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
account_scheduler_latency(struct task_struct *task, int usecs, int inter)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clear_all_latency_tracing(struct task_struct *p)
{
}
# 56 "include/linux/sched.h" 2
# 1 "include/linux/cred.h" 1
# 17 "include/linux/cred.h"
# 1 "include/linux/key.h" 1
# 25 "include/linux/key.h"
# 1 "include/linux/assoc_array.h" 1
# 26 "include/linux/key.h" 2
typedef int32_t key_serial_t;
typedef uint32_t key_perm_t;
struct key;
# 18 "include/linux/cred.h" 2
# 1 "include/linux/selinux.h" 1
# 17 "include/linux/selinux.h"
struct selinux_audit_rule;
struct audit_context;
struct kern_ipc_perm;
# 29 "include/linux/selinux.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool selinux_is_enabled(void)
{
return false;
}
# 19 "include/linux/cred.h" 2
struct user_struct;
struct cred;
struct inode;
struct group_info {
atomic_t usage;
int ngroups;
int nblocks;
kgid_t small_block[32];
kgid_t *blocks[0];
};
# 49 "include/linux/cred.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct group_info *get_group_info(struct group_info *gi)
{
atomic_add(1, (&gi->usage));
return gi;
}
# 65 "include/linux/cred.h"
extern struct group_info *groups_alloc(int);
extern struct group_info init_groups;
extern void groups_free(struct group_info *);
extern int set_current_groups(struct group_info *);
extern void set_groups(struct cred *, struct group_info *);
extern int groups_search(const struct group_info *, kgid_t);
extern bool may_setgroups(void);
extern int in_group_p(kgid_t);
extern int in_egroup_p(kgid_t);
# 103 "include/linux/cred.h"
struct cred {
atomic_t usage;
kuid_t uid;
kgid_t gid;
kuid_t suid;
kgid_t sgid;
kuid_t euid;
kgid_t egid;
kuid_t fsuid;
kgid_t fsgid;
unsigned securebits;
kernel_cap_t cap_inheritable;
kernel_cap_t cap_permitted;
kernel_cap_t cap_effective;
kernel_cap_t cap_bset;
# 134 "include/linux/cred.h"
void *security;
struct user_struct *user;
struct user_namespace *user_ns;
struct group_info *group_info;
struct callback_head rcu;
};
extern void __put_cred(struct cred *);
extern void exit_creds(struct task_struct *);
extern int copy_creds(struct task_struct *, unsigned long);
extern const struct cred *get_task_cred(struct task_struct *);
extern struct cred *cred_alloc_blank(void);
extern struct cred *prepare_creds(void);
extern struct cred *prepare_exec_creds(void);
extern int commit_creds(struct cred *);
extern void abort_creds(struct cred *);
extern const struct cred *override_creds(const struct cred *);
extern void revert_creds(const struct cred *);
extern struct cred *prepare_kernel_cred(struct task_struct *);
extern int change_create_files_as(struct cred *, struct inode *);
extern int set_security_override(struct cred *, u32);
extern int set_security_override_from_ctx(struct cred *, const char *);
extern int set_create_files_as(struct cred *, struct inode *);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) cred_init(void);
# 189 "include/linux/cred.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void validate_creds(const struct cred *cred)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void validate_creds_for_do_exit(struct task_struct *tsk)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void validate_process_creds(void)
{
}
# 207 "include/linux/cred.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct cred *get_new_cred(struct cred *cred)
{
atomic_add(1, (&cred->usage));
return cred;
}
# 226 "include/linux/cred.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const struct cred *get_cred(const struct cred *cred)
{
struct cred *nonconst_cred = (struct cred *) cred;
validate_creds(cred);
return get_new_cred(nonconst_cred);
}
# 244 "include/linux/cred.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void put_cred(const struct cred *_cred)
{
struct cred *cred = (struct cred *) _cred;
validate_creds(cred);
if ((atomic_sub_return(1, (&(cred)->usage)) == 0))
__put_cred(cred);
}
# 353 "include/linux/cred.h"
extern struct user_namespace init_user_ns;
# 57 "include/linux/sched.h" 2
# 1 "./include/uapi/linux/magic.h" 1
# 61 "include/linux/sched.h" 2
# 110 "include/linux/sched.h"
struct sched_attr {
u32 size;
u32 sched_policy;
u64 sched_flags;
s32 sched_nice;
u32 sched_priority;
u64 sched_runtime;
u64 sched_deadline;
u64 sched_period;
};
struct exec_domain;
struct futex_pi_state;
struct robust_list_head;
struct bio_list;
struct fs_struct;
struct perf_event_context;
struct blk_plug;
struct filename;
# 151 "include/linux/sched.h"
extern unsigned long avenrun[];
extern void get_avenrun(unsigned long *loads, unsigned long offset, int shift);
# 166 "include/linux/sched.h"
extern unsigned long total_forks;
extern int nr_threads;
extern __attribute__((section(".data..percpu" ""))) __typeof__(unsigned long) process_counts;
extern int nr_processes(void);
extern unsigned long nr_running(void);
extern bool single_task_running(void);
extern unsigned long nr_iowait(void);
extern unsigned long nr_iowait_cpu(int cpu);
extern void get_iowait_load(unsigned long *nr_waiters, unsigned long *load);
extern void calc_global_load(unsigned long ticks);
extern void update_cpu_load_nohz(void);
extern unsigned long get_parent_ip(unsigned long addr);
extern void dump_cpu_task(int cpu);
struct seq_file;
struct cfs_rq;
struct task_group;
extern void proc_sched_show_task(struct task_struct *p, struct seq_file *m);
extern void proc_sched_set_task(struct task_struct *p);
extern void
print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq);
# 221 "include/linux/sched.h"
extern char ___assert_task_state[1 - 2*!!(
sizeof("RSDTtXZxKWP")-1 != ( __builtin_constant_p(1024) ? ( (1024) < 1 ? ____ilog2_NaN() : (1024) & (1ULL << 63) ? 63 : (1024) & (1ULL << 62) ? 62 : (1024) & (1ULL << 61) ? 61 : (1024) & (1ULL << 60) ? 60 : (1024) & (1ULL << 59) ? 59 : (1024) & (1ULL << 58) ? 58 : (1024) & (1ULL << 57) ? 57 : (1024) & (1ULL << 56) ? 56 : (1024) & (1ULL << 55) ? 55 : (1024) & (1ULL << 54) ? 54 : (1024) & (1ULL << 53) ? 53 : (1024) & (1ULL << 52) ? 52 : (1024) & (1ULL << 51) ? 51 : (1024) & (1ULL << 50) ? 50 : (1024) & (1ULL << 49) ? 49 : (1024) & (1ULL << 48) ? 48 : (1024) & (1ULL << 47) ? 47 : (1024) & (1ULL << 46) ? 46 : (1024) & (1ULL << 45) ? 45 : (1024) & (1ULL << 44) ? 44 : (1024) & (1ULL << 43) ? 43 : (1024) & (1ULL << 42) ? 42 : (1024) & (1ULL << 41) ? 41 : (1024) & (1ULL << 40) ? 40 : (1024) & (1ULL << 39) ? 39 : (1024) & (1ULL << 38) ? 38 : (1024) & (1ULL << 37) ? 37 : (1024) & (1ULL << 36) ? 36 : (1024) & (1ULL << 35) ? 35 : (1024) & (1ULL << 34) ? 34 : (1024) & (1ULL << 33) ? 33 : (1024) & (1ULL << 32) ? 32 : (1024) & (1ULL << 31) ? 31 : (1024) & (1ULL << 30) ? 30 : (1024) & (1ULL << 29) ? 29 : (1024) & (1ULL << 28) ? 28 : (1024) & (1ULL << 27) ? 27 : (1024) & (1ULL << 26) ? 26 : (1024) & (1ULL << 25) ? 25 : (1024) & (1ULL << 24) ? 24 : (1024) & (1ULL << 23) ? 23 : (1024) & (1ULL << 22) ? 22 : (1024) & (1ULL << 21) ? 21 : (1024) & (1ULL << 20) ? 20 : (1024) & (1ULL << 19) ? 19 : (1024) & (1ULL << 18) ? 18 : (1024) & (1ULL << 17) ? 17 : (1024) & (1ULL << 16) ? 16 : (1024) & (1ULL << 15) ? 15 : (1024) & (1ULL << 14) ? 14 : (1024) & (1ULL << 13) ? 13 : (1024) & (1ULL << 12) ? 12 : (1024) & (1ULL << 11) ? 11 : (1024) & (1ULL << 10) ? 10 : (1024) & (1ULL << 9) ? 9 : (1024) & (1ULL << 8) ? 8 : (1024) & (1ULL << 7) ? 7 : (1024) & (1ULL << 6) ? 6 : (1024) & (1ULL << 5) ? 5 : (1024) & (1ULL << 4) ? 4 : (1024) & (1ULL << 3) ? 3 : (1024) & (1ULL << 2) ? 2 : (1024) & (1ULL << 1) ? 1 : (1024) & (1ULL << 0) ? 0 : ____ilog2_NaN() ) : (sizeof(1024) <= 4) ? __ilog2_u32(1024) : __ilog2_u64(1024) )+1)];
# 278 "include/linux/sched.h"
extern rwlock_t tasklist_lock;
extern spinlock_t mmlist_lock;
struct task_struct;
extern void sched_init(void);
extern void sched_init_smp(void);
extern void schedule_tail(struct task_struct *prev);
extern void init_idle(struct task_struct *idle, int cpu);
extern void init_idle_bootup_task(struct task_struct *idle);
extern int runqueue_is_locked(int cpu);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void nohz_balance_enter_idle(int cpu) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_cpu_sd_state_idle(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int get_nohz_timer_target(int pinned)
{
return (current_thread_info()->cpu);
}
extern void show_state_filter(unsigned long state_filter);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void show_state(void)
{
show_state_filter(0);
}
extern void show_regs(struct pt_regs *);
extern void show_stack(struct task_struct *task, unsigned long *sp);
void io_schedule(void);
long io_schedule_timeout(long timeout);
extern void cpu_init (void);
extern void trap_init(void);
extern void update_process_times(int user);
extern void scheduler_tick(void);
extern void sched_show_task(struct task_struct *p);
# 347 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void touch_softlockup_watchdog(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void touch_softlockup_watchdog_sync(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void touch_all_softlockup_watchdogs(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void lockup_detector_init(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void reset_hung_task_detector(void)
{
}
extern char __sched_text_start[], __sched_text_end[];
extern int in_sched_functions(unsigned long addr);
extern signed long schedule_timeout(signed long timeout);
extern signed long schedule_timeout_interruptible(signed long timeout);
extern signed long schedule_timeout_killable(signed long timeout);
extern signed long schedule_timeout_uninterruptible(signed long timeout);
void schedule(void);
extern void schedule_preempt_disabled(void);
struct nsproxy;
struct user_namespace;
extern void arch_pick_mmap_layout(struct mm_struct *mm);
extern unsigned long
arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
unsigned long, unsigned long);
extern unsigned long
arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
unsigned long len, unsigned long pgoff,
unsigned long flags);
# 412 "include/linux/sched.h"
extern void set_dumpable(struct mm_struct *mm, int value);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __get_dumpable(unsigned long mm_flags)
{
return mm_flags & ((1 << 2) - 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int get_dumpable(struct mm_struct *mm)
{
return __get_dumpable(mm->flags);
}
# 461 "include/linux/sched.h"
struct sighand_struct {
atomic_t count;
struct k_sigaction action[128];
spinlock_t siglock;
wait_queue_head_t signalfd_wqh;
};
struct pacct_struct {
int ac_flag;
long ac_exitcode;
unsigned long ac_mem;
cputime_t ac_utime, ac_stime;
unsigned long ac_minflt, ac_majflt;
};
struct cpu_itimer {
cputime_t expires;
cputime_t incr;
u32 error;
u32 incr_error;
};
# 490 "include/linux/sched.h"
struct cputime {
cputime_t utime;
cputime_t stime;
};
# 509 "include/linux/sched.h"
struct task_cputime {
cputime_t utime;
cputime_t stime;
unsigned long long sum_exec_runtime;
};
# 551 "include/linux/sched.h"
struct thread_group_cputimer {
struct task_cputime cputime;
int running;
raw_spinlock_t lock;
};
struct autogroup;
# 567 "include/linux/sched.h"
struct signal_struct {
atomic_t sigcnt;
atomic_t live;
int nr_threads;
struct list_head thread_head;
wait_queue_head_t wait_chldexit;
struct task_struct *curr_target;
struct sigpending shared_pending;
int group_exit_code;
int notify_count;
struct task_struct *group_exit_task;
int group_stop_count;
unsigned int flags;
# 604 "include/linux/sched.h"
unsigned int is_child_subreaper:1;
unsigned int has_child_subreaper:1;
int posix_timer_id;
struct list_head posix_timers;
struct hrtimer real_timer;
struct pid *leader_pid;
ktime_t it_real_incr;
struct cpu_itimer it[2];
struct thread_group_cputimer cputimer;
struct task_cputime cputime_expires;
struct list_head cpu_timers[3];
struct pid *tty_old_pgrp;
int leader;
struct tty_struct *tty;
# 650 "include/linux/sched.h"
seqlock_t stats_lock;
cputime_t utime, stime, cutime, cstime;
cputime_t gtime;
cputime_t cgtime;
struct cputime prev_cputime;
unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
unsigned long inblock, oublock, cinblock, coublock;
unsigned long maxrss, cmaxrss;
struct task_io_accounting ioac;
unsigned long long sum_sched_runtime;
# 680 "include/linux/sched.h"
struct rlimit rlim[16];
# 703 "include/linux/sched.h"
struct rw_semaphore group_rwsem;
oom_flags_t oom_flags;
short oom_score_adj;
short oom_score_adj_min;
struct mutex cred_guard_mutex;
};
# 733 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int signal_group_exit(const struct signal_struct *sig)
{
return (sig->flags & 0x00000004) ||
(sig->group_exit_task != ((void *)0));
}
struct user_struct {
atomic_t __count;
atomic_t processes;
atomic_t sigpending;
atomic_t inotify_watches;
atomic_t inotify_devs;
atomic_long_t epoll_watches;
unsigned long mq_bytes;
unsigned long locked_shm;
struct hlist_node uidhash_node;
kuid_t uid;
};
extern int uids_sysfs_init(void);
extern struct user_struct *find_user(kuid_t);
extern struct user_struct root_user;
struct backing_dev_info;
struct reclaim_state;
# 833 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int sched_info_on(void)
{
return 0;
}
enum cpu_idle_type {
CPU_IDLE,
CPU_NOT_IDLE,
CPU_NEWLY_IDLE,
CPU_MAX_IDLE_TYPES
};
# 898 "include/linux/sched.h"
struct sched_domain_attr {
int relax_domain_level;
};
extern int sched_domain_level_max;
struct sched_group;
struct sched_domain {
struct sched_domain *parent;
struct sched_domain *child;
struct sched_group *groups;
unsigned long min_interval;
unsigned long max_interval;
unsigned int busy_factor;
unsigned int imbalance_pct;
unsigned int cache_nice_tries;
unsigned int busy_idx;
unsigned int idle_idx;
unsigned int newidle_idx;
unsigned int wake_idx;
unsigned int forkexec_idx;
unsigned int smt_gain;
int nohz_idle;
int flags;
int level;
unsigned long last_balance;
unsigned int balance_interval;
unsigned int nr_balance_failed;
u64 max_newidle_lb_cost;
unsigned long next_decay_max_lb_cost;
# 972 "include/linux/sched.h"
char *name;
union {
void *private;
struct callback_head rcu;
};
unsigned int span_weight;
unsigned long span[0];
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct cpumask *sched_domain_span(struct sched_domain *sd)
{
return ((struct cpumask *)(1 ? (sd->span) : (void *)sizeof(__check_is_bitmap(sd->span))));
}
extern void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[],
struct sched_domain_attr *dattr_new);
cpumask_var_t *alloc_sched_domains(unsigned int ndoms);
void free_sched_domains(cpumask_var_t doms[], unsigned int ndoms);
bool cpus_share_cache(int this_cpu, int that_cpu);
typedef const struct cpumask *(*sched_domain_mask_f)(int cpu);
typedef int (*sched_domain_flags_f)(void);
struct sd_data {
struct sched_domain ** sd;
struct sched_group ** sg;
struct sched_group_capacity ** sgc;
};
struct sched_domain_topology_level {
sched_domain_mask_f mask;
sched_domain_flags_f sd_flags;
int flags;
int numa_level;
struct sd_data data;
char *name;
};
extern struct sched_domain_topology_level *sched_domain_topology;
extern void set_sched_topology(struct sched_domain_topology_level *tl);
extern void wake_up_if_idle(int cpu);
# 1055 "include/linux/sched.h"
struct io_context;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void prefetch_stack(struct task_struct *t) { }
struct audit_context;
struct mempolicy;
struct pipe_inode_info;
struct uts_namespace;
struct load_weight {
unsigned long weight;
u32 inv_weight;
};
struct sched_avg {
u32 runnable_avg_sum, runnable_avg_period;
u64 last_runnable_update;
s64 decay_count;
unsigned long load_avg_contrib;
};
# 1122 "include/linux/sched.h"
struct sched_entity {
struct load_weight load;
struct rb_node run_node;
struct list_head group_node;
unsigned int on_rq;
u64 exec_start;
u64 sum_exec_runtime;
u64 vruntime;
u64 prev_sum_exec_runtime;
u64 nr_migrations;
int depth;
struct sched_entity *parent;
struct cfs_rq *cfs_rq;
struct cfs_rq *my_q;
struct sched_avg avg;
};
struct sched_rt_entity {
struct list_head run_list;
unsigned long timeout;
unsigned long watchdog_stamp;
unsigned int time_slice;
struct sched_rt_entity *back;
};
struct sched_dl_entity {
struct rb_node rb_node;
u64 dl_runtime;
u64 dl_deadline;
u64 dl_period;
u64 dl_bw;
s64 runtime;
u64 deadline;
unsigned int flags;
# 1210 "include/linux/sched.h"
int dl_throttled, dl_new, dl_boosted, dl_yielded;
struct hrtimer dl_timer;
};
union rcu_special {
struct {
bool blocked;
bool need_qs;
} b;
short s;
};
struct rcu_node;
enum perf_event_task_context {
perf_invalid_context = -1,
perf_hw_context = 0,
perf_sw_context,
perf_nr_task_contexts,
};
struct task_struct {
volatile long state;
void *stack;
atomic_t usage;
unsigned int flags;
unsigned int ptrace;
struct llist_node wake_entry;
int on_cpu;
struct task_struct *last_wakee;
unsigned long wakee_flips;
unsigned long wakee_flip_decay_ts;
int wake_cpu;
int on_rq;
int prio, static_prio, normal_prio;
unsigned int rt_priority;
const struct sched_class *sched_class;
struct sched_entity se;
struct sched_rt_entity rt;
struct task_group *sched_task_group;
struct sched_dl_entity dl;
# 1272 "include/linux/sched.h"
unsigned int policy;
int nr_cpus_allowed;
cpumask_t cpus_allowed;
# 1295 "include/linux/sched.h"
struct list_head tasks;
struct plist_node pushable_tasks;
struct rb_node pushable_dl_tasks;
struct mm_struct *mm, *active_mm;
u32 vmacache_seqnum;
struct vm_area_struct *vmacache[(1U << 2)];
int exit_state;
int exit_code, exit_signal;
int pdeath_signal;
unsigned int jobctl;
unsigned int personality;
unsigned in_execve:1;
unsigned in_iowait:1;
unsigned sched_reset_on_fork:1;
unsigned sched_contributes_to_load:1;
unsigned long atomic_flags;
pid_t pid;
pid_t tgid;
# 1342 "include/linux/sched.h"
struct task_struct *real_parent;
struct task_struct *parent;
struct list_head children;
struct list_head sibling;
struct task_struct *group_leader;
struct list_head ptraced;
struct list_head ptrace_entry;
struct pid_link pids[PIDTYPE_MAX];
struct list_head thread_group;
struct list_head thread_node;
struct completion *vfork_done;
int *set_child_tid;
int *clear_child_tid;
cputime_t utime, stime, utimescaled, stimescaled;
cputime_t gtime;
struct cputime prev_cputime;
# 1382 "include/linux/sched.h"
unsigned long nvcsw, nivcsw;
u64 start_time;
u64 real_start_time;
unsigned long min_flt, maj_flt;
struct task_cputime cputime_expires;
struct list_head cpu_timers[3];
const struct cred *real_cred;
const struct cred *cred;
char comm[16];
int link_count, total_link_count;
struct sysv_sem sysvsem;
struct sysv_shm sysvshm;
struct thread_struct thread;
struct fs_struct *fs;
struct files_struct *files;
struct nsproxy *nsproxy;
struct signal_struct *signal;
struct sighand_struct *sighand;
sigset_t blocked, real_blocked;
sigset_t saved_sigmask;
struct sigpending pending;
unsigned long sas_ss_sp;
size_t sas_ss_size;
int (*notifier)(void *priv);
void *notifier_data;
sigset_t *notifier_mask;
struct callback_head *task_works;
struct audit_context *audit_context;
struct seccomp seccomp;
u32 parent_exec_id;
u32 self_exec_id;
spinlock_t alloc_lock;
raw_spinlock_t pi_lock;
struct rb_root pi_waiters;
struct rb_node *pi_waiters_leftmost;
struct rt_mutex_waiter *pi_blocked_on;
# 1488 "include/linux/sched.h"
void *journal_info;
struct bio_list *bio_list;
struct blk_plug *plug;
struct reclaim_state *reclaim_state;
struct backing_dev_info *backing_dev_info;
struct io_context *io_context;
unsigned long ptrace_message;
siginfo_t *last_siginfo;
struct task_io_accounting ioac;
nodemask_t mems_allowed;
seqcount_t mems_allowed_seq;
int cpuset_mem_spread_rotor;
int cpuset_slab_spread_rotor;
struct css_set *cgroups;
struct list_head cg_list;
struct robust_list_head *robust_list;
struct list_head pi_state_list;
struct futex_pi_state *pi_state_cache;
# 1593 "include/linux/sched.h"
struct callback_head rcu;
struct pipe_inode_info *splice_pipe;
struct page_frag task_frag;
# 1612 "include/linux/sched.h"
int nr_dirtied;
int nr_dirtied_pause;
unsigned long dirty_paused_when;
# 1624 "include/linux/sched.h"
unsigned long timer_slack_ns;
unsigned long default_timer_slack_ns;
# 1664 "include/linux/sched.h"
};
# 1682 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_numa_fault(int last_node, int node, int pages,
int flags)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_numa_group_id(struct task_struct *p)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_numabalancing_state(bool enabled)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_numa_free(struct task_struct *p)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool should_numa_migrate_memory(struct task_struct *p,
struct page *page, int src_nid, int dst_cpu)
{
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct pid *task_pid(struct task_struct *task)
{
return task->pids[PIDTYPE_PID].pid;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct pid *task_tgid(struct task_struct *task)
{
return task->group_leader->pids[PIDTYPE_PID].pid;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct pid *task_pgrp(struct task_struct *task)
{
return task->group_leader->pids[PIDTYPE_PGID].pid;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct pid *task_session(struct task_struct *task)
{
return task->group_leader->pids[PIDTYPE_SID].pid;
}
struct pid_namespace;
# 1743 "include/linux/sched.h"
pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
struct pid_namespace *ns);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_pid_nr(struct task_struct *tsk)
{
return tsk->pid;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_pid_nr_ns(struct task_struct *tsk,
struct pid_namespace *ns)
{
return __task_pid_nr_ns(tsk, PIDTYPE_PID, ns);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_pid_vnr(struct task_struct *tsk)
{
return __task_pid_nr_ns(tsk, PIDTYPE_PID, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_tgid_nr(struct task_struct *tsk)
{
return tsk->tgid;
}
pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_tgid_vnr(struct task_struct *tsk)
{
return pid_vnr(task_tgid(tsk));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pid_alive(const struct task_struct *p);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_ppid_nr_ns(const struct task_struct *tsk, struct pid_namespace *ns)
{
pid_t pid = 0;
rcu_read_lock();
if (pid_alive(tsk))
pid = task_tgid_nr_ns(({ typeof(*(tsk->real_parent)) *_________p1 = (typeof(*(tsk->real_parent)) *)(*(volatile typeof((tsk->real_parent)) *)&((tsk->real_parent))); do { } while (0); ; do { } while(0); ((typeof(*(tsk->real_parent)) *)(_________p1)); }), ns);
rcu_read_unlock();
return pid;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_ppid_nr(const struct task_struct *tsk)
{
return task_ppid_nr_ns(tsk, &init_pid_ns);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_pgrp_nr_ns(struct task_struct *tsk,
struct pid_namespace *ns)
{
return __task_pid_nr_ns(tsk, PIDTYPE_PGID, ns);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_pgrp_vnr(struct task_struct *tsk)
{
return __task_pid_nr_ns(tsk, PIDTYPE_PGID, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_session_nr_ns(struct task_struct *tsk,
struct pid_namespace *ns)
{
return __task_pid_nr_ns(tsk, PIDTYPE_SID, ns);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_session_vnr(struct task_struct *tsk)
{
return __task_pid_nr_ns(tsk, PIDTYPE_SID, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) pid_t task_pgrp_nr(struct task_struct *tsk)
{
return task_pgrp_nr_ns(tsk, &init_pid_ns);
}
# 1833 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pid_alive(const struct task_struct *p)
{
return p->pids[PIDTYPE_PID].pid != ((void *)0);
}
# 1846 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_global_init(struct task_struct *tsk)
{
return tsk->pid == 1;
}
extern struct pid *cad_pid;
extern void free_task(struct task_struct *tsk);
extern void __put_task_struct(struct task_struct *t);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void put_task_struct(struct task_struct *t)
{
if ((atomic_sub_return(1, (&t->usage)) == 0))
__put_task_struct(t);
}
# 1871 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_cputime(struct task_struct *t,
cputime_t *utime, cputime_t *stime)
{
if (utime)
*utime = t->utime;
if (stime)
*stime = t->stime;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_cputime_scaled(struct task_struct *t,
cputime_t *utimescaled,
cputime_t *stimescaled)
{
if (utimescaled)
*utimescaled = t->utimescaled;
if (stimescaled)
*stimescaled = t->stimescaled;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) cputime_t task_gtime(struct task_struct *t)
{
return t->gtime;
}
extern void task_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st);
extern void thread_group_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st);
# 1957 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) gfp_t memalloc_noio_flags(gfp_t flags)
{
if (__builtin_expect(!!((current_thread_info()->task)->flags & 0x00080000), 0))
flags &= ~((( gfp_t)0x40u) | (( gfp_t)0x80u));
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int memalloc_noio_save(void)
{
unsigned int flags = (current_thread_info()->task)->flags & 0x00080000;
(current_thread_info()->task)->flags |= 0x00080000;
return flags;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void memalloc_noio_restore(unsigned int flags)
{
(current_thread_info()->task)->flags = ((current_thread_info()->task)->flags & ~0x00080000) | flags;
}
# 1992 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool task_no_new_privs(struct task_struct *p) { return test_bit(0, &p->atomic_flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_set_no_new_privs(struct task_struct *p) { set_bit(0, &p->atomic_flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool task_spread_page(struct task_struct *p) { return test_bit(1, &p->atomic_flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_set_spread_page(struct task_struct *p) { set_bit(1, &p->atomic_flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_clear_spread_page(struct task_struct *p) { clear_bit(1, &p->atomic_flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool task_spread_slab(struct task_struct *p) { return test_bit(2, &p->atomic_flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_set_spread_slab(struct task_struct *p) { set_bit(2, &p->atomic_flags); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_clear_spread_slab(struct task_struct *p) { clear_bit(2, &p->atomic_flags); }
# 2027 "include/linux/sched.h"
extern bool task_set_jobctl_pending(struct task_struct *task,
unsigned int mask);
extern void task_clear_jobctl_trapping(struct task_struct *task);
extern void task_clear_jobctl_pending(struct task_struct *task,
unsigned int mask);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rcu_copy_process(struct task_struct *p)
{
# 2046 "include/linux/sched.h"
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tsk_restore_flags(struct task_struct *task,
unsigned long orig_flags, unsigned long flags)
{
task->flags &= ~flags;
task->flags |= orig_flags & flags;
}
extern void do_set_cpus_allowed(struct task_struct *p,
const struct cpumask *new_mask);
extern int set_cpus_allowed_ptr(struct task_struct *p,
const struct cpumask *new_mask);
# 2079 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void calc_load_enter_idle(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void calc_load_exit_idle(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
{
return set_cpus_allowed_ptr(p, &new_mask);
}
# 2098 "include/linux/sched.h"
extern unsigned long long __attribute__((no_instrument_function)) sched_clock(void);
extern u64 cpu_clock(int cpu);
extern u64 local_clock(void);
extern u64 sched_clock_cpu(int cpu);
extern void sched_clock_init(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sched_clock_tick(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sched_clock_idle_sleep_event(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sched_clock_idle_wakeup_event(u64 delta_ns)
{
}
# 2146 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void enable_sched_clock_irqtime(void) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void disable_sched_clock_irqtime(void) {}
extern unsigned long long
task_sched_runtime(struct task_struct *task);
extern void sched_exec(void);
extern void sched_clock_idle_sleep_event(void);
extern void sched_clock_idle_wakeup_event(u64 delta_ns);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void idle_task_exit(void) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void wake_up_nohz_cpu(int cpu) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool sched_can_stop_tick(void) { return false; }
# 2192 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sched_autogroup_create_attach(struct task_struct *p) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sched_autogroup_detach(struct task_struct *p) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sched_autogroup_fork(struct signal_struct *sig) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sched_autogroup_exit(struct signal_struct *sig) { }
extern int yield_to(struct task_struct *p, bool preempt);
extern void set_user_nice(struct task_struct *p, long nice);
extern int task_prio(const struct task_struct *p);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int task_nice(const struct task_struct *p)
{
return (((p)->static_prio) - (100 + (19 - -20 + 1) / 2));
}
extern int can_nice(const struct task_struct *p, const int nice);
extern int task_curr(const struct task_struct *p);
extern int idle_cpu(int cpu);
extern int sched_setscheduler(struct task_struct *, int,
const struct sched_param *);
extern int sched_setscheduler_nocheck(struct task_struct *, int,
const struct sched_param *);
extern int sched_setattr(struct task_struct *,
const struct sched_attr *);
extern struct task_struct *idle_task(int cpu);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool is_idle_task(const struct task_struct *p)
{
return p->pid == 0;
}
extern struct task_struct *curr_task(int cpu);
extern void set_curr_task(int cpu, struct task_struct *p);
void yield(void);
extern struct exec_domain default_exec_domain;
union thread_union {
struct thread_info thread_info;
unsigned long stack[(((1UL) << 12) << (2))/sizeof(long)];
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int kstack_end(void *addr)
{
return !(((unsigned long)addr+sizeof(void*)-1) & ((((1UL) << 12) << (2))-sizeof(void*)));
}
extern union thread_union init_thread_union;
extern struct task_struct init_task;
extern struct mm_struct init_mm;
extern struct pid_namespace init_pid_ns;
# 2274 "include/linux/sched.h"
extern struct task_struct *find_task_by_vpid(pid_t nr);
extern struct task_struct *find_task_by_pid_ns(pid_t nr,
struct pid_namespace *ns);
extern struct user_struct * alloc_uid(kuid_t);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct user_struct *get_uid(struct user_struct *u)
{
atomic_add(1, (&u->__count));
return u;
}
extern void free_uid(struct user_struct *);
# 1 "arch/mips/include/generated/asm/current.h" 1
# 2288 "include/linux/sched.h" 2
extern void xtime_update(unsigned long ticks);
extern int wake_up_state(struct task_struct *tsk, unsigned int state);
extern int wake_up_process(struct task_struct *tsk);
extern void wake_up_new_task(struct task_struct *tsk);
extern void kick_process(struct task_struct *tsk);
extern int sched_fork(unsigned long clone_flags, struct task_struct *p);
extern void sched_dead(struct task_struct *p);
extern void proc_caches_init(void);
extern void flush_signals(struct task_struct *);
extern void __flush_signals(struct task_struct *);
extern void ignore_signals(struct task_struct *);
extern void flush_signal_handlers(struct task_struct *, int force_default);
extern int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dequeue_signal_lock(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
{
unsigned long flags;
int ret;
do { do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = _raw_spin_lock_irqsave(spinlock_check(&tsk->sighand->siglock)); } while (0); } while (0);
ret = dequeue_signal(tsk, mask, info);
spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
return ret;
}
extern void block_all_signals(int (*notifier)(void *priv), void *priv,
sigset_t *mask);
extern void unblock_all_signals(void);
extern void release_task(struct task_struct * p);
extern int send_sig_info(int, struct siginfo *, struct task_struct *);
extern int force_sigsegv(int, struct task_struct *);
extern int force_sig_info(int, struct siginfo *, struct task_struct *);
extern int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp);
extern int kill_pid_info(int sig, struct siginfo *info, struct pid *pid);
extern int kill_pid_info_as_cred(int, struct siginfo *, struct pid *,
const struct cred *, u32);
extern int kill_pgrp(struct pid *pid, int sig, int priv);
extern int kill_pid(struct pid *pid, int sig, int priv);
extern int kill_proc_info(int, struct siginfo *, pid_t);
extern __attribute__((warn_unused_result)) bool do_notify_parent(struct task_struct *, int);
extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent);
extern void force_sig(int, struct task_struct *);
extern int send_sig(int, struct task_struct *, int);
extern int zap_other_threads(struct task_struct *p);
extern struct sigqueue *sigqueue_alloc(void);
extern void sigqueue_free(struct sigqueue *);
extern int send_sigqueue(struct sigqueue *, struct task_struct *, int group);
extern int do_sigaction(int, struct k_sigaction *, struct k_sigaction *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void restore_saved_sigmask(void)
{
if (test_and_clear_restore_sigmask())
__set_current_blocked(&(current_thread_info()->task)->saved_sigmask);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) sigset_t *sigmask_to_save(void)
{
sigset_t *res = &(current_thread_info()->task)->blocked;
if (__builtin_expect(!!(test_restore_sigmask()), 0))
res = &(current_thread_info()->task)->saved_sigmask;
return res;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int kill_cad_pid(int sig, int priv)
{
return kill_pid(cad_pid, sig, priv);
}
# 2372 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int on_sig_stack(unsigned long sp)
{
return sp > (current_thread_info()->task)->sas_ss_sp &&
sp - (current_thread_info()->task)->sas_ss_sp <= (current_thread_info()->task)->sas_ss_size;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int sas_ss_flags(unsigned long sp)
{
if (!(current_thread_info()->task)->sas_ss_size)
return 2;
return on_sig_stack(sp) ? 1 : 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long sigsp(unsigned long sp, struct ksignal *ksig)
{
if (__builtin_expect(!!((ksig->ka.sa.sa_flags & 0x08000000)), 0) && ! sas_ss_flags(sp))
return (current_thread_info()->task)->sas_ss_sp + (current_thread_info()->task)->sas_ss_size;
return sp;
}
extern struct mm_struct * mm_alloc(void);
extern void __mmdrop(struct mm_struct *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void mmdrop(struct mm_struct * mm)
{
if (__builtin_expect(!!((atomic_sub_return(1, (&mm->mm_count)) == 0)), 0))
__mmdrop(mm);
}
extern void mmput(struct mm_struct *);
extern struct mm_struct *get_task_mm(struct task_struct *task);
extern struct mm_struct *mm_access(struct task_struct *task, unsigned int mode);
extern void mm_release(struct task_struct *, struct mm_struct *);
extern int copy_thread(unsigned long, unsigned long, unsigned long,
struct task_struct *);
extern void flush_thread(void);
extern void exit_thread(void);
extern void exit_files(struct task_struct *);
extern void __cleanup_sighand(struct sighand_struct *);
extern void exit_itimers(struct signal_struct *);
extern void flush_itimer_signals(void);
extern void do_group_exit(int);
extern int do_execve(struct filename *,
const char * const *,
const char * const *);
extern long do_fork(unsigned long, unsigned long, unsigned long, int *, int *);
struct task_struct *fork_idle(int);
extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
extern void __set_task_comm(struct task_struct *tsk, const char *from, bool exec);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_task_comm(struct task_struct *tsk, const char *from)
{
__set_task_comm(tsk, from, false);
}
extern char *get_task_comm(char *to, struct task_struct *tsk);
void scheduler_ipi(void);
extern unsigned long wait_task_inactive(struct task_struct *, long match_state);
# 2473 "include/linux/sched.h"
extern bool current_is_single_threaded(void);
# 2495 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int get_nr_threads(struct task_struct *tsk)
{
return tsk->signal->nr_threads;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool thread_group_leader(struct task_struct *p)
{
return p->exit_signal >= 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool has_group_leader_pid(struct task_struct *p)
{
return task_pid(p) == p->signal->leader_pid;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
bool same_thread_group(struct task_struct *p1, struct task_struct *p2)
{
return p1->signal == p2->signal;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct task_struct *next_thread(const struct task_struct *p)
{
return ({ typeof(*p->thread_group.next) *__ptr = (typeof(*p->thread_group.next) *)p->thread_group.next; ({ const typeof( ((struct task_struct *)0)->thread_group ) *__mptr = ((typeof(p->thread_group.next))({ typeof(*(__ptr)) *_________p1 = (typeof(*(__ptr)) *)(*(volatile typeof((__ptr)) *)&((__ptr))); do { } while (0); ; do { } while(0); ((typeof(*(__ptr)) *)(_________p1)); })); (struct task_struct *)( (char *)__mptr - __builtin_offsetof(struct task_struct,thread_group) );}); })
;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int thread_group_empty(struct task_struct *p)
{
return list_empty(&p->thread_group);
}
# 2546 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_lock(struct task_struct *p)
{
spin_lock(&p->alloc_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void task_unlock(struct task_struct *p)
{
spin_unlock(&p->alloc_lock);
}
extern struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
unsigned long *flags);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sighand_struct *lock_task_sighand(struct task_struct *tsk,
unsigned long *flags)
{
struct sighand_struct *ret;
ret = __lock_task_sighand(tsk, flags);
(void)(ret);
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void unlock_task_sighand(struct task_struct *tsk,
unsigned long *flags)
{
spin_unlock_irqrestore(&tsk->sighand->siglock, *flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void threadgroup_change_begin(struct task_struct *tsk)
{
down_read(&tsk->signal->group_rwsem);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void threadgroup_change_end(struct task_struct *tsk)
{
up_read(&tsk->signal->group_rwsem);
}
# 2601 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void threadgroup_lock(struct task_struct *tsk)
{
down_write(&tsk->signal->group_rwsem);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void threadgroup_unlock(struct task_struct *tsk)
{
up_write(&tsk->signal->group_rwsem);
}
# 2628 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void setup_thread_stack(struct task_struct *p, struct task_struct *org)
{
*((struct thread_info *)(p)->stack) = *((struct thread_info *)(org)->stack);
((struct thread_info *)(p)->stack)->task = p;
}
# 2643 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long *end_of_stack(struct task_struct *p)
{
return (unsigned long *)(((struct thread_info *)(p)->stack) + 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int object_is_on_stack(void *obj)
{
void *stack = (((current_thread_info()->task))->stack);
return (obj >= stack) && (obj < (stack + (((1UL) << 12) << (2))));
}
extern void thread_info_cache_init(void);
# 2677 "include/linux/sched.h"
extern void set_task_stack_end_magic(struct task_struct *tsk);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_tsk_thread_flag(struct task_struct *tsk, int flag)
{
set_ti_thread_flag(((struct thread_info *)(tsk)->stack), flag);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clear_tsk_thread_flag(struct task_struct *tsk, int flag)
{
clear_ti_thread_flag(((struct thread_info *)(tsk)->stack), flag);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_and_set_tsk_thread_flag(struct task_struct *tsk, int flag)
{
return test_and_set_ti_thread_flag(((struct thread_info *)(tsk)->stack), flag);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_and_clear_tsk_thread_flag(struct task_struct *tsk, int flag)
{
return test_and_clear_ti_thread_flag(((struct thread_info *)(tsk)->stack), flag);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_tsk_thread_flag(struct task_struct *tsk, int flag)
{
return test_ti_thread_flag(((struct thread_info *)(tsk)->stack), flag);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void set_tsk_need_resched(struct task_struct *tsk)
{
set_tsk_thread_flag(tsk,2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void clear_tsk_need_resched(struct task_struct *tsk)
{
clear_tsk_thread_flag(tsk,2);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int test_tsk_need_resched(struct task_struct *tsk)
{
return __builtin_expect(!!(test_tsk_thread_flag(tsk,2)), 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int restart_syscall(void)
{
set_tsk_thread_flag((current_thread_info()->task), 1);
return -513;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int signal_pending(struct task_struct *p)
{
return __builtin_expect(!!(test_tsk_thread_flag(p,1)), 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __fatal_signal_pending(struct task_struct *p)
{
return __builtin_expect(!!(sigismember(&p->pending.signal, 9)), 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int fatal_signal_pending(struct task_struct *p)
{
return signal_pending(p) && __fatal_signal_pending(p);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int signal_pending_state(long state, struct task_struct *p)
{
if (!(state & (1 | 128)))
return 0;
if (!signal_pending(p))
return 0;
return (state & 1) || __fatal_signal_pending(p);
}
# 2760 "include/linux/sched.h"
extern int _cond_resched(void);
extern int __cond_resched_lock(spinlock_t *lock);
# 2780 "include/linux/sched.h"
extern int __cond_resched_softirq(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void cond_resched_rcu(void)
{
rcu_read_unlock();
({ __might_sleep("include/linux/sched.h", 2791, 0); _cond_resched(); });
rcu_read_lock();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int spin_needbreak(spinlock_t *lock)
{
return 0;
}
# 2857 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int tsk_is_polling(struct task_struct *p) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __current_set_polling(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __current_clr_polling(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __attribute__((warn_unused_result)) current_set_polling_and_test(void)
{
return __builtin_expect(!!(test_ti_thread_flag(current_thread_info(), 2)), 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __attribute__((warn_unused_result)) current_clr_polling_and_test(void)
{
return __builtin_expect(!!(test_ti_thread_flag(current_thread_info(), 2)), 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void current_clr_polling(void)
{
__current_clr_polling();
__asm__ __volatile__("": : :"memory");
do { if (test_ti_thread_flag(current_thread_info(), 2)) set_preempt_need_resched(); } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __attribute__((always_inline)) bool need_resched(void)
{
return __builtin_expect(!!(test_ti_thread_flag(current_thread_info(), 2)), 0);
}
void thread_group_cputime(struct task_struct *tsk, struct task_cputime *times);
void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void thread_group_cputime_init(struct signal_struct *sig)
{
do { *(&sig->cputimer.lock) = (raw_spinlock_t) { .raw_lock = { .lock = 0 }, }; } while (0);
}
extern void recalc_sigpending_and_wake(struct task_struct *t);
extern void recalc_sigpending(void);
extern void signal_wake_up_state(struct task_struct *t, unsigned int state);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void signal_wake_up(struct task_struct *t, bool resume)
{
signal_wake_up_state(t, resume ? 128 : 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ptrace_signal_wake_up(struct task_struct *t, bool resume)
{
signal_wake_up_state(t, resume ? 8 : 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int task_cpu(const struct task_struct *p)
{
return ((struct thread_info *)(p)->stack)->cpu;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int task_node(const struct task_struct *p)
{
return ((void)(task_cpu(p)),0);
}
extern void set_task_cpu(struct task_struct *p, unsigned int cpu);
# 2952 "include/linux/sched.h"
extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask);
extern long sched_getaffinity(pid_t pid, struct cpumask *mask);
extern struct task_group root_task_group;
extern int task_can_switch_user(struct user_struct *up,
struct task_struct *tsk);
# 2983 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void add_rchar(struct task_struct *tsk, ssize_t amt)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void add_wchar(struct task_struct *tsk, ssize_t amt)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void inc_syscr(struct task_struct *tsk)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void inc_syscw(struct task_struct *tsk)
{
}
# 3007 "include/linux/sched.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void mm_update_next_owner(struct mm_struct *mm)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long task_rlimit(const struct task_struct *tsk,
unsigned int limit)
{
return (*(volatile typeof(tsk->signal->rlim[limit].rlim_cur) *)&(tsk->signal->rlim[limit].rlim_cur));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long task_rlimit_max(const struct task_struct *tsk,
unsigned int limit)
{
return (*(volatile typeof(tsk->signal->rlim[limit].rlim_max) *)&(tsk->signal->rlim[limit].rlim_max));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long rlimit(unsigned int limit)
{
return task_rlimit((current_thread_info()->task), limit);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long rlimit_max(unsigned int limit)
{
return task_rlimit_max((current_thread_info()->task), limit);
}
# 35 "include/linux/skbuff.h" 2
# 1 "include/net/flow_keys.h" 1
# 17 "include/net/flow_keys.h"
struct flow_keys {
__be32 src;
__be32 dst;
union {
__be32 ports;
__be16 port16[2];
};
u16 thoff;
u16 n_proto;
u8 ip_proto;
};
bool __skb_flow_dissect(const struct sk_buff *skb, struct flow_keys *flow,
void *data, __be16 proto, int nhoff, int hlen);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_flow_dissect(const struct sk_buff *skb, struct flow_keys *flow)
{
return __skb_flow_dissect(skb, flow, ((void *)0), 0, 0, 0);
}
__be32 __skb_flow_get_ports(const struct sk_buff *skb, int thoff, u8 ip_proto,
void *data, int hlen_proto);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __be32 skb_flow_get_ports(const struct sk_buff *skb, int thoff, u8 ip_proto)
{
return __skb_flow_get_ports(skb, thoff, ip_proto, ((void *)0), 0);
}
u32 flow_hash_from_keys(struct flow_keys *keys);
unsigned int flow_get_hlen(const unsigned char *data, unsigned int max_len,
__be16 protocol);
# 36 "include/linux/skbuff.h" 2
# 1 "include/linux/ecnt_skbuff.h" 1
# 24 "include/linux/ecnt_skbuff.h"
# 1 "include/linux/foe_hook.h" 1
# 1 "include/uapi/linux/foe_hook.h" 1
struct SkbFoeInfo{
unsigned short ppe_magic;
unsigned short ppe_foe_entry;
unsigned char ppe_ai;
};
# 4 "include/linux/foe_hook.h" 2
# 56 "include/linux/foe_hook.h"
struct port_info {
unsigned long int txq:4;
unsigned long int channel:8;
unsigned long int tsid:8;
unsigned long int atm_pppoa:1;
unsigned long int atm_ipoa:1;
unsigned long int atm_vc_mux:1;
unsigned long int eth_macSTagEn:1;
unsigned long int eth_is_wan:1;
unsigned long int ds_to_qdma:1;
unsigned long int ds_need_offload:1;
unsigned long int resv0:4;
unsigned long int txq_is_valid:1;
unsigned long int stag:16;
unsigned long int magic:16;
};
# 97 "include/linux/foe_hook.h"
typedef enum {
WAN_MODE_PON = 0,
WAN_MODE_ETHER,
} Wan_Mode;
struct sk_buff;
extern int (*ra_sw_nat_hook_rx) (struct sk_buff * skb);
extern int (*ra_sw_nat_ds_offload)(struct sk_buff *skb, int *dp);
extern int (*ra_sw_nat_hook_update_dp)(int index, int dp);
extern int (*ra_sw_nat_hook_update_vlan)(int index,int outer_vlan,int inner_vlan);
extern int (*ra_sw_nat_hook_save_rxinfo)(struct sk_buff *skb);
extern int (*ra_sw_nat_hook_restore_rxinfo)(struct sk_buff *skb);
extern int (*ra_sw_nat_hook_is_hwnat_pkt)(struct sk_buff *skb);
extern int (*ra_sw_nat_hook_sendto_ppe)(struct sk_buff *skb);
extern int (*ra_sw_nat_hook_tx) (struct sk_buff * skb, struct port_info * pinfo, int magic);
extern int (*ra_sw_nat_hook_free) (struct sk_buff * skb);
extern int (*ra_sw_nat_hook_rxinfo) (struct sk_buff * skb, int magic, char *data, int data_length);
extern int (*ra_sw_nat_hook_txq) (struct sk_buff * skb, int txq);
extern int (*ra_sw_nat_hook_magic) (struct sk_buff * skb, int magic);
extern int (*ra_sw_nat_hook_set_magic) (struct sk_buff * skb, int magic);
extern int (*ra_sw_nat_hook_xfer) (struct sk_buff *skb, const struct sk_buff *prev_p);
extern int (*ra_sw_nat_hook_foeentry) (void * inputvalue,int operation);
extern int (*ra_sw_nat_hook_is_alive_pkt)(unsigned int crsn);
extern int (*MT7530LanPortMap2Switch_hook)(int port);
extern int (*ra_sw_nat_hook_drop_packet) (struct sk_buff * skb);
extern int (*ra_sw_nat_hook_clean_table) (void);
extern void (*restore_offload_info_hook)(struct sk_buff *skb, struct port_info *pinfo, int magic);
# 25 "include/linux/ecnt_skbuff.h" 2
extern void skbmgr_4k_pool_init(void);
extern void skbmgr_pool_init(void);
extern atomic_t g_used_skb_num;
extern int g_max_skb_num;
extern int peak_skb_num;
# 48 "include/linux/ecnt_skbuff.h"
extern atomic_t skbmgr_alloc_no;
extern atomic_t skbmgr_4k_alloc_no;
# 237 "include/linux/ecnt_skbuff.h"
struct ecnt_sk_buff {
};
typedef struct ecnt_sk_buff ecnt_sk_buff_t;
# 263 "include/linux/ecnt_skbuff.h"
typedef struct IGMP_HWNATEntry_s
{
struct list_head list;
struct callback_head rcu;
int proto;
int index;
unsigned long mask;
unsigned char wifinum;
unsigned char grp_addr[16];
unsigned char src_addr[16];
struct timer_list age_timer;
}IGMP_HWNATEntry_t;
typedef struct
{
struct list_head list;
int index;
unsigned long port_mask;
}multicast_flood_hwentry_t;
# 37 "include/linux/skbuff.h" 2
# 148 "include/linux/skbuff.h"
struct net_device;
struct scatterlist;
struct pipe_inode_info;
struct nf_conntrack {
atomic_t use;
__u16 lVlanId;
};
# 169 "include/linux/skbuff.h"
struct sk_buff_head {
struct sk_buff *next;
struct sk_buff *prev;
__u32 qlen;
spinlock_t lock;
};
struct sk_buff;
# 193 "include/linux/skbuff.h"
typedef struct skb_frag_struct skb_frag_t;
struct skb_frag_struct {
struct {
struct page *p;
} page;
__u16 page_offset;
__u16 size;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int skb_frag_size(const skb_frag_t *frag)
{
return frag->size;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_frag_size_set(skb_frag_t *frag, unsigned int size)
{
frag->size = size;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_frag_size_add(skb_frag_t *frag, int delta)
{
frag->size += delta;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_frag_size_sub(skb_frag_t *frag, int delta)
{
frag->size -= delta;
}
# 244 "include/linux/skbuff.h"
struct skb_shared_hwtstamps {
ktime_t hwtstamp;
};
enum {
SKBTX_HW_TSTAMP = 1 << 0,
SKBTX_SW_TSTAMP = 1 << 1,
SKBTX_IN_PROGRESS = 1 << 2,
SKBTX_DEV_ZEROCOPY = 1 << 3,
SKBTX_WIFI_STATUS = 1 << 4,
SKBTX_SHARED_FRAG = 1 << 5,
SKBTX_SCHED_TSTAMP = 1 << 6,
SKBTX_ACK_TSTAMP = 1 << 7,
};
# 292 "include/linux/skbuff.h"
struct ubuf_info {
void (*callback)(struct ubuf_info *, bool zerocopy_success);
void *ctx;
unsigned long desc;
};
struct skb_shared_info {
unsigned char nr_frags;
__u8 tx_flags;
unsigned short gso_size;
unsigned short gso_segs;
unsigned short gso_type;
struct sk_buff *frag_list;
struct skb_shared_hwtstamps hwtstamps;
u32 tskey;
__be32 ip6_frag_id;
atomic_t dataref;
void * destructor_arg;
skb_frag_t frags[(65536/((1UL) << 12) + 1)];
};
# 341 "include/linux/skbuff.h"
enum {
SKB_FCLONE_UNAVAILABLE,
SKB_FCLONE_ORIG,
SKB_FCLONE_CLONE,
SKB_FCLONE_FREE,
};
enum {
SKB_GSO_TCPV4 = 1 << 0,
SKB_GSO_UDP = 1 << 1,
SKB_GSO_DODGY = 1 << 2,
SKB_GSO_TCP_ECN = 1 << 3,
SKB_GSO_TCPV6 = 1 << 4,
SKB_GSO_FCOE = 1 << 5,
SKB_GSO_GRE = 1 << 6,
SKB_GSO_GRE_CSUM = 1 << 7,
SKB_GSO_IPIP = 1 << 8,
SKB_GSO_SIT = 1 << 9,
SKB_GSO_UDP_TUNNEL = 1 << 10,
SKB_GSO_UDP_TUNNEL_CSUM = 1 << 11,
SKB_GSO_MPLS = 1 << 12,
};
# 385 "include/linux/skbuff.h"
typedef unsigned char *sk_buff_data_t;
struct skb_mstamp {
union {
u64 v64;
struct {
u32 stamp_us;
u32 stamp_jiffies;
};
};
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_mstamp_get(struct skb_mstamp *cl)
{
u64 val = local_clock();
({ uint32_t __base = (1000L); uint32_t __rem; (void)(((typeof((val)) *)0) == ((uint64_t *)0)); if (__builtin_expect(!!(((val) >> 32) == 0), 1)) { __rem = (uint32_t)(val) % __base; (val) = (uint32_t)(val) / __base; } else __rem = __div64_32(&(val), __base); __rem; });
cl->stamp_us = (u32)val;
cl->stamp_jiffies = (u32)jiffies;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 skb_mstamp_us_delta(const struct skb_mstamp *t1,
const struct skb_mstamp *t0)
{
s32 delta_us = t1->stamp_us - t0->stamp_us;
u32 delta_jiffies = t1->stamp_jiffies - t0->stamp_jiffies;
if (delta_us <= 0 ||
delta_jiffies >= (((int)(~0U>>1)) / (1000000L / 100)))
delta_us = jiffies_to_usecs(delta_jiffies);
return delta_us;
}
struct kdebug_hooks {
void (*dumpPackage)(const struct sk_buff *skb,
const char *msg,
const char *func,
unsigned int line);
void (*dumpConntrack)(const void *ct,
const char *msg,
const char *func,
unsigned int line);
void (*dumpTuple)(const void *t,
const char *msg,
const char *func,
unsigned int line) ;
void (*print)(const struct sk_buff *skb,
const char *func,
unsigned int line,
const char * format, ...);
void (*xprint)(const struct sk_buff *skb,
const char *func,
unsigned int line,
const char * format, ...);
};
extern const struct kdebug_hooks *kdebug_hooks;
# 533 "include/linux/skbuff.h"
struct sk_buff {
struct sk_buff *next;
struct sk_buff *prev;
union {
ktime_t tstamp;
struct skb_mstamp skb_mstamp;
};
struct sock *sk;
struct net_device *dev;
char cb[48] __attribute__((aligned(8)));
unsigned long _skb_refdst;
void (*destructor)(struct sk_buff *skb);
struct sec_path *sp;
struct nf_conntrack *nfct;
unsigned int len,
data_len;
__u16 mac_len,
hdr_len;
;
__u16 queue_mapping;
__u8 cloned:1,
nohdr:1,
fclone:2,
peeked:1,
head_frag:1,
xmit_more:1;
;
__u32 headers_start[0];
# 599 "include/linux/skbuff.h"
__u8 __pkt_type_offset[0];
__u8 pkt_type:3;
__u8 pfmemalloc:1;
__u8 ignore_df:1;
__u8 nfctinfo:3;
__u8 nf_trace:1;
__u8 ip_summed:2;
__u8 ooo_okay:1;
__u8 l4_hash:1;
__u8 sw_hash:1;
__u8 wifi_acked_valid:1;
__u8 wifi_acked:1;
__u8 no_fcs:1;
__u8 encapsulation:1;
__u8 encap_hdr_csum:1;
__u8 csum_valid:1;
__u8 csum_complete_sw:1;
__u8 csum_level:2;
__u8 csum_bad:1;
__u8 ndisc_nodetype:2;
__u8 ipvs_property:1;
__u8 inner_protocol_type:1;
# 636 "include/linux/skbuff.h"
union {
__wsum csum;
struct {
__u16 csum_start;
__u16 csum_offset;
};
};
__u32 priority;
int skb_iif;
__u32 hash;
__be16 vlan_proto;
__u16 vlan_tci;
unsigned int napi_id;
# 659 "include/linux/skbuff.h"
__u32 mark;
__u32 dropcount;
__u32 reserved_tailroom;
union {
__be16 inner_protocol;
__u8 inner_ipproto;
};
__u16 inner_transport_header;
__u16 inner_network_header;
__u16 inner_mac_header;
__be16 protocol;
__u16 transport_header;
__u16 network_header;
__u16 mac_header;
__u32 headers_end[0];
int (*skb_recycling_callback)(struct sk_buff *skb);
int skb_recycling_ind;
char foe[8];
__u8 bridge_flag;
union{
struct{
__u16 gem_type : 1 ;
__u16 gem_port :12 ;
__u16 : 3 ;
};
struct{
__u8 epon_queue ;
__u8 epon_pbit ;
};
__u16 xpon_raw_info ;
};
__u8 pon_mark ;
__u8 v_if ;
__u32 pon_vlan_flag;
struct net_device * original_dev;
__u32 pon_mac_filter_flag;
__u16 vlan_tags[2];
__u32 vlan_tag_flag;
__u16 pon_vlan_tpid[4];
__u16 pon_vlan_tci[4];
__u8 pon_tag_num;
__u32 xpon_igmp_flag;
__u32 portbind_mark;
struct net_device *orig_dev;
# 736 "include/linux/skbuff.h"
__u8 ppe_info_flag;
__u16 ppe_magic;
__u8 ppe_ai;
__u16 ppe_foe_entry;
__u16 lan_vlan_tci;
__u8 lan_vlan_tci_valid;
__u8 qosEnque;
ecnt_sk_buff_t ecnt_sk_buff;
sk_buff_data_t tail;
sk_buff_data_t end;
unsigned char *head,
*data;
unsigned int truesize;
atomic_t users;
};
# 770 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_pfmemalloc(const struct sk_buff *skb)
{
return __builtin_expect(!!(skb->pfmemalloc), 0);
}
# 788 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dst_entry *skb_dst(const struct sk_buff *skb)
{
({ int __ret_warn_on = !!((skb->_skb_refdst & 1UL) && !rcu_read_lock_held() && !rcu_read_lock_bh_held()); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null(
"include/linux/skbuff.h"
# 793 "include/linux/skbuff.h"
,
795
# 793 "include/linux/skbuff.h"
); __builtin_expect(!!(__ret_warn_on), 0); })
;
return (struct dst_entry *)(skb->_skb_refdst & ~(1UL));
}
# 807 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst)
{
skb->_skb_refdst = (unsigned long)dst;
}
void __skb_dst_set_noref(struct sk_buff *skb, struct dst_entry *dst,
bool force);
# 825 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_dst_set_noref(struct sk_buff *skb, struct dst_entry *dst)
{
__skb_dst_set_noref(skb, dst, false);
}
# 841 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_dst_set_noref_force(struct sk_buff *skb,
struct dst_entry *dst)
{
__skb_dst_set_noref(skb, dst, true);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_dst_is_noref(const struct sk_buff *skb)
{
return (skb->_skb_refdst & 1UL) && skb_dst(skb);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct rtable *skb_rtable(const struct sk_buff *skb)
{
return (struct rtable *)skb_dst(skb);
}
void kfree_skb(struct sk_buff *skb);
void kfree_skb_list(struct sk_buff *segs);
void skb_tx_error(struct sk_buff *skb);
void consume_skb(struct sk_buff *skb);
void __kfree_skb(struct sk_buff *skb);
extern struct kmem_cache *skbuff_head_cache;
void kfree_skb_partial(struct sk_buff *skb, bool head_stolen);
bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from,
bool *fragstolen, int *delta_truesize);
struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags,
int node);
struct sk_buff *__build_skb(void *data, unsigned int frag_size);
struct sk_buff *build_skb(void *data, unsigned int frag_size);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *alloc_skb(unsigned int size,
gfp_t priority)
{
return __alloc_skb(size, priority, 0, (-1));
}
struct sk_buff *alloc_skb_with_frags(unsigned long header_len,
unsigned long data_len,
int max_page_order,
int *errcode,
gfp_t gfp_mask);
struct sk_buff_fclones {
struct sk_buff skb1;
struct sk_buff skb2;
atomic_t fclone_ref;
};
# 905 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_fclone_busy(const struct sock *sk,
const struct sk_buff *skb)
{
const struct sk_buff_fclones *fclones;
fclones = ({ const typeof( ((struct sk_buff_fclones *)0)->skb1 ) *__mptr = (skb); (struct sk_buff_fclones *)( (char *)__mptr - __builtin_offsetof(struct sk_buff_fclones,skb1) );});
return skb->fclone == SKB_FCLONE_ORIG &&
fclones->skb2.fclone == SKB_FCLONE_CLONE &&
fclones->skb2.sk == sk;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *alloc_skb_fclone(unsigned int size,
gfp_t priority)
{
return __alloc_skb(size, priority, 0x01, (-1));
}
struct sk_buff *__alloc_skb_head(gfp_t priority, int node);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *alloc_skb_head(gfp_t priority)
{
return __alloc_skb_head(priority, -1);
}
struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src);
int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask);
struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t priority);
struct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t priority);
struct sk_buff *__pskb_copy_fclone(struct sk_buff *skb, int headroom,
gfp_t gfp_mask, bool fclone);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *__pskb_copy(struct sk_buff *skb, int headroom,
gfp_t gfp_mask)
{
return __pskb_copy_fclone(skb, headroom, gfp_mask, false);
}
int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail, gfp_t gfp_mask);
struct sk_buff *skb_realloc_headroom(struct sk_buff *skb,
unsigned int headroom);
struct sk_buff *skb_copy_expand(const struct sk_buff *skb, int newheadroom,
int newtailroom, gfp_t priority);
int skb_to_sgvec_nomark(struct sk_buff *skb, struct scatterlist *sg,
int offset, int len);
int skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset,
int len);
int skb_cow_data(struct sk_buff *skb, int tailbits, struct sk_buff **trailer);
int skb_pad(struct sk_buff *skb, int pad);
int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb,
int getfrag(void *from, char *to, int offset,
int len, int odd, struct sk_buff *skb),
void *from, int length);
struct skb_seq_state {
__u32 lower_offset;
__u32 upper_offset;
__u32 frag_idx;
__u32 stepped_offset;
struct sk_buff *root_skb;
struct sk_buff *cur_skb;
__u8 *frag_data;
};
void skb_prepare_seq_read(struct sk_buff *skb, unsigned int from,
unsigned int to, struct skb_seq_state *st);
unsigned int skb_seq_read(unsigned int consumed, const u8 **data,
struct skb_seq_state *st);
void skb_abort_seq_read(struct skb_seq_state *st);
unsigned int skb_find_text(struct sk_buff *skb, unsigned int from,
unsigned int to, struct ts_config *config,
struct ts_state *state);
# 1005 "include/linux/skbuff.h"
enum pkt_hash_types {
PKT_HASH_TYPE_NONE,
PKT_HASH_TYPE_L2,
PKT_HASH_TYPE_L3,
PKT_HASH_TYPE_L4,
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
skb_set_hash(struct sk_buff *skb, __u32 hash, enum pkt_hash_types type)
{
skb->l4_hash = (type == PKT_HASH_TYPE_L4);
skb->sw_hash = 0;
skb->hash = hash;
}
void __skb_get_hash(struct sk_buff *skb);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 skb_get_hash(struct sk_buff *skb)
{
if (!skb->l4_hash && !skb->sw_hash)
__skb_get_hash(skb);
return skb->hash;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 skb_get_hash_raw(const struct sk_buff *skb)
{
return skb->hash;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_clear_hash(struct sk_buff *skb)
{
skb->hash = 0;
skb->sw_hash = 0;
skb->l4_hash = 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_clear_hash_if_not_l4(struct sk_buff *skb)
{
if (!skb->l4_hash)
skb_clear_hash(skb);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_copy_hash(struct sk_buff *to, const struct sk_buff *from)
{
to->hash = from->hash;
to->sw_hash = from->sw_hash;
to->l4_hash = from->l4_hash;
};
# 1065 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *skb_end_pointer(const struct sk_buff *skb)
{
return skb->end;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int skb_end_offset(const struct sk_buff *skb)
{
return skb->end - skb->head;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct skb_shared_hwtstamps *skb_hwtstamps(struct sk_buff *skb)
{
return &((struct skb_shared_info *)(skb_end_pointer(skb)))->hwtstamps;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_queue_empty(const struct sk_buff_head *list)
{
return list->next == (const struct sk_buff *) list;
}
# 1102 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_queue_is_last(const struct sk_buff_head *list,
const struct sk_buff *skb)
{
return skb->next == (const struct sk_buff *) list;
}
# 1115 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_queue_is_first(const struct sk_buff_head *list,
const struct sk_buff *skb)
{
return skb->prev == (const struct sk_buff *) list;
}
# 1129 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *skb_queue_next(const struct sk_buff_head *list,
const struct sk_buff *skb)
{
__BUG_ON((unsigned long)(skb_queue_is_last(list, skb)));
return skb->next;
}
# 1147 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *skb_queue_prev(const struct sk_buff_head *list,
const struct sk_buff *skb)
{
__BUG_ON((unsigned long)(skb_queue_is_first(list, skb)));
return skb->prev;
}
# 1164 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *skb_get(struct sk_buff *skb)
{
atomic_add(1, (&skb->users));
return skb;
}
# 1183 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_cloned(const struct sk_buff *skb)
{
return skb->cloned &&
((*(volatile typeof((&((struct skb_shared_info *)(skb_end_pointer(skb)))->dataref)->counter) *)&((&((struct skb_shared_info *)(skb_end_pointer(skb)))->dataref)->counter)) & ((1 << 16) - 1)) != 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_unclone(struct sk_buff *skb, gfp_t pri)
{
do { if (pri & (( gfp_t)0x10u)) do { do { } while (0); } while (0); } while (0);
if (skb_cloned(skb))
return pskb_expand_head(skb, 0, 0, pri);
return 0;
}
# 1206 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_header_cloned(const struct sk_buff *skb)
{
int dataref;
if (!skb->cloned)
return 0;
dataref = (*(volatile typeof((&((struct skb_shared_info *)(skb_end_pointer(skb)))->dataref)->counter) *)&((&((struct skb_shared_info *)(skb_end_pointer(skb)))->dataref)->counter));
dataref = (dataref & ((1 << 16) - 1)) - (dataref >> 16);
return dataref != 1;
}
# 1227 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_header_release(struct sk_buff *skb)
{
__BUG_ON((unsigned long)(skb->nohdr));
skb->nohdr = 1;
atomic_add(1 << 16, &((struct skb_shared_info *)(skb_end_pointer(skb)))->dataref);
}
# 1241 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_header_release(struct sk_buff *skb)
{
skb->nohdr = 1;
((&((struct skb_shared_info *)(skb_end_pointer(skb)))->dataref)->counter = (1 + (1 << 16)));
}
# 1255 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_shared(const struct sk_buff *skb)
{
return (*(volatile typeof((&skb->users)->counter) *)&((&skb->users)->counter)) != 1;
}
# 1273 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *skb_share_check(struct sk_buff *skb, gfp_t pri)
{
do { if (pri & (( gfp_t)0x10u)) do { do { } while (0); } while (0); } while (0);
if (skb_shared(skb)) {
struct sk_buff *nskb = skb_clone(skb, pri);
if (__builtin_expect(!!(nskb), 1))
consume_skb(skb);
else
kfree_skb(skb);
skb = nskb;
}
return skb;
}
# 1308 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *skb_unshare(struct sk_buff *skb,
gfp_t pri)
{
do { if (pri & (( gfp_t)0x10u)) do { do { } while (0); } while (0); } while (0);
if (skb_cloned(skb)) {
struct sk_buff *nskb = skb_copy(skb, pri);
if (__builtin_expect(!!(nskb), 1))
consume_skb(skb);
else
kfree_skb(skb);
skb = nskb;
}
return skb;
}
# 1338 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *skb_peek(const struct sk_buff_head *list_)
{
struct sk_buff *skb = list_->next;
if (skb == (struct sk_buff *)list_)
skb = ((void *)0);
return skb;
}
# 1356 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *skb_peek_next(struct sk_buff *skb,
const struct sk_buff_head *list_)
{
struct sk_buff *next = skb->next;
if (next == (struct sk_buff *)list_)
next = ((void *)0);
return next;
}
# 1379 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *skb_peek_tail(const struct sk_buff_head *list_)
{
struct sk_buff *skb = list_->prev;
if (skb == (struct sk_buff *)list_)
skb = ((void *)0);
return skb;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 skb_queue_len(const struct sk_buff_head *list_)
{
return list_->qlen;
}
# 1410 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_queue_head_init(struct sk_buff_head *list)
{
list->prev = list->next = (struct sk_buff *)list;
list->qlen = 0;
}
# 1424 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_queue_head_init(struct sk_buff_head *list)
{
do { spinlock_check(&list->lock); do { *(&(&list->lock)->rlock) = (raw_spinlock_t) { .raw_lock = { .lock = 0 }, }; } while (0); } while (0);
__skb_queue_head_init(list);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_queue_head_init_class(struct sk_buff_head *list,
struct lock_class_key *class)
{
skb_queue_head_init(list);
do { (void)(class); } while (0);
}
void skb_insert(struct sk_buff *old, struct sk_buff *newsk,
struct sk_buff_head *list);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_insert(struct sk_buff *newsk,
struct sk_buff *prev, struct sk_buff *next,
struct sk_buff_head *list)
{
newsk->next = next;
newsk->prev = prev;
next->prev = prev->next = newsk;
list->qlen++;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_queue_splice(const struct sk_buff_head *list,
struct sk_buff *prev,
struct sk_buff *next)
{
struct sk_buff *first = list->next;
struct sk_buff *last = list->prev;
first->prev = prev;
prev->next = first;
last->next = next;
next->prev = last;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_queue_splice(const struct sk_buff_head *list,
struct sk_buff_head *head)
{
if (!skb_queue_empty(list)) {
__skb_queue_splice(list, (struct sk_buff *) head, head->next);
head->qlen += list->qlen;
}
}
# 1490 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_queue_splice_init(struct sk_buff_head *list,
struct sk_buff_head *head)
{
if (!skb_queue_empty(list)) {
__skb_queue_splice(list, (struct sk_buff *) head, head->next);
head->qlen += list->qlen;
__skb_queue_head_init(list);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_queue_splice_tail(const struct sk_buff_head *list,
struct sk_buff_head *head)
{
if (!skb_queue_empty(list)) {
__skb_queue_splice(list, head->prev, (struct sk_buff *) head);
head->qlen += list->qlen;
}
}
# 1522 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_queue_splice_tail_init(struct sk_buff_head *list,
struct sk_buff_head *head)
{
if (!skb_queue_empty(list)) {
__skb_queue_splice(list, head->prev, (struct sk_buff *) head);
head->qlen += list->qlen;
__skb_queue_head_init(list);
}
}
# 1543 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_queue_after(struct sk_buff_head *list,
struct sk_buff *prev,
struct sk_buff *newsk)
{
__skb_insert(newsk, prev, prev->next, list);
}
void skb_append(struct sk_buff *old, struct sk_buff *newsk,
struct sk_buff_head *list);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_queue_before(struct sk_buff_head *list,
struct sk_buff *next,
struct sk_buff *newsk)
{
__skb_insert(newsk, next->prev, next, list);
}
# 1570 "include/linux/skbuff.h"
void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_queue_head(struct sk_buff_head *list,
struct sk_buff *newsk)
{
__skb_queue_after(list, (struct sk_buff *)list, newsk);
}
# 1587 "include/linux/skbuff.h"
void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_queue_tail(struct sk_buff_head *list,
struct sk_buff *newsk)
{
__skb_queue_before(list, (struct sk_buff *)list, newsk);
}
void skb_unlink(struct sk_buff *skb, struct sk_buff_head *list);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list)
{
struct sk_buff *next, *prev;
list->qlen--;
next = skb->next;
prev = skb->prev;
skb->next = skb->prev = ((void *)0);
next->prev = prev;
prev->next = next;
}
# 1619 "include/linux/skbuff.h"
struct sk_buff *skb_dequeue(struct sk_buff_head *list);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *__skb_dequeue(struct sk_buff_head *list)
{
struct sk_buff *skb = skb_peek(list);
if (skb)
__skb_unlink(skb, list);
return skb;
}
# 1636 "include/linux/skbuff.h"
struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list)
{
struct sk_buff *skb = skb_peek_tail(list);
if (skb)
__skb_unlink(skb, list);
return skb;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_is_nonlinear(const struct sk_buff *skb)
{
return skb->data_len;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int skb_headlen(const struct sk_buff *skb)
{
return skb->len - skb->data_len;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_pagelen(const struct sk_buff *skb)
{
int i, len = 0;
for (i = (int)((struct skb_shared_info *)(skb_end_pointer(skb)))->nr_frags - 1; i >= 0; i--)
len += skb_frag_size(&((struct skb_shared_info *)(skb_end_pointer(skb)))->frags[i]);
return len + skb_headlen(skb);
}
# 1678 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_fill_page_desc(struct sk_buff *skb, int i,
struct page *page, int off, int size)
{
skb_frag_t *frag = &((struct skb_shared_info *)(skb_end_pointer(skb)))->frags[i];
# 1692 "include/linux/skbuff.h"
frag->page.p = page;
frag->page_offset = off;
skb_frag_size_set(frag, size);
page = compound_head(page);
if (page->pfmemalloc && !page->mapping)
skb->pfmemalloc = true;
}
# 1715 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_fill_page_desc(struct sk_buff *skb, int i,
struct page *page, int off, int size)
{
__skb_fill_page_desc(skb, i, page, off, size);
((struct skb_shared_info *)(skb_end_pointer(skb)))->nr_frags = i + 1;
}
void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page, int off,
int size, unsigned int truesize);
void skb_coalesce_rx_frag(struct sk_buff *skb, int i, int size,
unsigned int truesize);
# 1750 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *skb_tail_pointer(const struct sk_buff *skb)
{
return skb->tail;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_reset_tail_pointer(struct sk_buff *skb)
{
skb->tail = skb->data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_set_tail_pointer(struct sk_buff *skb, const int offset)
{
skb->tail = skb->data + offset;
}
unsigned char *pskb_put(struct sk_buff *skb, struct sk_buff *tail, int len);
unsigned char *skb_put(struct sk_buff *skb, unsigned int len);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *__skb_put(struct sk_buff *skb, unsigned int len)
{
unsigned char *tmp = skb_tail_pointer(skb);
__BUG_ON((unsigned long)(skb_is_nonlinear(skb)));
skb->tail += len;
skb->len += len;
return tmp;
}
unsigned char *skb_push(struct sk_buff *skb, unsigned int len);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *__skb_push(struct sk_buff *skb, unsigned int len)
{
skb->data -= len;
skb->len += len;
return skb->data;
}
unsigned char *skb_pull(struct sk_buff *skb, unsigned int len);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len)
{
skb->len -= len;
__BUG_ON((unsigned long)(skb->len < skb->data_len));
return skb->data += len;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *skb_pull_inline(struct sk_buff *skb, unsigned int len)
{
return __builtin_expect(!!(len > skb->len), 0) ? ((void *)0) : __skb_pull(skb, len);
}
unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len)
{
if (len > skb_headlen(skb) &&
!__pskb_pull_tail(skb, len - skb_headlen(skb)))
return ((void *)0);
skb->len -= len;
return skb->data += len;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *pskb_pull(struct sk_buff *skb, unsigned int len)
{
return __builtin_expect(!!(len > skb->len), 0) ? ((void *)0) : __pskb_pull(skb, len);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pskb_may_pull(struct sk_buff *skb, unsigned int len)
{
if (__builtin_expect(!!(len <= skb_headlen(skb)), 1))
return 1;
if (__builtin_expect(!!(len > skb->len), 0))
return 0;
return __pskb_pull_tail(skb, len - skb_headlen(skb)) != ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int skb_headroom(const struct sk_buff *skb)
{
return skb->data - skb->head;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_tailroom(const struct sk_buff *skb)
{
return skb_is_nonlinear(skb) ? 0 : skb->end - skb->tail;
}
# 1856 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_availroom(const struct sk_buff *skb)
{
if (skb_is_nonlinear(skb))
return 0;
return skb->end - skb->tail - skb->reserved_tailroom;
}
# 1872 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_reserve(struct sk_buff *skb, int len)
{
skb->data += len;
skb->tail += len;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_set_inner_protocol(struct sk_buff *skb,
__be16 protocol)
{
skb->inner_protocol = protocol;
skb->inner_protocol_type = 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_set_inner_ipproto(struct sk_buff *skb,
__u8 ipproto)
{
skb->inner_ipproto = ipproto;
skb->inner_protocol_type = 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_reset_inner_headers(struct sk_buff *skb)
{
skb->inner_mac_header = skb->mac_header;
skb->inner_network_header = skb->network_header;
skb->inner_transport_header = skb->transport_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_reset_mac_len(struct sk_buff *skb)
{
skb->mac_len = skb->network_header - skb->mac_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *skb_inner_transport_header(const struct sk_buff
*skb)
{
return skb->head + skb->inner_transport_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_reset_inner_transport_header(struct sk_buff *skb)
{
skb->inner_transport_header = skb->data - skb->head;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_set_inner_transport_header(struct sk_buff *skb,
const int offset)
{
skb_reset_inner_transport_header(skb);
skb->inner_transport_header += offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *skb_inner_network_header(const struct sk_buff *skb)
{
return skb->head + skb->inner_network_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_reset_inner_network_header(struct sk_buff *skb)
{
skb->inner_network_header = skb->data - skb->head;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_set_inner_network_header(struct sk_buff *skb,
const int offset)
{
skb_reset_inner_network_header(skb);
skb->inner_network_header += offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *skb_inner_mac_header(const struct sk_buff *skb)
{
return skb->head + skb->inner_mac_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_reset_inner_mac_header(struct sk_buff *skb)
{
skb->inner_mac_header = skb->data - skb->head;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_set_inner_mac_header(struct sk_buff *skb,
const int offset)
{
skb_reset_inner_mac_header(skb);
skb->inner_mac_header += offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_transport_header_was_set(const struct sk_buff *skb)
{
return skb->transport_header != (typeof(skb->transport_header))~0U;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *skb_transport_header(const struct sk_buff *skb)
{
return skb->head + skb->transport_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_reset_transport_header(struct sk_buff *skb)
{
skb->transport_header = skb->data - skb->head;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_set_transport_header(struct sk_buff *skb,
const int offset)
{
skb_reset_transport_header(skb);
skb->transport_header += offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *skb_network_header(const struct sk_buff *skb)
{
return skb->head + skb->network_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_reset_network_header(struct sk_buff *skb)
{
skb->network_header = skb->data - skb->head;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_set_network_header(struct sk_buff *skb, const int offset)
{
skb_reset_network_header(skb);
skb->network_header += offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned char *skb_mac_header(const struct sk_buff *skb)
{
return skb->head + skb->mac_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_mac_header_was_set(const struct sk_buff *skb)
{
return skb->mac_header != (typeof(skb->mac_header))~0U;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_reset_mac_header(struct sk_buff *skb)
{
skb->mac_header = skb->data - skb->head;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_set_mac_header(struct sk_buff *skb, const int offset)
{
skb_reset_mac_header(skb);
skb->mac_header += offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_pop_mac_header(struct sk_buff *skb)
{
skb->mac_header = skb->network_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_probe_transport_header(struct sk_buff *skb,
const int offset_hint)
{
struct flow_keys keys;
if (skb_transport_header_was_set(skb))
return;
else if (skb_flow_dissect(skb, &keys))
skb_set_transport_header(skb, keys.thoff);
else
skb_set_transport_header(skb, offset_hint);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_mac_header_rebuild(struct sk_buff *skb)
{
if (skb_mac_header_was_set(skb)) {
const unsigned char *old_mac = skb_mac_header(skb);
skb_set_mac_header(skb, -skb->mac_len);
memmove(skb_mac_header(skb), old_mac, skb->mac_len);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_checksum_start_offset(const struct sk_buff *skb)
{
return skb->csum_start - skb_headroom(skb);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_transport_offset(const struct sk_buff *skb)
{
return skb_transport_header(skb) - skb->data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 skb_network_header_len(const struct sk_buff *skb)
{
return skb->transport_header - skb->network_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 skb_inner_network_header_len(const struct sk_buff *skb)
{
return skb->inner_transport_header - skb->inner_network_header;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_network_offset(const struct sk_buff *skb)
{
return skb_network_header(skb) - skb->data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_inner_network_offset(const struct sk_buff *skb)
{
return skb_inner_network_header(skb) - skb->data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pskb_network_may_pull(struct sk_buff *skb, unsigned int len)
{
return pskb_may_pull(skb, skb_network_offset(skb) + len);
}
# 2128 "include/linux/skbuff.h"
int ___pskb_trim(struct sk_buff *skb, unsigned int len);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_trim(struct sk_buff *skb, unsigned int len)
{
if (__builtin_expect(!!(skb_is_nonlinear(skb)), 0)) {
({ int __ret_warn_on = !!(1); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("include/linux/skbuff.h", 2133); __builtin_expect(!!(__ret_warn_on), 0); });
return;
}
skb->len = len;
skb_set_tail_pointer(skb, len);
}
void skb_trim(struct sk_buff *skb, unsigned int len);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __pskb_trim(struct sk_buff *skb, unsigned int len)
{
if (skb->data_len)
return ___pskb_trim(skb, len);
__skb_trim(skb, len);
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pskb_trim(struct sk_buff *skb, unsigned int len)
{
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
}
# 2164 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pskb_trim_unique(struct sk_buff *skb, unsigned int len)
{
int err = pskb_trim(skb, len);
__BUG_ON((unsigned long)(err));
}
# 2178 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_orphan(struct sk_buff *skb)
{
if (skb->destructor) {
skb->destructor(skb);
skb->destructor = ((void *)0);
skb->sk = ((void *)0);
} else {
__BUG_ON((unsigned long)(skb->sk));
}
}
# 2198 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_orphan_frags(struct sk_buff *skb, gfp_t gfp_mask)
{
if (__builtin_expect(!!(!(((struct skb_shared_info *)(skb_end_pointer(skb)))->tx_flags & SKBTX_DEV_ZEROCOPY)), 1))
return 0;
return skb_copy_ubufs(skb, gfp_mask);
}
# 2213 "include/linux/skbuff.h"
void skb_queue_purge(struct sk_buff_head *list);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_queue_purge(struct sk_buff_head *list)
{
struct sk_buff *skb;
while ((skb = __skb_dequeue(list)) != ((void *)0))
kfree_skb(skb);
}
void *netdev_alloc_frag(unsigned int fragsz);
struct sk_buff *__netdev_alloc_skb(struct net_device *dev, unsigned int length,
gfp_t gfp_mask);
# 2243 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *netdev_alloc_skb(struct net_device *dev,
unsigned int length)
{
return __netdev_alloc_skb(dev, length, ((( gfp_t)0x20u)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *__dev_alloc_skb(unsigned int length,
gfp_t gfp_mask)
{
return __netdev_alloc_skb(((void *)0), length, gfp_mask);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *dev_alloc_skb(unsigned int length)
{
return netdev_alloc_skb(((void *)0), length);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev,
unsigned int length, gfp_t gfp)
{
struct sk_buff *skb = __netdev_alloc_skb(dev, length + 2, gfp);
if (2 && skb)
skb_reserve(skb, 2);
return skb;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev,
unsigned int length)
{
return __netdev_alloc_skb_ip_align(dev, length, ((( gfp_t)0x20u)));
}
# 2289 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *__skb_alloc_pages(gfp_t gfp_mask,
struct sk_buff *skb,
unsigned int order)
{
struct page *page;
gfp_mask |= (( gfp_t)0x100u);
if (!(gfp_mask & (( gfp_t)0x10000u)))
gfp_mask |= (( gfp_t)0x2000u);
page = alloc_pages_node((-1), gfp_mask, order);
if (skb && page && page->pfmemalloc)
skb->pfmemalloc = true;
return page;
}
# 2316 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *__skb_alloc_page(gfp_t gfp_mask,
struct sk_buff *skb)
{
return __skb_alloc_pages(gfp_mask, skb, 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_propagate_pfmemalloc(struct page *page,
struct sk_buff *skb)
{
if (page && page->pfmemalloc)
skb->pfmemalloc = true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct page *skb_frag_page(const skb_frag_t *frag)
{
return frag->page.p;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_frag_ref(skb_frag_t *frag)
{
get_page(skb_frag_page(frag));
}
# 2363 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_frag_ref(struct sk_buff *skb, int f)
{
__skb_frag_ref(&((struct skb_shared_info *)(skb_end_pointer(skb)))->frags[f]);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_frag_unref(skb_frag_t *frag)
{
put_page(skb_frag_page(frag));
}
# 2386 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_frag_unref(struct sk_buff *skb, int f)
{
__skb_frag_unref(&((struct skb_shared_info *)(skb_end_pointer(skb)))->frags[f]);
}
# 2398 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *skb_frag_address(const skb_frag_t *frag)
{
return lowmem_page_address(skb_frag_page(frag)) + frag->page_offset;
}
# 2410 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *skb_frag_address_safe(const skb_frag_t *frag)
{
void *ptr = lowmem_page_address(skb_frag_page(frag));
if (__builtin_expect(!!(!ptr), 0))
return ((void *)0);
return ptr + frag->page_offset;
}
# 2426 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_frag_set_page(skb_frag_t *frag, struct page *page)
{
frag->page.p = page;
}
# 2439 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_frag_set_page(struct sk_buff *skb, int f,
struct page *page)
{
__skb_frag_set_page(&((struct skb_shared_info *)(skb_end_pointer(skb)))->frags[f], page);
}
bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t prio);
# 2458 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dma_addr_t skb_frag_dma_map(struct device *dev,
const skb_frag_t *frag,
size_t offset, size_t size,
enum dma_data_direction dir)
{
return dma_map_page(dev, skb_frag_page(frag),
frag->page_offset + offset, size, dir);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *pskb_copy(struct sk_buff *skb,
gfp_t gfp_mask)
{
return __pskb_copy(skb, skb_headroom(skb), gfp_mask);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *pskb_copy_for_clone(struct sk_buff *skb,
gfp_t gfp_mask)
{
return __pskb_copy_fclone(skb, skb_headroom(skb), gfp_mask, true);
}
# 2489 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_clone_writable(const struct sk_buff *skb, unsigned int len)
{
return !skb_header_cloned(skb) &&
skb_headroom(skb) + len <= skb->hdr_len;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __skb_cow(struct sk_buff *skb, unsigned int headroom,
int cloned)
{
int delta = 0;
if (headroom > skb_headroom(skb))
delta = headroom - skb_headroom(skb);
if (delta || cloned)
return pskb_expand_head(skb, ((((delta)) + ((typeof((delta)))((({ typeof(32) _max1 = (32); typeof((1 << 5)) _max2 = ((1 << 5)); (void) (&_max1 == &_max2); _max1 > _max2 ? _max1 : _max2; }))) - 1)) & ~((typeof((delta)))((({ typeof(32) _max1 = (32); typeof((1 << 5)) _max2 = ((1 << 5)); (void) (&_max1 == &_max2); _max1 > _max2 ? _max1 : _max2; }))) - 1)), 0,
((( gfp_t)0x20u)));
return 0;
}
# 2521 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_cow(struct sk_buff *skb, unsigned int headroom)
{
return __skb_cow(skb, headroom, skb_cloned(skb));
}
# 2536 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_cow_head(struct sk_buff *skb, unsigned int headroom)
{
return __skb_cow(skb, headroom, skb_header_cloned(skb));
}
# 2552 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_padto(struct sk_buff *skb, unsigned int len)
{
unsigned int size = skb->len;
if (__builtin_expect(!!(size >= len), 1))
return 0;
return skb_pad(skb, len - size);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_add_data(struct sk_buff *skb,
char *from, int copy)
{
const int off = skb->len;
if (skb->ip_summed == 0) {
int err = 0;
__wsum csum = csum_and_copy_from_user(from, skb_put(skb, copy),
copy, 0, &err);
if (!err) {
skb->csum = csum_block_add(skb->csum, csum, off);
return 0;
}
} else if (!({ void *__cu_to; const void *__cu_from; long __cu_len; __cu_to = (skb_put(skb, copy)); __cu_from = (from); __cu_len = (copy); if ((((current_thread_info()->addr_limit)).seg == ((((mm_segment_t) { 0UL }))).seg)) { __cu_len = ({ register void *__cu_to_r __asm__("$4"); register const void *__cu_from_r __asm__("$5"); register long __cu_len_r __asm__("$6"); __cu_to_r = (__cu_to); __cu_from_r = (__cu_from); __cu_len_r = (__cu_len); __asm__ __volatile__( ".set\tnoreorder\n\t" ".set\tnoat\n\t" "la" "\t$1, " "__copy_user" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t" ".set\tnoat\n\t" "addu" "\t$1, %1, %2\n\t" ".set\tat\n\t" ".set\treorder" : "+r" (__cu_to_r), "+r" (__cu_from_r), "+r" (__cu_len_r) : : "$8", "$9", "$10", "$11", "$12", "$14", "$15", "$24", "$31", "$0", "memory"); __cu_len_r; }); } else { if (__builtin_expect(!!(({ unsigned long __addr = (unsigned long) ((__cu_from)); unsigned long __size = (__cu_len); unsigned long __mask = (current_thread_info()->addr_limit).seg; unsigned long __ok; (void)0; __ok = (signed long)(__mask & (__addr | (__addr + __size) | ((__builtin_constant_p(__size) && (signed long) (__size) > 0) ? 0 : (__size)))); __ok == 0; })), 1)) { might_fault(); __cu_len = ({ register void *__cu_to_r __asm__("$4"); register const void *__cu_from_r __asm__("$5"); register long __cu_len_r __asm__("$6"); __cu_to_r = (__cu_to); __cu_from_r = (__cu_from); __cu_len_r = (__cu_len); __asm__ __volatile__( ".set\tnoreorder\n\t" ".set\tnoat\n\t" "la" "\t$1, " "__copy_user" "\n\t" "jalr\t$1\n\t" ".set\tat\n\t" ".set\tnoat\n\t" "addu" "\t$1, %1, %2\n\t" ".set\tat\n\t" ".set\treorder" : "+r" (__cu_to_r), "+r" (__cu_from_r), "+r" (__cu_len_r) : : "$8", "$9", "$10", "$11", "$12", "$14", "$15", "$24", "$31", "$0", "memory"); __cu_len_r; }); } } __cu_len; }))
return 0;
__skb_trim(skb, off);
return -14;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_can_coalesce(struct sk_buff *skb, int i,
const struct page *page, int off)
{
if (i) {
const struct skb_frag_struct *frag = &((struct skb_shared_info *)(skb_end_pointer(skb)))->frags[i - 1];
return page == skb_frag_page(frag) &&
off == frag->page_offset + skb_frag_size(frag);
}
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __skb_linearize(struct sk_buff *skb)
{
return __pskb_pull_tail(skb, skb->data_len) ? 0 : -12;
}
# 2604 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_linearize(struct sk_buff *skb)
{
return skb_is_nonlinear(skb) ? __skb_linearize(skb) : 0;
}
# 2616 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_has_shared_frag(const struct sk_buff *skb)
{
return skb_is_nonlinear(skb) &&
((struct skb_shared_info *)(skb_end_pointer(skb)))->tx_flags & SKBTX_SHARED_FRAG;
}
# 2629 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_linearize_cow(struct sk_buff *skb)
{
return skb_is_nonlinear(skb) || skb_cloned(skb) ?
__skb_linearize(skb) : 0;
}
# 2646 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_postpull_rcsum(struct sk_buff *skb,
const void *start, unsigned int len)
{
if (skb->ip_summed == 2)
skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0));
}
unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len);
# 2664 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
{
if (__builtin_expect(!!(len >= skb->len), 1))
return 0;
if (skb->ip_summed == 2)
skb->ip_summed = 0;
return __pskb_trim(skb, len);
}
# 2707 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_has_frag_list(const struct sk_buff *skb)
{
return ((struct skb_shared_info *)(skb_end_pointer(skb)))->frag_list != ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_frag_list_init(struct sk_buff *skb)
{
((struct skb_shared_info *)(skb_end_pointer(skb)))->frag_list = ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_frag_add_head(struct sk_buff *skb, struct sk_buff *frag)
{
frag->next = ((struct skb_shared_info *)(skb_end_pointer(skb)))->frag_list;
((struct skb_shared_info *)(skb_end_pointer(skb)))->frag_list = frag;
}
struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags,
int *peeked, int *off, int *err);
struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
int *err);
unsigned int datagram_poll(struct file *file, struct socket *sock,
struct poll_table_struct *wait);
int skb_copy_datagram_iovec(const struct sk_buff *from, int offset,
struct iovec *to, int size);
int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, int hlen,
struct iovec *iov);
int skb_copy_datagram_from_iovec(struct sk_buff *skb, int offset,
const struct iovec *from, int from_offset,
int len);
int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *frm,
int offset, size_t count);
int skb_copy_datagram_const_iovec(const struct sk_buff *from, int offset,
const struct iovec *to, int to_offset,
int size);
void skb_free_datagram(struct sock *sk, struct sk_buff *skb);
void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb);
int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags);
int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len);
int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len);
__wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to,
int len, __wsum csum);
int skb_splice_bits(struct sk_buff *skb, unsigned int offset,
struct pipe_inode_info *pipe, unsigned int len,
unsigned int flags);
void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to);
unsigned int skb_zerocopy_headlen(const struct sk_buff *from);
int skb_zerocopy(struct sk_buff *to, struct sk_buff *from,
int len, int hlen);
void skb_split(struct sk_buff *skb, struct sk_buff *skb1, const u32 len);
int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen);
void skb_scrub_packet(struct sk_buff *skb, bool xnet);
unsigned int skb_gso_transport_seglen(const struct sk_buff *skb);
struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features);
struct sk_buff *skb_vlan_untag(struct sk_buff *skb);
struct skb_checksum_ops {
__wsum (*update)(const void *mem, int len, __wsum wsum);
__wsum (*combine)(__wsum csum, __wsum csum2, int offset, int len);
};
__wsum __skb_checksum(const struct sk_buff *skb, int offset, int len,
__wsum csum, const struct skb_checksum_ops *ops);
__wsum skb_checksum(const struct sk_buff *skb, int offset, int len,
__wsum csum);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *__skb_header_pointer(const struct sk_buff *skb, int offset,
int len, void *data, int hlen, void *buffer)
{
if (hlen - offset >= len)
return data + offset;
if (!skb ||
skb_copy_bits(skb, offset, buffer, len) < 0)
return ((void *)0);
return buffer;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *skb_header_pointer(const struct sk_buff *skb, int offset,
int len, void *buffer)
{
return __skb_header_pointer(skb, offset, len, skb->data,
skb_headlen(skb), buffer);
}
# 2805 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_needs_linearize(struct sk_buff *skb,
netdev_features_t features)
{
return skb_is_nonlinear(skb) &&
((skb_has_frag_list(skb) && !(features & ((netdev_features_t)1 << (NETIF_F_FRAGLIST_BIT)))) ||
(((struct skb_shared_info *)(skb_end_pointer(skb)))->nr_frags && !(features & ((netdev_features_t)1 << (NETIF_F_SG_BIT)))));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_copy_from_linear_data(const struct sk_buff *skb,
void *to,
const unsigned int len)
{
memcpy(to, skb->data, len);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_copy_from_linear_data_offset(const struct sk_buff *skb,
const int offset, void *to,
const unsigned int len)
{
memcpy(to, skb->data + offset, len);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_copy_to_linear_data(struct sk_buff *skb,
const void *from,
const unsigned int len)
{
memcpy(skb->data, from, len);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_copy_to_linear_data_offset(struct sk_buff *skb,
const int offset,
const void *from,
const unsigned int len)
{
memcpy(skb->data + offset, from, len);
}
void skb_init(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t skb_get_ktime(const struct sk_buff *skb)
{
return skb->tstamp;
}
# 2858 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_get_timestamp(const struct sk_buff *skb,
struct timeval *stamp)
{
*stamp = ns_to_timeval((skb->tstamp).tv64);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_get_timestampns(const struct sk_buff *skb,
struct timespec *stamp)
{
*stamp = ns_to_timespec((skb->tstamp).tv64);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __net_timestamp(struct sk_buff *skb)
{
skb->tstamp = ktime_get_real();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t net_timedelta(ktime_t t)
{
return ({ (ktime_t){ .tv64 = (ktime_get_real()).tv64 - (t).tv64 }; });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ktime_t net_invalid_timestamp(void)
{
return ktime_set(0, 0);
}
struct sk_buff *skb_clone_sk(struct sk_buff *skb);
# 2894 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_clone_tx_timestamp(struct sk_buff *skb)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_defer_rx_timestamp(struct sk_buff *skb)
{
return false;
}
# 2917 "include/linux/skbuff.h"
void skb_complete_tx_timestamp(struct sk_buff *skb,
struct skb_shared_hwtstamps *hwtstamps);
void __skb_tstamp_tx(struct sk_buff *orig_skb,
struct skb_shared_hwtstamps *hwtstamps,
struct sock *sk, int tstype);
# 2935 "include/linux/skbuff.h"
void skb_tstamp_tx(struct sk_buff *orig_skb,
struct skb_shared_hwtstamps *hwtstamps);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sw_tx_timestamp(struct sk_buff *skb)
{
if (((struct skb_shared_info *)(skb_end_pointer(skb)))->tx_flags & SKBTX_SW_TSTAMP &&
!(((struct skb_shared_info *)(skb_end_pointer(skb)))->tx_flags & SKBTX_IN_PROGRESS))
skb_tstamp_tx(skb, ((void *)0));
}
# 2957 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_tx_timestamp(struct sk_buff *skb)
{
skb_clone_tx_timestamp(skb);
sw_tx_timestamp(skb);
}
# 2970 "include/linux/skbuff.h"
void skb_complete_wifi_ack(struct sk_buff *skb, bool acked);
__sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len);
__sum16 __skb_checksum_complete(struct sk_buff *skb);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_csum_unnecessary(const struct sk_buff *skb)
{
return ((skb->ip_summed & 1) || skb->csum_valid);
}
# 2996 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 skb_checksum_complete(struct sk_buff *skb)
{
return skb_csum_unnecessary(skb) ?
0 : __skb_checksum_complete(skb);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_decr_checksum_unnecessary(struct sk_buff *skb)
{
if (skb->ip_summed == 1) {
if (skb->csum_level == 0)
skb->ip_summed = 0;
else
skb->csum_level--;
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_incr_checksum_unnecessary(struct sk_buff *skb)
{
if (skb->ip_summed == 1) {
if (skb->csum_level < 3)
skb->csum_level++;
} else if (skb->ip_summed == 0) {
skb->ip_summed = 1;
skb->csum_level = 0;
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_mark_checksum_bad(struct sk_buff *skb)
{
# 3033 "include/linux/skbuff.h"
if (skb->ip_summed == 0 ||
skb->ip_summed == 1)
skb->csum_bad = 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __skb_checksum_validate_needed(struct sk_buff *skb,
bool zero_okay,
__sum16 check)
{
if (skb_csum_unnecessary(skb) || (zero_okay && !check)) {
skb->csum_valid = 1;
__skb_decr_checksum_unnecessary(skb);
return false;
}
return true;
}
# 3067 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_checksum_complete_unset(struct sk_buff *skb)
{
if (skb->ip_summed == 2)
skb->ip_summed = 0;
}
# 3082 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 __skb_checksum_validate_complete(struct sk_buff *skb,
bool complete,
__wsum psum)
{
if (skb->ip_summed == 2) {
if (!csum_fold(csum_add(psum, skb->csum))) {
skb->csum_valid = 1;
return 0;
}
} else if (skb->csum_bad) {
return 1;
}
skb->csum = psum;
if (complete || skb->len <= 76) {
__sum16 csum;
csum = __skb_checksum_complete(skb);
skb->csum_valid = !csum;
return csum;
}
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __wsum null_compute_pseudo(struct sk_buff *skb, int proto)
{
return 0;
}
# 3151 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __skb_checksum_convert_check(struct sk_buff *skb)
{
return (skb->ip_summed == 0 &&
skb->csum_valid && !skb->csum_bad);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_checksum_convert(struct sk_buff *skb,
__sum16 check, __wsum pseudo)
{
skb->csum = ~pseudo;
skb->ip_summed = 2;
}
# 3172 "include/linux/skbuff.h"
void nf_conntrack_destroy(struct nf_conntrack *nfct);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void nf_conntrack_put(struct nf_conntrack *nfct)
{
if (nfct && (atomic_sub_return(1, (&nfct->use)) == 0))
nf_conntrack_destroy(nfct);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void nf_conntrack_get(struct nf_conntrack *nfct)
{
if (nfct)
atomic_add(1, (&nfct->use));
}
# 3196 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void nf_reset(struct sk_buff *skb)
{
nf_conntrack_put(skb->nfct);
skb->nfct = ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void nf_reset_trace(struct sk_buff *skb)
{
skb->nf_trace = 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ecnt_nf_copy(struct sk_buff *dst, const struct sk_buff *src,
bool copy)
{
if (ra_sw_nat_hook_xfer)
ra_sw_nat_hook_xfer(dst, src);
dst->portbind_mark = src->portbind_mark;
dst->orig_dev = src->orig_dev;
# 3237 "include/linux/skbuff.h"
dst->vlan_tags[0] = src->vlan_tags[0];
dst->vlan_tags[1] = src->vlan_tags[1];
dst->vlan_tag_flag = src->vlan_tag_flag;
dst->pon_vlan_tpid[0] = src->pon_vlan_tpid[0];
dst->pon_vlan_tpid[1] = src->pon_vlan_tpid[1];
dst->pon_vlan_tpid[2] = src->pon_vlan_tpid[2];
dst->pon_vlan_tpid[3] = src->pon_vlan_tpid[3];
dst->pon_vlan_tci[0] = src->pon_vlan_tci[0];
dst->pon_vlan_tci[1] = src->pon_vlan_tci[1];
dst->pon_vlan_tci[2] = src->pon_vlan_tci[2];
dst->pon_vlan_tci[3] = src->pon_vlan_tci[3];
dst->pon_tag_num = src->pon_tag_num;
dst->pon_vlan_flag = src->pon_vlan_flag;
dst->original_dev = src->original_dev;
dst->pon_mac_filter_flag = src->pon_mac_filter_flag;
dst->ppe_info_flag = src->ppe_info_flag;
dst->ppe_magic = src->ppe_magic;
dst->ppe_ai = src->ppe_ai;
dst->ppe_foe_entry = src->ppe_foe_entry;
dst->xpon_raw_info = src->xpon_raw_info;
dst->pon_mark = src->pon_mark;
dst->v_if = src->v_if;
# 3282 "include/linux/skbuff.h"
dst->qosEnque = src->qosEnque;
# 3294 "include/linux/skbuff.h"
dst->bridge_flag = src->bridge_flag;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __nf_copy(struct sk_buff *dst, const struct sk_buff *src,
bool copy)
{
dst->nfct = src->nfct;
nf_conntrack_get(src->nfct);
if (copy)
dst->nfctinfo = src->nfctinfo;
if (copy)
dst->nf_trace = src->nf_trace;
ecnt_nf_copy(dst,src,copy);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void nf_copy(struct sk_buff *dst, const struct sk_buff *src)
{
nf_conntrack_put(dst->nfct);
__nf_copy(dst, src, true);
}
# 3342 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_copy_secmark(struct sk_buff *to, const struct sk_buff *from)
{ }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_init_secmark(struct sk_buff *skb)
{ }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_irq_freeable(const struct sk_buff *skb)
{
return !skb->destructor &&
!skb->sp &&
!skb->nfct &&
!skb->_skb_refdst &&
!skb_has_frag_list(skb);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_set_queue_mapping(struct sk_buff *skb, u16 queue_mapping)
{
skb->queue_mapping = queue_mapping;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 skb_get_queue_mapping(const struct sk_buff *skb)
{
return skb->queue_mapping;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_copy_queue_mapping(struct sk_buff *to, const struct sk_buff *from)
{
to->queue_mapping = from->queue_mapping;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_record_rx_queue(struct sk_buff *skb, u16 rx_queue)
{
skb->queue_mapping = rx_queue + 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 skb_get_rx_queue(const struct sk_buff *skb)
{
return skb->queue_mapping - 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_rx_queue_recorded(const struct sk_buff *skb)
{
return skb->queue_mapping != 0;
}
u16 __skb_tx_hash(const struct net_device *dev, struct sk_buff *skb,
unsigned int num_tx_queues);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sec_path *skb_sec_path(struct sk_buff *skb)
{
return skb->sp;
}
struct skb_gso_cb {
int mac_offset;
int encap_level;
__u16 csum_start;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_tnl_header_len(const struct sk_buff *inner_skb)
{
return (skb_mac_header(inner_skb) - inner_skb->head) -
((struct skb_gso_cb *)(inner_skb)->cb)->mac_offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int gso_pskb_expand_head(struct sk_buff *skb, int extra)
{
int new_headroom, headroom;
int ret;
headroom = skb_headroom(skb);
ret = pskb_expand_head(skb, extra, 0, ((( gfp_t)0x20u)));
if (ret)
return ret;
new_headroom = skb_headroom(skb);
((struct skb_gso_cb *)(skb)->cb)->mac_offset += (new_headroom - headroom);
return 0;
}
# 3446 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 gso_make_checksum(struct sk_buff *skb, __wsum res)
{
int plen = ((struct skb_gso_cb *)(skb)->cb)->csum_start - skb_headroom(skb) -
skb_transport_offset(skb);
__u16 csum;
csum = csum_fold(csum_partial(skb_transport_header(skb),
plen, skb->csum));
skb->csum = res;
((struct skb_gso_cb *)(skb)->cb)->csum_start -= plen;
return csum;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_is_gso(const struct sk_buff *skb)
{
return ((struct skb_shared_info *)(skb_end_pointer(skb)))->gso_size;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_is_gso_v6(const struct sk_buff *skb)
{
return ((struct skb_shared_info *)(skb_end_pointer(skb)))->gso_type & SKB_GSO_TCPV6;
}
void __skb_warn_lro_forwarding(const struct sk_buff *skb);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_warn_if_lro(const struct sk_buff *skb)
{
const struct skb_shared_info *shinfo = ((struct skb_shared_info *)(skb_end_pointer(skb)));
if (skb_is_nonlinear(skb) && shinfo->gso_size != 0 &&
__builtin_expect(!!(shinfo->gso_type == 0), 0)) {
__skb_warn_lro_forwarding(skb);
return true;
}
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_forward_csum(struct sk_buff *skb)
{
if (skb->ip_summed == 2)
skb->ip_summed = 0;
}
# 3502 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_checksum_none_assert(const struct sk_buff *skb)
{
}
bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off);
int skb_checksum_setup(struct sk_buff *skb, bool recalculate);
u32 skb_get_poff(const struct sk_buff *skb);
u32 __skb_get_poff(const struct sk_buff *skb, void *data,
const struct flow_keys *keys, int hlen);
# 3526 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_head_is_locked(const struct sk_buff *skb)
{
return !skb->head_frag || skb_cloned(skb);
}
# 3541 "include/linux/skbuff.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int skb_gso_network_seglen(const struct sk_buff *skb)
{
unsigned int hdr_len = skb_transport_header(skb) -
skb_network_header(skb);
return hdr_len + skb_gso_transport_seglen(skb);
}
# 3557 "include/linux/skbuff.h"
struct sk_buff *skbmgr_alloc_skb2k(void);
int skbmgr_recycling_callback(struct sk_buff *skb);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *skbmgr_dev_alloc_skb2k(void)
{
struct sk_buff *skb = skbmgr_alloc_skb2k();
if (__builtin_expect(!!(skb), 1))
skb_reserve(skb, ({ typeof(32) _max1 = (32); typeof((1 << 5)) _max2 = ((1 << 5)); (void) (&_max1 == &_max2); _max1 > _max2 ? _max1 : _max2; }));
return skb;
}
struct sk_buff *skbmgr_alloc_skb4k(void);
int skbmgr_4k_recycling_callback(struct sk_buff *skb);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *skbmgr_dev_alloc_skb4k(void)
{
struct sk_buff *skb = skbmgr_alloc_skb4k();
if (__builtin_expect(!!(skb), 1))
skb_reserve(skb, ({ typeof(32) _max1 = (32); typeof((1 << 5)) _max2 = ((1 << 5)); (void) (&_max1 == &_max2); _max1 > _max2 ? _max1 : _max2; }));
return skb;
}
# 5 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_global.h" 2
# 1 "include/linux/netdevice.h" 1
# 28 "include/linux/netdevice.h"
# 1 "include/linux/pm_qos.h" 1
# 9 "include/linux/pm_qos.h"
# 1 "include/linux/miscdevice.h" 1
# 1 "./include/uapi/linux/major.h" 1
# 4 "include/linux/miscdevice.h" 2
# 54 "include/linux/miscdevice.h"
struct device;
struct miscdevice {
int minor;
const char *name;
const struct file_operations *fops;
struct list_head list;
struct device *parent;
struct device *this_device;
const char *nodename;
umode_t mode;
};
extern int misc_register(struct miscdevice *misc);
extern int misc_deregister(struct miscdevice *misc);
# 10 "include/linux/pm_qos.h" 2
enum {
PM_QOS_RESERVED = 0,
PM_QOS_CPU_DMA_LATENCY,
PM_QOS_NETWORK_LATENCY,
PM_QOS_NETWORK_THROUGHPUT,
PM_QOS_MEMORY_BANDWIDTH,
PM_QOS_NUM_CLASSES,
};
enum pm_qos_flags_status {
PM_QOS_FLAGS_UNDEFINED = -1,
PM_QOS_FLAGS_NONE,
PM_QOS_FLAGS_SOME,
PM_QOS_FLAGS_ALL,
};
# 45 "include/linux/pm_qos.h"
struct pm_qos_request {
struct plist_node node;
int pm_qos_class;
struct delayed_work work;
};
struct pm_qos_flags_request {
struct list_head node;
s32 flags;
};
enum dev_pm_qos_req_type {
DEV_PM_QOS_RESUME_LATENCY = 1,
DEV_PM_QOS_LATENCY_TOLERANCE,
DEV_PM_QOS_FLAGS,
};
struct dev_pm_qos_request {
enum dev_pm_qos_req_type type;
union {
struct plist_node pnode;
struct pm_qos_flags_request flr;
} data;
struct device *dev;
};
enum pm_qos_type {
PM_QOS_UNITIALIZED,
PM_QOS_MAX,
PM_QOS_MIN,
PM_QOS_SUM
};
struct pm_qos_constraints {
struct plist_head list;
s32 target_value;
s32 default_value;
s32 no_constraint_value;
enum pm_qos_type type;
struct blocking_notifier_head *notifiers;
};
struct pm_qos_flags {
struct list_head list;
s32 effective_flags;
};
struct dev_pm_qos {
struct pm_qos_constraints resume_latency;
struct pm_qos_constraints latency_tolerance;
struct pm_qos_flags flags;
struct dev_pm_qos_request *resume_latency_req;
struct dev_pm_qos_request *latency_tolerance_req;
struct dev_pm_qos_request *flags_req;
};
enum pm_qos_req_action {
PM_QOS_ADD_REQ,
PM_QOS_UPDATE_REQ,
PM_QOS_REMOVE_REQ
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_request_active(struct dev_pm_qos_request *req)
{
return req->dev != ((void *)0);
}
int pm_qos_update_target(struct pm_qos_constraints *c, struct plist_node *node,
enum pm_qos_req_action action, int value);
bool pm_qos_update_flags(struct pm_qos_flags *pqf,
struct pm_qos_flags_request *req,
enum pm_qos_req_action action, s32 val);
void pm_qos_add_request(struct pm_qos_request *req, int pm_qos_class,
s32 value);
void pm_qos_update_request(struct pm_qos_request *req,
s32 new_value);
void pm_qos_update_request_timeout(struct pm_qos_request *req,
s32 new_value, unsigned long timeout_us);
void pm_qos_remove_request(struct pm_qos_request *req);
int pm_qos_request(int pm_qos_class);
int pm_qos_add_notifier(int pm_qos_class, struct notifier_block *notifier);
int pm_qos_remove_notifier(int pm_qos_class, struct notifier_block *notifier);
int pm_qos_request_active(struct pm_qos_request *req);
s32 pm_qos_read_value(struct pm_qos_constraints *c);
# 158 "include/linux/pm_qos.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum pm_qos_flags_status __dev_pm_qos_flags(struct device *dev,
s32 mask)
{ return PM_QOS_FLAGS_UNDEFINED; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum pm_qos_flags_status dev_pm_qos_flags(struct device *dev,
s32 mask)
{ return PM_QOS_FLAGS_UNDEFINED; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s32 __dev_pm_qos_read_value(struct device *dev)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s32 dev_pm_qos_read_value(struct device *dev)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_add_request(struct device *dev,
struct dev_pm_qos_request *req,
enum dev_pm_qos_req_type type,
s32 value)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_update_request(struct dev_pm_qos_request *req,
s32 new_value)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_remove_request(struct dev_pm_qos_request *req)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_add_notifier(struct device *dev,
struct notifier_block *notifier)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_remove_notifier(struct device *dev,
struct notifier_block *notifier)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_add_global_notifier(
struct notifier_block *notifier)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_remove_global_notifier(
struct notifier_block *notifier)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_pm_qos_constraints_init(struct device *dev)
{
dev->power.power_state = ((struct pm_message){ .event = 0x0000, });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_pm_qos_constraints_destroy(struct device *dev)
{
dev->power.power_state = ((struct pm_message){ .event = (-1), });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_add_ancestor_request(struct device *dev,
struct dev_pm_qos_request *req,
enum dev_pm_qos_req_type type,
s32 value)
{ return 0; }
# 224 "include/linux/pm_qos.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_expose_latency_limit(struct device *dev, s32 value)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_pm_qos_hide_latency_limit(struct device *dev) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_expose_flags(struct device *dev, s32 value)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_pm_qos_hide_flags(struct device *dev) {}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_update_flags(struct device *dev, s32 m, bool set)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s32 dev_pm_qos_get_user_latency_tolerance(struct device *dev)
{ return (-1); }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_pm_qos_update_user_latency_tolerance(struct device *dev, s32 val)
{ return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s32 dev_pm_qos_requested_resume_latency(struct device *dev) { return 0; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) s32 dev_pm_qos_requested_flags(struct device *dev) { return 0; }
# 29 "include/linux/netdevice.h" 2
# 1 "include/linux/prefetch.h" 1
# 53 "include/linux/prefetch.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void prefetch_range(void *addr, size_t len)
{
char *cp;
char *end = addr + len;
for (cp = addr; cp < end; cp += (4*(1 << 5)))
__builtin_prefetch((cp), 0, 1);
}
# 34 "include/linux/netdevice.h" 2
# 1 "include/linux/dmaengine.h" 1
# 38 "include/linux/dmaengine.h"
typedef s32 dma_cookie_t;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_submit_error(dma_cookie_t cookie)
{
return cookie < 0 ? cookie : 0;
}
# 53 "include/linux/dmaengine.h"
enum dma_status {
DMA_COMPLETE,
DMA_IN_PROGRESS,
DMA_PAUSED,
DMA_ERROR,
};
enum dma_transaction_type {
DMA_MEMCPY,
DMA_XOR,
DMA_PQ,
DMA_XOR_VAL,
DMA_PQ_VAL,
DMA_INTERRUPT,
DMA_SG,
DMA_PRIVATE,
DMA_ASYNC_TX,
DMA_SLAVE,
DMA_CYCLIC,
DMA_INTERLEAVE,
DMA_TX_TYPE_END,
};
# 90 "include/linux/dmaengine.h"
enum dma_transfer_direction {
DMA_MEM_TO_MEM,
DMA_MEM_TO_DEV,
DMA_DEV_TO_MEM,
DMA_DEV_TO_DEV,
DMA_TRANS_NONE,
};
# 130 "include/linux/dmaengine.h"
struct data_chunk {
size_t size;
size_t icg;
};
# 153 "include/linux/dmaengine.h"
struct dma_interleaved_template {
dma_addr_t src_start;
dma_addr_t dst_start;
enum dma_transfer_direction dir;
bool src_inc;
bool dst_inc;
bool src_sgl;
bool dst_sgl;
size_t numf;
size_t frame_size;
struct data_chunk sgl[0];
};
# 182 "include/linux/dmaengine.h"
enum dma_ctrl_flags {
DMA_PREP_INTERRUPT = (1 << 0),
DMA_CTRL_ACK = (1 << 1),
DMA_PREP_PQ_DISABLE_P = (1 << 2),
DMA_PREP_PQ_DISABLE_Q = (1 << 3),
DMA_PREP_CONTINUE = (1 << 4),
DMA_PREP_FENCE = (1 << 5),
};
# 203 "include/linux/dmaengine.h"
enum dma_ctrl_cmd {
DMA_TERMINATE_ALL,
DMA_PAUSE,
DMA_RESUME,
DMA_SLAVE_CONFIG,
};
enum sum_check_bits {
SUM_CHECK_P = 0,
SUM_CHECK_Q = 1,
};
enum sum_check_flags {
SUM_CHECK_P_RESULT = (1 << SUM_CHECK_P),
SUM_CHECK_Q_RESULT = (1 << SUM_CHECK_Q),
};
typedef struct { unsigned long bits[(((DMA_TX_TYPE_END) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))]; } dma_cap_mask_t;
struct dma_chan_percpu {
unsigned long memcpy_count;
unsigned long bytes_transferred;
};
# 260 "include/linux/dmaengine.h"
struct dma_chan {
struct dma_device *device;
dma_cookie_t cookie;
dma_cookie_t completed_cookie;
int chan_id;
struct dma_chan_dev *dev;
struct list_head device_node;
struct dma_chan_percpu *local;
int client_count;
int table_count;
void *private;
};
# 283 "include/linux/dmaengine.h"
struct dma_chan_dev {
struct dma_chan *chan;
struct device device;
int dev_id;
atomic_t *idr_ref;
};
enum dma_slave_buswidth {
DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
};
# 349 "include/linux/dmaengine.h"
struct dma_slave_config {
enum dma_transfer_direction direction;
dma_addr_t src_addr;
dma_addr_t dst_addr;
enum dma_slave_buswidth src_addr_width;
enum dma_slave_buswidth dst_addr_width;
u32 src_maxburst;
u32 dst_maxburst;
bool device_fc;
unsigned int slave_id;
};
# 381 "include/linux/dmaengine.h"
enum dma_residue_granularity {
DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
DMA_RESIDUE_GRANULARITY_BURST = 2,
};
# 399 "include/linux/dmaengine.h"
struct dma_slave_caps {
u32 src_addr_widths;
u32 dstn_addr_widths;
u32 directions;
bool cmd_pause;
bool cmd_terminate;
enum dma_residue_granularity residue_granularity;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const char *dma_chan_name(struct dma_chan *chan)
{
return dev_name(&chan->dev->device);
}
void dma_chan_cleanup(struct kref *kref);
# 426 "include/linux/dmaengine.h"
typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param);
typedef void (*dma_async_tx_callback)(void *dma_async_param);
struct dmaengine_unmap_data {
u8 map_cnt;
u8 to_cnt;
u8 from_cnt;
u8 bidi_cnt;
struct device *dev;
struct kref kref;
size_t len;
dma_addr_t addr[0];
};
# 458 "include/linux/dmaengine.h"
struct dma_async_tx_descriptor {
dma_cookie_t cookie;
enum dma_ctrl_flags flags;
dma_addr_t phys;
struct dma_chan *chan;
dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx);
dma_async_tx_callback callback;
void *callback_param;
struct dmaengine_unmap_data *unmap;
};
# 486 "include/linux/dmaengine.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_set_unmap(struct dma_async_tx_descriptor *tx,
struct dmaengine_unmap_data *unmap)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dmaengine_unmap_data *
dmaengine_get_unmap_data(struct device *dev, int nr, gfp_t flags)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dmaengine_unmap_put(struct dmaengine_unmap_data *unmap)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_descriptor_unmap(struct dma_async_tx_descriptor *tx)
{
if (tx->unmap) {
dmaengine_unmap_put(tx->unmap);
tx->unmap = ((void *)0);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void txd_lock(struct dma_async_tx_descriptor *txd)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void txd_unlock(struct dma_async_tx_descriptor *txd)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void txd_chain(struct dma_async_tx_descriptor *txd, struct dma_async_tx_descriptor *next)
{
BUG();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void txd_clear_parent(struct dma_async_tx_descriptor *txd)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void txd_clear_next(struct dma_async_tx_descriptor *txd)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_async_tx_descriptor *txd_next(struct dma_async_tx_descriptor *txd)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_async_tx_descriptor *txd_parent(struct dma_async_tx_descriptor *txd)
{
return ((void *)0);
}
# 575 "include/linux/dmaengine.h"
struct dma_tx_state {
dma_cookie_t last;
dma_cookie_t used;
u32 residue;
};
# 619 "include/linux/dmaengine.h"
struct dma_device {
unsigned int chancnt;
unsigned int privatecnt;
struct list_head channels;
struct list_head global_node;
dma_cap_mask_t cap_mask;
unsigned short max_xor;
unsigned short max_pq;
u8 copy_align;
u8 xor_align;
u8 pq_align;
u8 fill_align;
int dev_id;
struct device *dev;
int (*device_alloc_chan_resources)(struct dma_chan *chan);
void (*device_free_chan_resources)(struct dma_chan *chan);
struct dma_async_tx_descriptor *(*device_prep_dma_memcpy)(
struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
size_t len, unsigned long flags);
struct dma_async_tx_descriptor *(*device_prep_dma_xor)(
struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src,
unsigned int src_cnt, size_t len, unsigned long flags);
struct dma_async_tx_descriptor *(*device_prep_dma_xor_val)(
struct dma_chan *chan, dma_addr_t *src, unsigned int src_cnt,
size_t len, enum sum_check_flags *result, unsigned long flags);
struct dma_async_tx_descriptor *(*device_prep_dma_pq)(
struct dma_chan *chan, dma_addr_t *dst, dma_addr_t *src,
unsigned int src_cnt, const unsigned char *scf,
size_t len, unsigned long flags);
struct dma_async_tx_descriptor *(*device_prep_dma_pq_val)(
struct dma_chan *chan, dma_addr_t *pq, dma_addr_t *src,
unsigned int src_cnt, const unsigned char *scf, size_t len,
enum sum_check_flags *pqres, unsigned long flags);
struct dma_async_tx_descriptor *(*device_prep_dma_interrupt)(
struct dma_chan *chan, unsigned long flags);
struct dma_async_tx_descriptor *(*device_prep_dma_sg)(
struct dma_chan *chan,
struct scatterlist *dst_sg, unsigned int dst_nents,
struct scatterlist *src_sg, unsigned int src_nents,
unsigned long flags);
struct dma_async_tx_descriptor *(*device_prep_slave_sg)(
struct dma_chan *chan, struct scatterlist *sgl,
unsigned int sg_len, enum dma_transfer_direction direction,
unsigned long flags, void *context);
struct dma_async_tx_descriptor *(*device_prep_dma_cyclic)(
struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
size_t period_len, enum dma_transfer_direction direction,
unsigned long flags);
struct dma_async_tx_descriptor *(*device_prep_interleaved_dma)(
struct dma_chan *chan, struct dma_interleaved_template *xt,
unsigned long flags);
int (*device_control)(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
unsigned long arg);
enum dma_status (*device_tx_status)(struct dma_chan *chan,
dma_cookie_t cookie,
struct dma_tx_state *txstate);
void (*device_issue_pending)(struct dma_chan *chan);
int (*device_slave_caps)(struct dma_chan *chan, struct dma_slave_caps *caps);
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dmaengine_device_control(struct dma_chan *chan,
enum dma_ctrl_cmd cmd,
unsigned long arg)
{
if (chan->device->device_control)
return chan->device->device_control(chan, cmd, arg);
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dmaengine_slave_config(struct dma_chan *chan,
struct dma_slave_config *config)
{
return dmaengine_device_control(chan, DMA_SLAVE_CONFIG,
(unsigned long)config);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool is_slave_direction(enum dma_transfer_direction direction)
{
return (direction == DMA_MEM_TO_DEV) || (direction == DMA_DEV_TO_MEM);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_async_tx_descriptor *dmaengine_prep_slave_single(
struct dma_chan *chan, dma_addr_t buf, size_t len,
enum dma_transfer_direction dir, unsigned long flags)
{
struct scatterlist sg;
sg_init_table(&sg, 1);
((&sg)->dma_address) = buf;
((&sg)->length) = len;
return chan->device->device_prep_slave_sg(chan, &sg, 1,
dir, flags, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_async_tx_descriptor *dmaengine_prep_slave_sg(
struct dma_chan *chan, struct scatterlist *sgl, unsigned int sg_len,
enum dma_transfer_direction dir, unsigned long flags)
{
return chan->device->device_prep_slave_sg(chan, sgl, sg_len,
dir, flags, ((void *)0));
}
# 741 "include/linux/dmaengine.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_async_tx_descriptor *dmaengine_prep_dma_cyclic(
struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
size_t period_len, enum dma_transfer_direction dir,
unsigned long flags)
{
return chan->device->device_prep_dma_cyclic(chan, buf_addr, buf_len,
period_len, dir, flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_async_tx_descriptor *dmaengine_prep_interleaved_dma(
struct dma_chan *chan, struct dma_interleaved_template *xt,
unsigned long flags)
{
return chan->device->device_prep_interleaved_dma(chan, xt, flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_async_tx_descriptor *dmaengine_prep_dma_sg(
struct dma_chan *chan,
struct scatterlist *dst_sg, unsigned int dst_nents,
struct scatterlist *src_sg, unsigned int src_nents,
unsigned long flags)
{
return chan->device->device_prep_dma_sg(chan, dst_sg, dst_nents,
src_sg, src_nents, flags);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps)
{
if (!chan || !caps)
return -22;
if (!test_bit(DMA_SLAVE, chan->device->cap_mask.bits))
return -6;
if (chan->device->device_slave_caps)
return chan->device->device_slave_caps(chan, caps);
return -6;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dmaengine_terminate_all(struct dma_chan *chan)
{
return dmaengine_device_control(chan, DMA_TERMINATE_ALL, 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dmaengine_pause(struct dma_chan *chan)
{
return dmaengine_device_control(chan, DMA_PAUSE, 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dmaengine_resume(struct dma_chan *chan)
{
return dmaengine_device_control(chan, DMA_RESUME, 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum dma_status dmaengine_tx_status(struct dma_chan *chan,
dma_cookie_t cookie, struct dma_tx_state *state)
{
return chan->device->device_tx_status(chan, cookie, state);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) dma_cookie_t dmaengine_submit(struct dma_async_tx_descriptor *desc)
{
return desc->tx_submit(desc);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dmaengine_check_align(u8 align, size_t off1, size_t off2, size_t len)
{
size_t mask;
if (!align)
return true;
mask = (1 << align) - 1;
if (mask & (off1 | off2 | len))
return false;
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool is_dma_copy_aligned(struct dma_device *dev, size_t off1,
size_t off2, size_t len)
{
return dmaengine_check_align(dev->copy_align, off1, off2, len);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool is_dma_xor_aligned(struct dma_device *dev, size_t off1,
size_t off2, size_t len)
{
return dmaengine_check_align(dev->xor_align, off1, off2, len);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool is_dma_pq_aligned(struct dma_device *dev, size_t off1,
size_t off2, size_t len)
{
return dmaengine_check_align(dev->pq_align, off1, off2, len);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool is_dma_fill_aligned(struct dma_device *dev, size_t off1,
size_t off2, size_t len)
{
return dmaengine_check_align(dev->fill_align, off1, off2, len);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
dma_set_maxpq(struct dma_device *dma, int maxpq, int has_pq_continue)
{
dma->max_pq = maxpq;
if (has_pq_continue)
dma->max_pq |= (1 << 15);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dmaf_continue(enum dma_ctrl_flags flags)
{
return (flags & DMA_PREP_CONTINUE) == DMA_PREP_CONTINUE;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dmaf_p_disabled_continue(enum dma_ctrl_flags flags)
{
enum dma_ctrl_flags mask = DMA_PREP_CONTINUE | DMA_PREP_PQ_DISABLE_P;
return (flags & mask) == mask;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dma_dev_has_pq_continue(struct dma_device *dma)
{
return (dma->max_pq & (1 << 15)) == (1 << 15);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned short dma_dev_to_maxpq(struct dma_device *dma)
{
return dma->max_pq & ~(1 << 15);
}
# 887 "include/linux/dmaengine.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dma_maxpq(struct dma_device *dma, enum dma_ctrl_flags flags)
{
if (dma_dev_has_pq_continue(dma) || !dmaf_continue(flags))
return dma_dev_to_maxpq(dma);
else if (dmaf_p_disabled_continue(flags))
return dma_dev_to_maxpq(dma) - 1;
else if (dmaf_continue(flags))
return dma_dev_to_maxpq(dma) - 3;
BUG();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dmaengine_get(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dmaengine_put(void)
{
}
# 921 "include/linux/dmaengine.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void async_dmaengine_get(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void async_dmaengine_put(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_chan *
async_dma_find_channel(enum dma_transaction_type type)
{
return ((void *)0);
}
void dma_async_tx_descriptor_init(struct dma_async_tx_descriptor *tx,
struct dma_chan *chan);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void async_tx_ack(struct dma_async_tx_descriptor *tx)
{
tx->flags |= DMA_CTRL_ACK;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void async_tx_clear_ack(struct dma_async_tx_descriptor *tx)
{
tx->flags &= ~DMA_CTRL_ACK;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool async_tx_test_ack(struct dma_async_tx_descriptor *tx)
{
return (tx->flags & DMA_CTRL_ACK) == DMA_CTRL_ACK;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
__dma_cap_set(enum dma_transaction_type tx_type, dma_cap_mask_t *dstp)
{
set_bit(tx_type, dstp->bits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
__dma_cap_clear(enum dma_transaction_type tx_type, dma_cap_mask_t *dstp)
{
clear_bit(tx_type, dstp->bits);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __dma_cap_zero(dma_cap_mask_t *dstp)
{
bitmap_zero(dstp->bits, DMA_TX_TYPE_END);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
__dma_has_cap(enum dma_transaction_type tx_type, dma_cap_mask_t *srcp)
{
return test_bit(tx_type, srcp->bits);
}
# 988 "include/linux/dmaengine.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_async_issue_pending(struct dma_chan *chan)
{
chan->device->device_issue_pending(chan);
}
# 1004 "include/linux/dmaengine.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum dma_status dma_async_is_tx_complete(struct dma_chan *chan,
dma_cookie_t cookie, dma_cookie_t *last, dma_cookie_t *used)
{
struct dma_tx_state state;
enum dma_status status;
status = chan->device->device_tx_status(chan, cookie, &state);
if (last)
*last = state.last;
if (used)
*used = state.used;
return status;
}
# 1027 "include/linux/dmaengine.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum dma_status dma_async_is_complete(dma_cookie_t cookie,
dma_cookie_t last_complete, dma_cookie_t last_used)
{
if (last_complete <= last_used) {
if ((cookie <= last_complete) || (cookie > last_used))
return DMA_COMPLETE;
} else {
if ((cookie <= last_complete) && (cookie > last_used))
return DMA_COMPLETE;
}
return DMA_IN_PROGRESS;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
dma_set_tx_state(struct dma_tx_state *st, dma_cookie_t last, dma_cookie_t used, u32 residue)
{
if (st) {
st->last = last;
st->used = used;
st->residue = residue;
}
}
# 1062 "include/linux/dmaengine.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie)
{
return DMA_COMPLETE;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx)
{
return DMA_COMPLETE;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_issue_pending_all(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
dma_filter_fn fn, void *fn_param)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_chan *dma_request_slave_channel_reason(
struct device *dev, const char *name)
{
return ERR_PTR(-19);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_chan *dma_request_slave_channel(struct device *dev,
const char *name)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dma_release_channel(struct dma_chan *chan)
{
}
int dma_async_device_register(struct dma_device *device);
void dma_async_device_unregister(struct dma_device *device);
void dma_run_dependencies(struct dma_async_tx_descriptor *tx);
struct dma_chan *dma_get_slave_channel(struct dma_chan *chan);
struct dma_chan *dma_get_any_slave_channel(struct dma_device *device);
struct dma_chan *net_dma_find_channel(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct dma_chan
*__dma_request_slave_channel_compat(const dma_cap_mask_t *mask,
dma_filter_fn fn, void *fn_param,
struct device *dev, char *name)
{
struct dma_chan *chan;
chan = dma_request_slave_channel(dev, name);
if (chan)
return chan;
return __dma_request_channel(mask, fn, fn_param);
}
struct dma_page_list {
char *base_address;
int nr_pages;
struct page **pages;
};
struct dma_pinned_list {
int nr_iovecs;
struct dma_page_list page_list[0];
};
struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len);
void dma_unpin_iovec_pages(struct dma_pinned_list* pinned_list);
dma_cookie_t dma_memcpy_to_iovec(struct dma_chan *chan, struct iovec *iov,
struct dma_pinned_list *pinned_list, unsigned char *kdata, size_t len);
dma_cookie_t dma_memcpy_pg_to_iovec(struct dma_chan *chan, struct iovec *iov,
struct dma_pinned_list *pinned_list, struct page *page,
unsigned int offset, size_t len);
# 40 "include/linux/netdevice.h" 2
# 1 "include/linux/dynamic_queue_limits.h" 1
# 40 "include/linux/dynamic_queue_limits.h"
struct dql {
unsigned int num_queued;
unsigned int adj_limit;
unsigned int last_obj_cnt;
unsigned int limit __attribute__((__aligned__((1 << 5))));
unsigned int num_completed;
unsigned int prev_ovlimit;
unsigned int prev_num_queued;
unsigned int prev_last_obj_cnt;
unsigned int lowest_slack;
unsigned long slack_start_time;
unsigned int max_limit;
unsigned int min_limit;
unsigned int slack_hold_time;
};
# 72 "include/linux/dynamic_queue_limits.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dql_queued(struct dql *dql, unsigned int count)
{
__BUG_ON((unsigned long)(count > ((~0U) / 16)));
dql->last_obj_cnt = count;
__asm__ __volatile__("": : :"memory");
dql->num_queued += count;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dql_avail(const struct dql *dql)
{
return (*(volatile typeof(dql->adj_limit) *)&(dql->adj_limit)) - (*(volatile typeof(dql->num_queued) *)&(dql->num_queued));
}
void dql_completed(struct dql *dql, unsigned int count);
void dql_reset(struct dql *dql);
int dql_init(struct dql *dql, unsigned hold_time);
# 42 "include/linux/netdevice.h" 2
# 1 "include/linux/ethtool.h" 1
# 15 "include/linux/ethtool.h"
# 1 "include/linux/compat.h" 1
# 16 "include/linux/ethtool.h" 2
# 1 "include/uapi/linux/ethtool.h" 1
# 17 "include/uapi/linux/ethtool.h"
# 1 "include/linux/if_ether.h" 1
# 24 "include/linux/if_ether.h"
# 1 "include/uapi/linux/if_ether.h" 1
# 139 "include/uapi/linux/if_ether.h"
struct ethhdr {
unsigned char h_dest[6];
unsigned char h_source[6];
__be16 h_proto;
} __attribute__((packed));
# 25 "include/linux/if_ether.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct ethhdr *eth_hdr(const struct sk_buff *skb)
{
return (struct ethhdr *)skb_mac_header(skb);
}
int eth_header_parse(const struct sk_buff *skb, unsigned char *haddr);
extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len);
# 18 "include/uapi/linux/ethtool.h" 2
# 93 "include/uapi/linux/ethtool.h"
struct ethtool_cmd {
__u32 cmd;
__u32 supported;
__u32 advertising;
__u16 speed;
__u8 duplex;
__u8 port;
__u8 phy_address;
__u8 transceiver;
__u8 autoneg;
__u8 mdio_support;
__u32 maxtxpkt;
__u32 maxrxpkt;
__u16 speed_hi;
__u8 eth_tp_mdix;
__u8 eth_tp_mdix_ctrl;
__u32 lp_advertising;
__u32 reserved[2];
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
__u32 speed)
{
ep->speed = (__u16)speed;
ep->speed_hi = (__u16)(speed >> 16);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
{
return (ep->speed_hi << 16) | ep->speed;
}
# 173 "include/uapi/linux/ethtool.h"
struct ethtool_drvinfo {
__u32 cmd;
char driver[32];
char version[32];
char fw_version[32];
char bus_info[32];
char reserved1[32];
char reserved2[12];
__u32 n_priv_flags;
__u32 n_stats;
__u32 testinfo_len;
__u32 eedump_len;
__u32 regdump_len;
};
# 199 "include/uapi/linux/ethtool.h"
struct ethtool_wolinfo {
__u32 cmd;
__u32 supported;
__u32 wolopts;
__u8 sopass[6];
};
struct ethtool_value {
__u32 cmd;
__u32 data;
};
enum tunable_id {
ETHTOOL_ID_UNSPEC,
ETHTOOL_RX_COPYBREAK,
ETHTOOL_TX_COPYBREAK,
};
enum tunable_type_id {
ETHTOOL_TUNABLE_UNSPEC,
ETHTOOL_TUNABLE_U8,
ETHTOOL_TUNABLE_U16,
ETHTOOL_TUNABLE_U32,
ETHTOOL_TUNABLE_U64,
ETHTOOL_TUNABLE_STRING,
ETHTOOL_TUNABLE_S8,
ETHTOOL_TUNABLE_S16,
ETHTOOL_TUNABLE_S32,
ETHTOOL_TUNABLE_S64,
};
struct ethtool_tunable {
__u32 cmd;
__u32 id;
__u32 type_id;
__u32 len;
void *data[0];
};
# 254 "include/uapi/linux/ethtool.h"
struct ethtool_regs {
__u32 cmd;
__u32 version;
__u32 len;
__u8 data[0];
};
# 279 "include/uapi/linux/ethtool.h"
struct ethtool_eeprom {
__u32 cmd;
__u32 magic;
__u32 offset;
__u32 len;
__u8 data[0];
};
# 304 "include/uapi/linux/ethtool.h"
struct ethtool_eee {
__u32 cmd;
__u32 supported;
__u32 advertised;
__u32 lp_advertised;
__u32 eee_active;
__u32 eee_enabled;
__u32 tx_lpi_enabled;
__u32 tx_lpi_timer;
__u32 reserved[2];
};
# 326 "include/uapi/linux/ethtool.h"
struct ethtool_modinfo {
__u32 cmd;
__u32 type;
__u32 eeprom_len;
__u32 reserved[8];
};
# 406 "include/uapi/linux/ethtool.h"
struct ethtool_coalesce {
__u32 cmd;
__u32 rx_coalesce_usecs;
__u32 rx_max_coalesced_frames;
__u32 rx_coalesce_usecs_irq;
__u32 rx_max_coalesced_frames_irq;
__u32 tx_coalesce_usecs;
__u32 tx_max_coalesced_frames;
__u32 tx_coalesce_usecs_irq;
__u32 tx_max_coalesced_frames_irq;
__u32 stats_block_coalesce_usecs;
__u32 use_adaptive_rx_coalesce;
__u32 use_adaptive_tx_coalesce;
__u32 pkt_rate_low;
__u32 rx_coalesce_usecs_low;
__u32 rx_max_coalesced_frames_low;
__u32 tx_coalesce_usecs_low;
__u32 tx_max_coalesced_frames_low;
__u32 pkt_rate_high;
__u32 rx_coalesce_usecs_high;
__u32 rx_max_coalesced_frames_high;
__u32 tx_coalesce_usecs_high;
__u32 tx_max_coalesced_frames_high;
__u32 rate_sample_interval;
};
# 457 "include/uapi/linux/ethtool.h"
struct ethtool_ringparam {
__u32 cmd;
__u32 rx_max_pending;
__u32 rx_mini_max_pending;
__u32 rx_jumbo_max_pending;
__u32 tx_max_pending;
__u32 rx_pending;
__u32 rx_mini_pending;
__u32 rx_jumbo_pending;
__u32 tx_pending;
};
# 485 "include/uapi/linux/ethtool.h"
struct ethtool_channels {
__u32 cmd;
__u32 max_rx;
__u32 max_tx;
__u32 max_other;
__u32 max_combined;
__u32 rx_count;
__u32 tx_count;
__u32 other_count;
__u32 combined_count;
};
# 519 "include/uapi/linux/ethtool.h"
struct ethtool_pauseparam {
__u32 cmd;
__u32 autoneg;
__u32 rx_pause;
__u32 tx_pause;
};
# 538 "include/uapi/linux/ethtool.h"
enum ethtool_stringset {
ETH_SS_TEST = 0,
ETH_SS_STATS,
ETH_SS_PRIV_FLAGS,
ETH_SS_NTUPLE_FILTERS,
ETH_SS_FEATURES,
};
# 558 "include/uapi/linux/ethtool.h"
struct ethtool_gstrings {
__u32 cmd;
__u32 string_set;
__u32 len;
__u8 data[0];
};
# 582 "include/uapi/linux/ethtool.h"
struct ethtool_sset_info {
__u32 cmd;
__u32 reserved;
__u64 sset_mask;
__u32 data[0];
};
# 599 "include/uapi/linux/ethtool.h"
enum ethtool_test_flags {
ETH_TEST_FL_OFFLINE = (1 << 0),
ETH_TEST_FL_FAILED = (1 << 1),
ETH_TEST_FL_EXTERNAL_LB = (1 << 2),
ETH_TEST_FL_EXTERNAL_LB_DONE = (1 << 3),
};
# 620 "include/uapi/linux/ethtool.h"
struct ethtool_test {
__u32 cmd;
__u32 flags;
__u32 reserved;
__u32 len;
__u64 data[0];
};
# 639 "include/uapi/linux/ethtool.h"
struct ethtool_stats {
__u32 cmd;
__u32 n_stats;
__u64 data[0];
};
# 656 "include/uapi/linux/ethtool.h"
struct ethtool_perm_addr {
__u32 cmd;
__u32 size;
__u8 data[0];
};
# 671 "include/uapi/linux/ethtool.h"
enum ethtool_flags {
ETH_FLAG_TXVLAN = (1 << 7),
ETH_FLAG_RXVLAN = (1 << 8),
ETH_FLAG_LRO = (1 << 15),
ETH_FLAG_NTUPLE = (1 << 27),
ETH_FLAG_RXHASH = (1 << 28),
};
# 695 "include/uapi/linux/ethtool.h"
struct ethtool_tcpip4_spec {
__be32 ip4src;
__be32 ip4dst;
__be16 psrc;
__be16 pdst;
__u8 tos;
};
# 712 "include/uapi/linux/ethtool.h"
struct ethtool_ah_espip4_spec {
__be32 ip4src;
__be32 ip4dst;
__be32 spi;
__u8 tos;
};
# 730 "include/uapi/linux/ethtool.h"
struct ethtool_usrip4_spec {
__be32 ip4src;
__be32 ip4dst;
__be32 l4_4_bytes;
__u8 tos;
__u8 ip_ver;
__u8 proto;
};
union ethtool_flow_union {
struct ethtool_tcpip4_spec tcp_ip4_spec;
struct ethtool_tcpip4_spec udp_ip4_spec;
struct ethtool_tcpip4_spec sctp_ip4_spec;
struct ethtool_ah_espip4_spec ah_ip4_spec;
struct ethtool_ah_espip4_spec esp_ip4_spec;
struct ethtool_usrip4_spec usr_ip4_spec;
struct ethhdr ether_spec;
__u8 hdata[52];
};
# 761 "include/uapi/linux/ethtool.h"
struct ethtool_flow_ext {
__u8 padding[2];
unsigned char h_dest[6];
__be16 vlan_etype;
__be16 vlan_tci;
__be32 data[2];
};
# 785 "include/uapi/linux/ethtool.h"
struct ethtool_rx_flow_spec {
__u32 flow_type;
union ethtool_flow_union h_u;
struct ethtool_flow_ext h_ext;
union ethtool_flow_union m_u;
struct ethtool_flow_ext m_ext;
__u64 ring_cookie;
__u32 location;
};
# 847 "include/uapi/linux/ethtool.h"
struct ethtool_rxnfc {
__u32 cmd;
__u32 flow_type;
__u64 data;
struct ethtool_rx_flow_spec fs;
__u32 rule_cnt;
__u32 rule_locs[0];
};
# 870 "include/uapi/linux/ethtool.h"
struct ethtool_rxfh_indir {
__u32 cmd;
__u32 size;
__u32 ring_index[0];
};
# 898 "include/uapi/linux/ethtool.h"
struct ethtool_rxfh {
__u32 cmd;
__u32 rss_context;
__u32 indir_size;
__u32 key_size;
__u32 rsvd[2];
__u32 rss_config[0];
};
# 924 "include/uapi/linux/ethtool.h"
struct ethtool_rx_ntuple_flow_spec {
__u32 flow_type;
union {
struct ethtool_tcpip4_spec tcp_ip4_spec;
struct ethtool_tcpip4_spec udp_ip4_spec;
struct ethtool_tcpip4_spec sctp_ip4_spec;
struct ethtool_ah_espip4_spec ah_ip4_spec;
struct ethtool_ah_espip4_spec esp_ip4_spec;
struct ethtool_usrip4_spec usr_ip4_spec;
struct ethhdr ether_spec;
__u8 hdata[72];
} h_u, m_u;
__u16 vlan_tag;
__u16 vlan_tag_mask;
__u64 data;
__u64 data_mask;
__s32 action;
};
struct ethtool_rx_ntuple {
__u32 cmd;
struct ethtool_rx_ntuple_flow_spec fs;
};
enum ethtool_flash_op_type {
ETHTOOL_FLASH_ALL_REGIONS = 0,
};
struct ethtool_flash {
__u32 cmd;
__u32 region;
char data[128];
};
# 983 "include/uapi/linux/ethtool.h"
struct ethtool_dump {
__u32 cmd;
__u32 version;
__u32 flag;
__u32 len;
__u8 data[0];
};
# 1002 "include/uapi/linux/ethtool.h"
struct ethtool_get_features_block {
__u32 available;
__u32 requested;
__u32 active;
__u32 never_changed;
};
# 1017 "include/uapi/linux/ethtool.h"
struct ethtool_gfeatures {
__u32 cmd;
__u32 size;
struct ethtool_get_features_block features[0];
};
struct ethtool_set_features_block {
__u32 valid;
__u32 requested;
};
struct ethtool_sfeatures {
__u32 cmd;
__u32 size;
struct ethtool_set_features_block features[0];
};
# 1058 "include/uapi/linux/ethtool.h"
struct ethtool_ts_info {
__u32 cmd;
__u32 so_timestamping;
__s32 phc_index;
__u32 tx_types;
__u32 tx_reserved[3];
__u32 rx_filters;
__u32 rx_reserved[3];
};
# 1093 "include/uapi/linux/ethtool.h"
enum ethtool_sfeatures_retval_bits {
ETHTOOL_F_UNSUPPORTED__BIT,
ETHTOOL_F_WISH__BIT,
ETHTOOL_F_COMPAT__BIT,
};
# 1354 "include/uapi/linux/ethtool.h"
enum ethtool_reset_flags {
ETH_RESET_MGMT = 1 << 0,
ETH_RESET_IRQ = 1 << 1,
ETH_RESET_DMA = 1 << 2,
ETH_RESET_FILTER = 1 << 3,
ETH_RESET_OFFLOAD = 1 << 4,
ETH_RESET_MAC = 1 << 5,
ETH_RESET_PHY = 1 << 6,
ETH_RESET_RAM = 1 << 7,
ETH_RESET_DEDICATED = 0x0000ffff,
ETH_RESET_ALL = 0xffffffff,
};
# 17 "include/linux/ethtool.h" 2
# 43 "include/linux/ethtool.h"
extern int __ethtool_get_settings(struct net_device *dev,
struct ethtool_cmd *cmd);
# 55 "include/linux/ethtool.h"
enum ethtool_phys_id_state {
ETHTOOL_ID_INACTIVE,
ETHTOOL_ID_ACTIVE,
ETHTOOL_ID_ON,
ETHTOOL_ID_OFF
};
struct net_device;
u32 ethtool_op_get_link(struct net_device *dev);
int ethtool_op_get_ts_info(struct net_device *dev, struct ethtool_ts_info *eti);
# 75 "include/linux/ethtool.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 ethtool_rxfh_indir_default(u32 index, u32 n_rx_rings)
{
return index % n_rx_rings;
}
# 200 "include/linux/ethtool.h"
struct ethtool_ops {
int (*get_settings)(struct net_device *, struct ethtool_cmd *);
int (*set_settings)(struct net_device *, struct ethtool_cmd *);
void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
int (*get_regs_len)(struct net_device *);
void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
u32 (*get_msglevel)(struct net_device *);
void (*set_msglevel)(struct net_device *, u32);
int (*nway_reset)(struct net_device *);
u32 (*get_link)(struct net_device *);
int (*get_eeprom_len)(struct net_device *);
int (*get_eeprom)(struct net_device *,
struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct net_device *,
struct ethtool_eeprom *, u8 *);
int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
void (*get_ringparam)(struct net_device *,
struct ethtool_ringparam *);
int (*set_ringparam)(struct net_device *,
struct ethtool_ringparam *);
void (*get_pauseparam)(struct net_device *,
struct ethtool_pauseparam*);
int (*set_pauseparam)(struct net_device *,
struct ethtool_pauseparam*);
void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
void (*get_strings)(struct net_device *, u32 stringset, u8 *);
int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
void (*get_ethtool_stats)(struct net_device *,
struct ethtool_stats *, u64 *);
int (*begin)(struct net_device *);
void (*complete)(struct net_device *);
u32 (*get_priv_flags)(struct net_device *);
int (*set_priv_flags)(struct net_device *, u32);
int (*get_sset_count)(struct net_device *, int);
int (*get_rxnfc)(struct net_device *,
struct ethtool_rxnfc *, u32 *rule_locs);
int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
int (*flash_device)(struct net_device *, struct ethtool_flash *);
int (*reset)(struct net_device *, u32 *);
u32 (*get_rxfh_key_size)(struct net_device *);
u32 (*get_rxfh_indir_size)(struct net_device *);
int (*get_rxfh)(struct net_device *, u32 *indir, u8 *key);
int (*set_rxfh)(struct net_device *, const u32 *indir,
const u8 *key);
void (*get_channels)(struct net_device *, struct ethtool_channels *);
int (*set_channels)(struct net_device *, struct ethtool_channels *);
int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
int (*get_dump_data)(struct net_device *,
struct ethtool_dump *, void *);
int (*set_dump)(struct net_device *, struct ethtool_dump *);
int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
int (*get_module_info)(struct net_device *,
struct ethtool_modinfo *);
int (*get_module_eeprom)(struct net_device *,
struct ethtool_eeprom *, u8 *);
int (*get_eee)(struct net_device *, struct ethtool_eee *);
int (*set_eee)(struct net_device *, struct ethtool_eee *);
int (*get_tunable)(struct net_device *,
const struct ethtool_tunable *, void *);
int (*set_tunable)(struct net_device *,
const struct ethtool_tunable *, const void *);
};
# 44 "include/linux/netdevice.h" 2
# 1 "include/net/net_namespace.h" 1
# 12 "include/net/net_namespace.h"
# 1 "include/net/flow.h" 1
# 22 "include/net/flow.h"
struct flowi_common {
int flowic_oif;
int flowic_iif;
__u32 flowic_mark;
__u8 flowic_tos;
__u8 flowic_scope;
__u8 flowic_proto;
__u8 flowic_flags;
__u32 flowic_secid;
};
union flowi_uli {
struct {
__be16 dport;
__be16 sport;
} ports;
struct {
__u8 type;
__u8 code;
} icmpt;
struct {
__le16 dport;
__le16 sport;
} dnports;
__be32 spi;
__be32 gre_key;
struct {
__u8 type;
} mht;
};
struct flowi4 {
struct flowi_common __fl_common;
# 71 "include/net/flow.h"
__be32 saddr;
__be32 daddr;
union flowi_uli uli;
} __attribute__((__aligned__(32/8)));
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void flowi4_init_output(struct flowi4 *fl4, int oif,
__u32 mark, __u8 tos, __u8 scope,
__u8 proto, __u8 flags,
__be32 daddr, __be32 saddr,
__be16 dport, __be16 sport)
{
fl4->__fl_common.flowic_oif = oif;
fl4->__fl_common.flowic_iif = 1;
fl4->__fl_common.flowic_mark = mark;
fl4->__fl_common.flowic_tos = tos;
fl4->__fl_common.flowic_scope = scope;
fl4->__fl_common.flowic_proto = proto;
fl4->__fl_common.flowic_flags = flags;
fl4->__fl_common.flowic_secid = 0;
fl4->daddr = daddr;
fl4->saddr = saddr;
fl4->uli.ports.dport = dport;
fl4->uli.ports.sport = sport;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void flowi4_update_output(struct flowi4 *fl4, int oif, __u8 tos,
__be32 daddr, __be32 saddr)
{
fl4->__fl_common.flowic_oif = oif;
fl4->__fl_common.flowic_tos = tos;
fl4->daddr = daddr;
fl4->saddr = saddr;
}
struct flowi6 {
struct flowi_common __fl_common;
# 125 "include/net/flow.h"
struct in6_addr daddr;
struct in6_addr saddr;
__be32 flowlabel;
union flowi_uli uli;
} __attribute__((__aligned__(32/8)));
struct flowidn {
struct flowi_common __fl_common;
__le16 daddr;
__le16 saddr;
union flowi_uli uli;
} __attribute__((__aligned__(32/8)));
struct flowi {
union {
struct flowi_common __fl_common;
struct flowi4 ip4;
struct flowi6 ip6;
struct flowidn dn;
} u;
# 168 "include/net/flow.h"
} __attribute__((__aligned__(32/8)));
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct flowi *flowi4_to_flowi(struct flowi4 *fl4)
{
return ({ const typeof( ((struct flowi *)0)->u.ip4 ) *__mptr = (fl4); (struct flowi *)( (char *)__mptr - __builtin_offsetof(struct flowi,u.ip4) );});
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct flowi *flowi6_to_flowi(struct flowi6 *fl6)
{
return ({ const typeof( ((struct flowi *)0)->u.ip6 ) *__mptr = (fl6); (struct flowi *)( (char *)__mptr - __builtin_offsetof(struct flowi,u.ip6) );});
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct flowi *flowidn_to_flowi(struct flowidn *fldn)
{
return ({ const typeof( ((struct flowi *)0)->u.dn ) *__mptr = (fldn); (struct flowi *)( (char *)__mptr - __builtin_offsetof(struct flowi,u.dn) );});
}
typedef unsigned long flow_compare_t;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) size_t flow_key_size(u16 family)
{
switch (family) {
case 2:
((void)sizeof(char[1 - 2*!!(sizeof(struct flowi4) % sizeof(flow_compare_t))]));
return sizeof(struct flowi4) / sizeof(flow_compare_t);
case 10:
((void)sizeof(char[1 - 2*!!(sizeof(struct flowi6) % sizeof(flow_compare_t))]));
return sizeof(struct flowi6) / sizeof(flow_compare_t);
case 12:
((void)sizeof(char[1 - 2*!!(sizeof(struct flowidn) % sizeof(flow_compare_t))]));
return sizeof(struct flowidn) / sizeof(flow_compare_t);
}
return 0;
}
struct net;
struct sock;
struct flow_cache_ops;
struct flow_cache_object {
const struct flow_cache_ops *ops;
};
struct flow_cache_ops {
struct flow_cache_object *(*get)(struct flow_cache_object *);
int (*check)(struct flow_cache_object *);
void (*delete)(struct flow_cache_object *);
};
typedef struct flow_cache_object *(*flow_resolve_t)(
struct net *net, const struct flowi *key, u16 family,
u8 dir, struct flow_cache_object *oldobj, void *ctx);
struct flow_cache_object *flow_cache_lookup(struct net *net,
const struct flowi *key, u16 family,
u8 dir, flow_resolve_t resolver,
void *ctx);
int flow_cache_init(struct net *net);
void flow_cache_fini(struct net *net);
void flow_cache_flush(struct net *net);
void flow_cache_flush_deferred(struct net *net);
extern atomic_t flow_cache_genid;
# 13 "include/net/net_namespace.h" 2
# 1 "include/net/netns/core.h" 1
struct ctl_table_header;
struct prot_inuse;
struct netns_core {
struct ctl_table_header *sysctl_hdr;
int sysctl_somaxconn;
struct prot_inuse *inuse;
};
# 14 "include/net/net_namespace.h" 2
# 1 "include/net/netns/mib.h" 1
# 1 "include/net/snmp.h" 1
# 23 "include/net/snmp.h"
# 1 "./include/uapi/linux/snmp.h" 1
# 18 "./include/uapi/linux/snmp.h"
enum
{
IPSTATS_MIB_NUM = 0,
IPSTATS_MIB_INPKTS,
IPSTATS_MIB_INOCTETS,
IPSTATS_MIB_INDELIVERS,
IPSTATS_MIB_OUTFORWDATAGRAMS,
IPSTATS_MIB_OUTPKTS,
IPSTATS_MIB_OUTOCTETS,
IPSTATS_MIB_INHDRERRORS,
IPSTATS_MIB_INTOOBIGERRORS,
IPSTATS_MIB_INNOROUTES,
IPSTATS_MIB_INADDRERRORS,
IPSTATS_MIB_INUNKNOWNPROTOS,
IPSTATS_MIB_INTRUNCATEDPKTS,
IPSTATS_MIB_INDISCARDS,
IPSTATS_MIB_OUTDISCARDS,
IPSTATS_MIB_OUTNOROUTES,
IPSTATS_MIB_REASMTIMEOUT,
IPSTATS_MIB_REASMREQDS,
IPSTATS_MIB_REASMOKS,
IPSTATS_MIB_REASMFAILS,
IPSTATS_MIB_FRAGOKS,
IPSTATS_MIB_FRAGFAILS,
IPSTATS_MIB_FRAGCREATES,
IPSTATS_MIB_INMCASTPKTS,
IPSTATS_MIB_OUTMCASTPKTS,
IPSTATS_MIB_INBCASTPKTS,
IPSTATS_MIB_OUTBCASTPKTS,
IPSTATS_MIB_INMCASTOCTETS,
IPSTATS_MIB_OUTMCASTOCTETS,
IPSTATS_MIB_INBCASTOCTETS,
IPSTATS_MIB_OUTBCASTOCTETS,
IPSTATS_MIB_CSUMERRORS,
IPSTATS_MIB_NOECTPKTS,
IPSTATS_MIB_ECT1PKTS,
IPSTATS_MIB_ECT0PKTS,
IPSTATS_MIB_CEPKTS,
__IPSTATS_MIB_MAX
};
enum
{
ICMP_MIB_NUM = 0,
ICMP_MIB_INMSGS,
ICMP_MIB_INERRORS,
ICMP_MIB_INDESTUNREACHS,
ICMP_MIB_INTIMEEXCDS,
ICMP_MIB_INPARMPROBS,
ICMP_MIB_INSRCQUENCHS,
ICMP_MIB_INREDIRECTS,
ICMP_MIB_INECHOS,
ICMP_MIB_INECHOREPS,
ICMP_MIB_INTIMESTAMPS,
ICMP_MIB_INTIMESTAMPREPS,
ICMP_MIB_INADDRMASKS,
ICMP_MIB_INADDRMASKREPS,
ICMP_MIB_OUTMSGS,
ICMP_MIB_OUTERRORS,
ICMP_MIB_OUTDESTUNREACHS,
ICMP_MIB_OUTTIMEEXCDS,
ICMP_MIB_OUTPARMPROBS,
ICMP_MIB_OUTSRCQUENCHS,
ICMP_MIB_OUTREDIRECTS,
ICMP_MIB_OUTECHOS,
ICMP_MIB_OUTECHOREPS,
ICMP_MIB_OUTTIMESTAMPS,
ICMP_MIB_OUTTIMESTAMPREPS,
ICMP_MIB_OUTADDRMASKS,
ICMP_MIB_OUTADDRMASKREPS,
ICMP_MIB_CSUMERRORS,
__ICMP_MIB_MAX
};
enum
{
ICMP6_MIB_NUM = 0,
ICMP6_MIB_INMSGS,
ICMP6_MIB_INERRORS,
ICMP6_MIB_OUTMSGS,
ICMP6_MIB_OUTERRORS,
ICMP6_MIB_CSUMERRORS,
__ICMP6_MIB_MAX
};
# 123 "./include/uapi/linux/snmp.h"
enum
{
TCP_MIB_NUM = 0,
TCP_MIB_RTOALGORITHM,
TCP_MIB_RTOMIN,
TCP_MIB_RTOMAX,
TCP_MIB_MAXCONN,
TCP_MIB_ACTIVEOPENS,
TCP_MIB_PASSIVEOPENS,
TCP_MIB_ATTEMPTFAILS,
TCP_MIB_ESTABRESETS,
TCP_MIB_CURRESTAB,
TCP_MIB_INSEGS,
TCP_MIB_OUTSEGS,
TCP_MIB_RETRANSSEGS,
TCP_MIB_INERRS,
TCP_MIB_OUTRSTS,
TCP_MIB_CSUMERRORS,
__TCP_MIB_MAX
};
enum
{
UDP_MIB_NUM = 0,
UDP_MIB_INDATAGRAMS,
UDP_MIB_NOPORTS,
UDP_MIB_INERRORS,
UDP_MIB_OUTDATAGRAMS,
UDP_MIB_RCVBUFERRORS,
UDP_MIB_SNDBUFERRORS,
UDP_MIB_CSUMERRORS,
__UDP_MIB_MAX
};
enum
{
LINUX_MIB_NUM = 0,
LINUX_MIB_SYNCOOKIESSENT,
LINUX_MIB_SYNCOOKIESRECV,
LINUX_MIB_SYNCOOKIESFAILED,
LINUX_MIB_EMBRYONICRSTS,
LINUX_MIB_PRUNECALLED,
LINUX_MIB_RCVPRUNED,
LINUX_MIB_OFOPRUNED,
LINUX_MIB_OUTOFWINDOWICMPS,
LINUX_MIB_LOCKDROPPEDICMPS,
LINUX_MIB_ARPFILTER,
LINUX_MIB_TIMEWAITED,
LINUX_MIB_TIMEWAITRECYCLED,
LINUX_MIB_TIMEWAITKILLED,
LINUX_MIB_PAWSPASSIVEREJECTED,
LINUX_MIB_PAWSACTIVEREJECTED,
LINUX_MIB_PAWSESTABREJECTED,
LINUX_MIB_DELAYEDACKS,
LINUX_MIB_DELAYEDACKLOCKED,
LINUX_MIB_DELAYEDACKLOST,
LINUX_MIB_LISTENOVERFLOWS,
LINUX_MIB_LISTENDROPS,
LINUX_MIB_TCPPREQUEUED,
LINUX_MIB_TCPDIRECTCOPYFROMBACKLOG,
LINUX_MIB_TCPDIRECTCOPYFROMPREQUEUE,
LINUX_MIB_TCPPREQUEUEDROPPED,
LINUX_MIB_TCPHPHITS,
LINUX_MIB_TCPHPHITSTOUSER,
LINUX_MIB_TCPPUREACKS,
LINUX_MIB_TCPHPACKS,
LINUX_MIB_TCPRENORECOVERY,
LINUX_MIB_TCPSACKRECOVERY,
LINUX_MIB_TCPSACKRENEGING,
LINUX_MIB_TCPFACKREORDER,
LINUX_MIB_TCPSACKREORDER,
LINUX_MIB_TCPRENOREORDER,
LINUX_MIB_TCPTSREORDER,
LINUX_MIB_TCPFULLUNDO,
LINUX_MIB_TCPPARTIALUNDO,
LINUX_MIB_TCPDSACKUNDO,
LINUX_MIB_TCPLOSSUNDO,
LINUX_MIB_TCPLOSTRETRANSMIT,
LINUX_MIB_TCPRENOFAILURES,
LINUX_MIB_TCPSACKFAILURES,
LINUX_MIB_TCPLOSSFAILURES,
LINUX_MIB_TCPFASTRETRANS,
LINUX_MIB_TCPFORWARDRETRANS,
LINUX_MIB_TCPSLOWSTARTRETRANS,
LINUX_MIB_TCPTIMEOUTS,
LINUX_MIB_TCPLOSSPROBES,
LINUX_MIB_TCPLOSSPROBERECOVERY,
LINUX_MIB_TCPRENORECOVERYFAIL,
LINUX_MIB_TCPSACKRECOVERYFAIL,
LINUX_MIB_TCPSCHEDULERFAILED,
LINUX_MIB_TCPRCVCOLLAPSED,
LINUX_MIB_TCPDSACKOLDSENT,
LINUX_MIB_TCPDSACKOFOSENT,
LINUX_MIB_TCPDSACKRECV,
LINUX_MIB_TCPDSACKOFORECV,
LINUX_MIB_TCPABORTONDATA,
LINUX_MIB_TCPABORTONCLOSE,
LINUX_MIB_TCPABORTONMEMORY,
LINUX_MIB_TCPABORTONTIMEOUT,
LINUX_MIB_TCPABORTONLINGER,
LINUX_MIB_TCPABORTFAILED,
LINUX_MIB_TCPMEMORYPRESSURES,
LINUX_MIB_TCPSACKDISCARD,
LINUX_MIB_TCPDSACKIGNOREDOLD,
LINUX_MIB_TCPDSACKIGNOREDNOUNDO,
LINUX_MIB_TCPSPURIOUSRTOS,
LINUX_MIB_TCPMD5NOTFOUND,
LINUX_MIB_TCPMD5UNEXPECTED,
LINUX_MIB_SACKSHIFTED,
LINUX_MIB_SACKMERGED,
LINUX_MIB_SACKSHIFTFALLBACK,
LINUX_MIB_TCPBACKLOGDROP,
LINUX_MIB_TCPMINTTLDROP,
LINUX_MIB_TCPDEFERACCEPTDROP,
LINUX_MIB_IPRPFILTER,
LINUX_MIB_TCPTIMEWAITOVERFLOW,
LINUX_MIB_TCPREQQFULLDOCOOKIES,
LINUX_MIB_TCPREQQFULLDROP,
LINUX_MIB_TCPRETRANSFAIL,
LINUX_MIB_TCPRCVCOALESCE,
LINUX_MIB_TCPOFOQUEUE,
LINUX_MIB_TCPOFODROP,
LINUX_MIB_TCPOFOMERGE,
LINUX_MIB_TCPCHALLENGEACK,
LINUX_MIB_TCPSYNCHALLENGE,
LINUX_MIB_TCPFASTOPENACTIVE,
LINUX_MIB_TCPFASTOPENACTIVEFAIL,
LINUX_MIB_TCPFASTOPENPASSIVE,
LINUX_MIB_TCPFASTOPENPASSIVEFAIL,
LINUX_MIB_TCPFASTOPENLISTENOVERFLOW,
LINUX_MIB_TCPFASTOPENCOOKIEREQD,
LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES,
LINUX_MIB_BUSYPOLLRXPACKETS,
LINUX_MIB_TCPAUTOCORKING,
LINUX_MIB_TCPFROMZEROWINDOWADV,
LINUX_MIB_TCPTOZEROWINDOWADV,
LINUX_MIB_TCPWANTZEROWINDOWADV,
LINUX_MIB_TCPSYNRETRANS,
LINUX_MIB_TCPORIGDATASENT,
__LINUX_MIB_MAX
};
enum
{
LINUX_MIB_XFRMNUM = 0,
LINUX_MIB_XFRMINERROR,
LINUX_MIB_XFRMINBUFFERERROR,
LINUX_MIB_XFRMINHDRERROR,
LINUX_MIB_XFRMINNOSTATES,
LINUX_MIB_XFRMINSTATEPROTOERROR,
LINUX_MIB_XFRMINSTATEMODEERROR,
LINUX_MIB_XFRMINSTATESEQERROR,
LINUX_MIB_XFRMINSTATEEXPIRED,
LINUX_MIB_XFRMINSTATEMISMATCH,
LINUX_MIB_XFRMINSTATEINVALID,
LINUX_MIB_XFRMINTMPLMISMATCH,
LINUX_MIB_XFRMINNOPOLS,
LINUX_MIB_XFRMINPOLBLOCK,
LINUX_MIB_XFRMINPOLERROR,
LINUX_MIB_XFRMOUTERROR,
LINUX_MIB_XFRMOUTBUNDLEGENERROR,
LINUX_MIB_XFRMOUTBUNDLECHECKERROR,
LINUX_MIB_XFRMOUTNOSTATES,
LINUX_MIB_XFRMOUTSTATEPROTOERROR,
LINUX_MIB_XFRMOUTSTATEMODEERROR,
LINUX_MIB_XFRMOUTSTATESEQERROR,
LINUX_MIB_XFRMOUTSTATEEXPIRED,
LINUX_MIB_XFRMOUTPOLBLOCK,
LINUX_MIB_XFRMOUTPOLDEAD,
LINUX_MIB_XFRMOUTPOLERROR,
LINUX_MIB_XFRMFWDHDRERROR,
LINUX_MIB_XFRMOUTSTATEINVALID,
LINUX_MIB_XFRMACQUIREERROR,
__LINUX_MIB_XFRMMAX
};
# 24 "include/net/snmp.h" 2
# 34 "include/net/snmp.h"
struct snmp_mib {
const char *name;
int entry;
};
# 52 "include/net/snmp.h"
# 1 "include/linux/u64_stats_sync.h" 1
# 64 "include/linux/u64_stats_sync.h"
struct u64_stats_sync {
seqcount_t seq;
};
# 77 "include/linux/u64_stats_sync.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void u64_stats_update_begin(struct u64_stats_sync *syncp)
{
write_seqcount_begin(&syncp->seq);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void u64_stats_update_end(struct u64_stats_sync *syncp)
{
write_seqcount_end(&syncp->seq);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int u64_stats_fetch_begin(const struct u64_stats_sync *syncp)
{
return read_seqcount_begin(&syncp->seq);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp,
unsigned int start)
{
return read_seqcount_retry(&syncp->seq, start);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync *syncp)
{
return read_seqcount_begin(&syncp->seq);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool u64_stats_fetch_retry_irq(const struct u64_stats_sync *syncp,
unsigned int start)
{
return read_seqcount_retry(&syncp->seq, start);
}
# 53 "include/net/snmp.h" 2
struct ipstats_mib {
u64 mibs[__IPSTATS_MIB_MAX];
struct u64_stats_sync syncp;
};
struct icmp_mib {
unsigned long mibs[__ICMP_MIB_MAX];
};
struct icmpmsg_mib {
atomic_long_t mibs[512];
};
struct icmpv6_mib {
unsigned long mibs[__ICMP6_MIB_MAX];
};
struct icmpv6_mib_device {
atomic_long_t mibs[__ICMP6_MIB_MAX];
};
struct icmpv6msg_mib {
atomic_long_t mibs[512];
};
struct icmpv6msg_mib_device {
atomic_long_t mibs[512];
};
struct tcp_mib {
unsigned long mibs[__TCP_MIB_MAX];
};
struct udp_mib {
unsigned long mibs[__UDP_MIB_MAX];
};
struct linux_mib {
unsigned long mibs[__LINUX_MIB_MAX];
};
struct linux_xfrm_mib {
unsigned long mibs[__LINUX_MIB_XFRMMAX];
};
# 5 "include/net/netns/mib.h" 2
struct netns_mib {
__typeof__(struct tcp_mib) *tcp_statistics;
__typeof__(struct ipstats_mib) *ip_statistics;
__typeof__(struct linux_mib) *net_statistics;
__typeof__(struct udp_mib) *udp_statistics;
__typeof__(struct udp_mib) *udplite_statistics;
__typeof__(struct icmp_mib) *icmp_statistics;
__typeof__(struct icmpmsg_mib) *icmpmsg_statistics;
struct proc_dir_entry *proc_net_devsnmp6;
__typeof__(struct udp_mib) *udp_stats_in6;
__typeof__(struct udp_mib) *udplite_stats_in6;
__typeof__(struct ipstats_mib) *ipv6_statistics;
__typeof__(struct icmpv6_mib) *icmpv6_statistics;
__typeof__(struct icmpv6msg_mib) *icmpv6msg_statistics;
};
# 15 "include/net/net_namespace.h" 2
# 1 "include/net/netns/unix.h" 1
struct ctl_table_header;
struct netns_unix {
int sysctl_max_dgram_qlen;
struct ctl_table_header *ctl;
};
# 16 "include/net/net_namespace.h" 2
# 1 "include/net/netns/packet.h" 1
# 10 "include/net/netns/packet.h"
struct netns_packet {
struct mutex sklist_lock;
struct hlist_head sklist;
};
# 17 "include/net/net_namespace.h" 2
# 1 "include/net/netns/ipv4.h" 1
# 9 "include/net/netns/ipv4.h"
# 1 "include/net/inet_frag.h" 1
struct netns_frags {
struct percpu_counter mem __attribute__((__aligned__((1 << 5))));
int timeout;
int high_thresh;
int low_thresh;
};
# 26 "include/net/inet_frag.h"
enum {
INET_FRAG_FIRST_IN = (1UL << (0)),
INET_FRAG_LAST_IN = (1UL << (1)),
INET_FRAG_COMPLETE = (1UL << (2)),
INET_FRAG_EVICTED = (1UL << (3))
};
# 49 "include/net/inet_frag.h"
struct inet_frag_queue {
spinlock_t lock;
struct timer_list timer;
struct hlist_node list;
atomic_t refcnt;
struct sk_buff *fragments;
struct sk_buff *fragments_tail;
ktime_t stamp;
int len;
int meat;
__u8 flags;
u16 max_size;
struct netns_frags *net;
};
# 73 "include/net/inet_frag.h"
struct inet_frag_bucket {
struct hlist_head chain;
spinlock_t chain_lock;
};
struct inet_frags {
struct inet_frag_bucket hash[1024];
struct work_struct frags_work;
unsigned int next_bucket;
unsigned long last_rebuild_jiffies;
bool rebuild;
u32 rnd;
seqlock_t rnd_seqlock;
int qsize;
unsigned int (*hashfn)(const struct inet_frag_queue *);
bool (*match)(const struct inet_frag_queue *q,
const void *arg);
void (*constructor)(struct inet_frag_queue *q,
const void *arg);
void (*destructor)(struct inet_frag_queue *);
void (*skb_free)(struct sk_buff *);
void (*frag_expire)(unsigned long data);
struct kmem_cache *frags_cachep;
const char *frags_cache_name;
};
int inet_frags_init(struct inet_frags *);
void inet_frags_fini(struct inet_frags *);
void inet_frags_init_net(struct netns_frags *nf);
void inet_frags_exit_net(struct netns_frags *nf, struct inet_frags *f);
void inet_frag_kill(struct inet_frag_queue *q, struct inet_frags *f);
void inet_frag_destroy(struct inet_frag_queue *q, struct inet_frags *f);
struct inet_frag_queue *inet_frag_find(struct netns_frags *nf,
struct inet_frags *f, void *key, unsigned int hash);
void inet_frag_maybe_warn_overflow(struct inet_frag_queue *q,
const char *prefix);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f)
{
if ((atomic_sub_return(1, (&q->refcnt)) == 0))
inet_frag_destroy(q, f);
}
# 135 "include/net/inet_frag.h"
static unsigned int frag_percpu_counter_batch = 130000;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int frag_mem_limit(struct netns_frags *nf)
{
return percpu_counter_read(&nf->mem);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void sub_frag_mem_limit(struct inet_frag_queue *q, int i)
{
__percpu_counter_add(&q->net->mem, -i, frag_percpu_counter_batch);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void add_frag_mem_limit(struct inet_frag_queue *q, int i)
{
__percpu_counter_add(&q->net->mem, i, frag_percpu_counter_batch);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void init_frag_mem_limit(struct netns_frags *nf)
{
({ static struct lock_class_key __key; __percpu_counter_init(&nf->mem, 0, ((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u)), &__key); });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int sum_frag_mem_limit(struct netns_frags *nf)
{
unsigned int res;
local_bh_disable();
res = percpu_counter_sum_positive(&nf->mem);
local_bh_enable();
return res;
}
# 177 "include/net/inet_frag.h"
extern const u8 ip_frag_ecn_table[16];
# 10 "include/net/netns/ipv4.h" 2
struct tcpm_hash_bucket;
struct ctl_table_header;
struct ipv4_devconf;
struct fib_rules_ops;
struct hlist_head;
struct fib_table;
struct sock;
struct local_ports {
seqlock_t lock;
int range[2];
};
struct ping_group_range {
seqlock_t lock;
kgid_t range[2];
};
struct netns_ipv4 {
struct ctl_table_header *forw_hdr;
struct ctl_table_header *frags_hdr;
struct ctl_table_header *ipv4_hdr;
struct ctl_table_header *route_hdr;
struct ctl_table_header *xfrm4_hdr;
struct ipv4_devconf *devconf_all;
struct ipv4_devconf *devconf_dflt;
struct fib_rules_ops *rules_ops;
bool fib_has_custom_rules;
struct fib_table *fib_local;
struct fib_table *fib_main;
struct fib_table *fib_default;
struct hlist_head *fib_table_hash;
struct sock *fibnl;
struct sock **icmp_sk;
struct inet_peer_base *peers;
struct tcpm_hash_bucket *tcp_metrics_hash;
unsigned int tcp_metrics_hash_log;
struct sock * *tcp_sk;
struct netns_frags frags;
struct xt_table *iptable_filter;
struct xt_table *iptable_mangle;
struct xt_table *iptable_raw;
struct xt_table *arptable_filter;
struct xt_table *iptable_security;
struct xt_table *nat_table;
int sysctl_icmp_echo_ignore_all;
int sysctl_icmp_echo_ignore_broadcasts;
int sysctl_icmp_ignore_bogus_error_responses;
int sysctl_icmp_ratelimit;
int sysctl_icmp_ratemask;
int sysctl_icmp_errors_use_inbound_ifaddr;
struct local_ports ip_local_ports;
int sysctl_tcp_ecn;
int sysctl_ip_no_pmtu_disc;
int sysctl_ip_fwd_use_pmtu;
int sysctl_ip_nonlocal_bind;
int sysctl_fwmark_reflect;
int sysctl_tcp_fwmark_accept;
struct ping_group_range ping_group_range;
atomic_t dev_addr_genid;
unsigned long *sysctl_local_reserved_ports;
struct mr_table *mrt;
atomic_t rt_genid;
};
# 18 "include/net/net_namespace.h" 2
# 1 "include/net/netns/ipv6.h" 1
# 9 "include/net/netns/ipv6.h"
# 1 "include/net/dst_ops.h" 1
struct dst_entry;
struct kmem_cachep;
struct net_device;
struct sk_buff;
struct sock;
struct dst_ops {
unsigned short family;
__be16 protocol;
unsigned int gc_thresh;
int (*gc)(struct dst_ops *ops);
struct dst_entry * (*check)(struct dst_entry *, __u32 cookie);
unsigned int (*default_advmss)(const struct dst_entry *);
unsigned int (*mtu)(const struct dst_entry *);
u32 * (*cow_metrics)(struct dst_entry *, unsigned long);
void (*destroy)(struct dst_entry *);
void (*ifdown)(struct dst_entry *,
struct net_device *dev, int how);
struct dst_entry * (*negative_advice)(struct dst_entry *);
void (*link_failure)(struct sk_buff *);
void (*update_pmtu)(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb, u32 mtu);
void (*redirect)(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb);
int (*local_out)(struct sk_buff *skb);
struct neighbour * (*neigh_lookup)(const struct dst_entry *dst,
struct sk_buff *skb,
const void *daddr);
struct kmem_cache *kmem_cachep;
struct percpu_counter pcpuc_entries __attribute__((__aligned__((1 << 5))));
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dst_entries_get_fast(struct dst_ops *dst)
{
return percpu_counter_read_positive(&dst->pcpuc_entries);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dst_entries_get_slow(struct dst_ops *dst)
{
int res;
local_bh_disable();
res = percpu_counter_sum_positive(&dst->pcpuc_entries);
local_bh_enable();
return res;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dst_entries_add(struct dst_ops *dst, int val)
{
local_bh_disable();
percpu_counter_add(&dst->pcpuc_entries, val);
local_bh_enable();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dst_entries_init(struct dst_ops *dst)
{
return ({ static struct lock_class_key __key; __percpu_counter_init(&dst->pcpuc_entries, 0, ((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u)), &__key); });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dst_entries_destroy(struct dst_ops *dst)
{
percpu_counter_destroy(&dst->pcpuc_entries);
}
# 10 "include/net/netns/ipv6.h" 2
struct ctl_table_header;
struct netns_sysctl_ipv6 {
struct ctl_table_header *hdr;
struct ctl_table_header *route_hdr;
struct ctl_table_header *icmp_hdr;
struct ctl_table_header *frags_hdr;
struct ctl_table_header *xfrm6_hdr;
int bindv6only;
int flush_delay;
int ip6_rt_max_size;
int ip6_rt_gc_min_interval;
int ip6_rt_gc_timeout;
int ip6_rt_gc_interval;
int ip6_rt_gc_elasticity;
int ip6_rt_mtu_expires;
int ip6_rt_min_advmss;
int flowlabel_consistency;
int auto_flowlabels;
int icmpv6_time;
int anycast_src_echo_reply;
int fwmark_reflect;
};
struct netns_ipv6 {
struct netns_sysctl_ipv6 sysctl;
struct ipv6_devconf *devconf_all;
struct ipv6_devconf *devconf_dflt;
struct inet_peer_base *peers;
struct netns_frags frags;
struct xt_table *ip6table_filter;
struct xt_table *ip6table_mangle;
struct xt_table *ip6table_raw;
struct xt_table *ip6table_security;
struct xt_table *ip6table_nat;
struct rt6_info *ip6_null_entry;
struct rt6_statistics *rt6_stats;
struct timer_list ip6_fib_timer;
struct hlist_head *fib_table_hash;
struct fib6_table *fib6_main_tbl;
struct dst_ops ip6_dst_ops;
unsigned int ip6_rt_gc_expire;
unsigned long ip6_rt_last_gc;
struct rt6_info *ip6_prohibit_entry;
struct rt6_info *ip6_blk_hole_entry;
struct fib6_table *fib6_local_tbl;
struct fib_rules_ops *fib6_rules_ops;
struct sock **icmp_sk;
struct sock *ndisc_sk;
struct sock *tcp_sk;
struct sock *igmp_sk;
# 78 "include/net/netns/ipv6.h"
atomic_t dev_addr_genid;
atomic_t fib6_sernum;
};
struct netns_nf_frag {
struct netns_sysctl_ipv6 sysctl;
struct netns_frags frags;
};
# 19 "include/net/net_namespace.h" 2
# 1 "include/net/netns/ieee802154_6lowpan.h" 1
# 10 "include/net/netns/ieee802154_6lowpan.h"
struct netns_sysctl_lowpan {
struct ctl_table_header *frags_hdr;
};
struct netns_ieee802154_lowpan {
struct netns_sysctl_lowpan sysctl;
struct netns_frags frags;
};
# 20 "include/net/net_namespace.h" 2
# 1 "include/net/netns/sctp.h" 1
struct sock;
struct proc_dir_entry;
struct sctp_mib;
struct ctl_table_header;
struct netns_sctp {
__typeof__(struct sctp_mib) *sctp_statistics;
struct proc_dir_entry *proc_net_sctp;
struct ctl_table_header *sysctl_header;
struct sock *ctl_sock;
struct list_head local_addr_list;
struct list_head addr_waitq;
struct timer_list addr_wq_timer;
struct list_head auto_asconf_splist;
spinlock_t addr_wq_lock;
spinlock_t local_addr_lock;
# 50 "include/net/netns/sctp.h"
unsigned int rto_initial;
unsigned int rto_min;
unsigned int rto_max;
int rto_alpha;
int rto_beta;
int max_burst;
int cookie_preserve_enable;
char *sctp_hmac_alg;
unsigned int valid_cookie_life;
unsigned int sack_timeout;
unsigned int hb_interval;
int max_retrans_association;
int max_retrans_path;
int max_retrans_init;
int pf_retrans;
int sndbuf_policy;
int rcvbuf_policy;
int default_auto_asconf;
int addip_enable;
int addip_noauth;
int prsctp_enable;
int auth_enable;
# 124 "include/net/netns/sctp.h"
int scope_policy;
int rwnd_upd_shift;
unsigned long max_autoclose;
};
# 21 "include/net/net_namespace.h" 2
# 1 "include/net/netns/dccp.h" 1
struct sock;
struct netns_dccp {
struct sock *v4_ctl_sk;
struct sock *v6_ctl_sk;
};
# 22 "include/net/net_namespace.h" 2
# 1 "include/net/netns/netfilter.h" 1
# 1 "include/linux/netfilter.h" 1
# 1 "./include/uapi/linux/if.h" 1
# 28 "./include/uapi/linux/if.h"
# 1 "./include/uapi/linux/hdlc/ioctl.h" 1
# 39 "./include/uapi/linux/hdlc/ioctl.h"
typedef struct {
unsigned int clock_rate;
unsigned int clock_type;
unsigned short loopback;
} sync_serial_settings;
typedef struct {
unsigned int clock_rate;
unsigned int clock_type;
unsigned short loopback;
unsigned int slot_map;
} te1_settings;
typedef struct {
unsigned short encoding;
unsigned short parity;
} raw_hdlc_proto;
typedef struct {
unsigned int t391;
unsigned int t392;
unsigned int n391;
unsigned int n392;
unsigned int n393;
unsigned short lmi;
unsigned short dce;
} fr_proto;
typedef struct {
unsigned int dlci;
} fr_proto_pvc;
typedef struct {
unsigned int dlci;
char master[16];
}fr_proto_pvc_info;
typedef struct {
unsigned int interval;
unsigned int timeout;
} cisco_proto;
# 29 "./include/uapi/linux/if.h" 2
# 70 "./include/uapi/linux/if.h"
enum net_device_flags {
IFF_UP = 1<<0,
IFF_BROADCAST = 1<<1,
IFF_DEBUG = 1<<2,
IFF_LOOPBACK = 1<<3,
IFF_POINTOPOINT = 1<<4,
IFF_NOTRAILERS = 1<<5,
IFF_RUNNING = 1<<6,
IFF_NOARP = 1<<7,
IFF_PROMISC = 1<<8,
IFF_ALLMULTI = 1<<9,
IFF_MASTER = 1<<10,
IFF_SLAVE = 1<<11,
IFF_MULTICAST = 1<<12,
IFF_PORTSEL = 1<<13,
IFF_AUTOMEDIA = 1<<14,
IFF_DYNAMIC = 1<<15,
IFF_LOWER_UP = 1<<16,
IFF_DORMANT = 1<<17,
IFF_ECHO = 1<<18,
};
# 143 "./include/uapi/linux/if.h"
enum {
IF_OPER_UNKNOWN,
IF_OPER_NOTPRESENT,
IF_OPER_DOWN,
IF_OPER_LOWERLAYERDOWN,
IF_OPER_TESTING,
IF_OPER_DORMANT,
IF_OPER_UP,
};
enum {
IF_LINK_MODE_DEFAULT,
IF_LINK_MODE_DORMANT,
};
# 169 "./include/uapi/linux/if.h"
struct ifmap {
unsigned long mem_start;
unsigned long mem_end;
unsigned short base_addr;
unsigned char irq;
unsigned char dma;
unsigned char port;
};
struct if_settings {
unsigned int type;
unsigned int size;
union {
raw_hdlc_proto *raw_hdlc;
cisco_proto *cisco;
fr_proto *fr;
fr_proto_pvc *fr_pvc;
fr_proto_pvc_info *fr_pvc_info;
sync_serial_settings *sync;
te1_settings *te1;
} ifs_ifsu;
};
# 203 "./include/uapi/linux/if.h"
struct ifreq {
union
{
char ifrn_name[16];
} ifr_ifrn;
union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
struct sockaddr ifru_netmask;
struct sockaddr ifru_hwaddr;
short ifru_flags;
int ifru_ivalue;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[16];
char ifru_newname[16];
void * ifru_data;
struct if_settings ifru_settings;
} ifr_ifru;
};
# 252 "./include/uapi/linux/if.h"
struct ifconf {
int ifc_len;
union {
char *ifcu_buf;
struct ifreq *ifcu_req;
} ifc_ifcu;
};
# 8 "include/linux/netfilter.h" 2
# 1 "include/linux/in.h" 1
# 23 "include/linux/in.h"
# 1 "include/uapi/linux/in.h" 1
# 23 "include/uapi/linux/in.h"
# 1 "./include/uapi/linux/ecnt_in.h" 1
# 24 "include/uapi/linux/in.h" 2
enum {
IPPROTO_IP = 0,
IPPROTO_ICMP = 1,
IPPROTO_IGMP = 2,
IPPROTO_IPIP = 4,
IPPROTO_TCP = 6,
IPPROTO_EGP = 8,
IPPROTO_PUP = 12,
IPPROTO_UDP = 17,
IPPROTO_IDP = 22,
IPPROTO_TP = 29,
IPPROTO_DCCP = 33,
IPPROTO_IPV6 = 41,
IPPROTO_RSVP = 46,
IPPROTO_GRE = 47,
IPPROTO_ESP = 50,
IPPROTO_AH = 51,
IPPROTO_MTP = 92,
IPPROTO_BEETPH = 94,
IPPROTO_ENCAP = 98,
IPPROTO_PIM = 103,
IPPROTO_COMP = 108,
IPPROTO_SCTP = 132,
IPPROTO_UDPLITE = 136,
IPPROTO_RAW = 255,
IPPROTO_MAX
};
struct in_addr {
__be32 s_addr;
};
# 164 "include/uapi/linux/in.h"
struct ip_mreq {
struct in_addr imr_multiaddr;
struct in_addr imr_interface;
};
struct ip_mreqn {
struct in_addr imr_multiaddr;
struct in_addr imr_address;
int imr_ifindex;
};
struct ip_mreq_source {
__be32 imr_multiaddr;
__be32 imr_interface;
__be32 imr_sourceaddr;
};
struct ip_msfilter {
__be32 imsf_multiaddr;
__be32 imsf_interface;
__u32 imsf_fmode;
__u32 imsf_numsrc;
__be32 imsf_slist[1];
};
struct group_req {
__u32 gr_interface;
struct __kernel_sockaddr_storage gr_group;
};
struct group_source_req {
__u32 gsr_interface;
struct __kernel_sockaddr_storage gsr_group;
struct __kernel_sockaddr_storage gsr_source;
};
struct group_filter {
__u32 gf_interface;
struct __kernel_sockaddr_storage gf_group;
__u32 gf_fmode;
__u32 gf_numsrc;
struct __kernel_sockaddr_storage gf_slist[1];
};
struct in_pktinfo {
int ipi_ifindex;
struct in_addr ipi_spec_dst;
struct in_addr ipi_addr;
};
struct sockaddr_in {
__kernel_sa_family_t sin_family;
__be16 sin_port;
struct in_addr sin_addr;
unsigned char __pad[16 - sizeof(short int) -
sizeof(unsigned short int) - sizeof(struct in_addr)];
};
# 24 "include/linux/in.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int proto_ports_offset(int proto)
{
switch (proto) {
case IPPROTO_TCP:
case IPPROTO_UDP:
case IPPROTO_DCCP:
case IPPROTO_ESP:
case IPPROTO_SCTP:
case IPPROTO_UDPLITE:
return 0;
case IPPROTO_AH:
return 4;
default:
return -22;
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_loopback(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xff000000))) == (( __be32)(__u32)(0x7f000000));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_multicast(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xf0000000))) == (( __be32)(__u32)(0xe0000000));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_local_multicast(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xffffff00))) == (( __be32)(__u32)(0xe0000000));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_lbcast(__be32 addr)
{
return addr == (( __be32)(__u32)(((unsigned long int) 0xffffffff)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_zeronet(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xff000000))) == (( __be32)(__u32)(0x00000000));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_private_10(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xff000000))) == (( __be32)(__u32)(0x0a000000));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_private_172(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xfff00000))) == (( __be32)(__u32)(0xac100000));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_private_192(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xffff0000))) == (( __be32)(__u32)(0xc0a80000));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_linklocal_169(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xffff0000))) == (( __be32)(__u32)(0xa9fe0000));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_anycast_6to4(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xffffff00))) == (( __be32)(__u32)(0xc0586300));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_test_192(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xffffff00))) == (( __be32)(__u32)(0xc0000200));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool ipv4_is_test_198(__be32 addr)
{
return (addr & (( __be32)(__u32)(0xfffe0000))) == (( __be32)(__u32)(0xc6120000));
}
# 9 "include/linux/netfilter.h" 2
# 1 "include/linux/static_key.h" 1
# 13 "include/linux/netfilter.h" 2
# 1 "include/uapi/linux/netfilter.h" 1
# 45 "include/uapi/linux/netfilter.h"
enum nf_inet_hooks {
NF_INET_PRE_ROUTING,
NF_INET_LOCAL_IN,
NF_INET_FORWARD,
NF_INET_LOCAL_OUT,
NF_INET_POST_ROUTING,
NF_INET_NUMHOOKS
};
enum {
NFPROTO_UNSPEC = 0,
NFPROTO_INET = 1,
NFPROTO_IPV4 = 2,
NFPROTO_ARP = 3,
NFPROTO_BRIDGE = 7,
NFPROTO_IPV6 = 10,
NFPROTO_DECNET = 12,
NFPROTO_NUMPROTO,
};
union nf_inet_addr {
__u32 all[4];
__be32 ip;
__be32 ip6[4];
struct in_addr in;
struct in6_addr in6;
};
# 14 "include/linux/netfilter.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int NF_DROP_GETERR(int verdict)
{
return -(verdict >> 16);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int nf_inet_addr_cmp(const union nf_inet_addr *a1,
const union nf_inet_addr *a2)
{
return a1->all[0] == a2->all[0] &&
a1->all[1] == a2->all[1] &&
a1->all[2] == a2->all[2] &&
a1->all[3] == a2->all[3];
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void nf_inet_addr_mask(const union nf_inet_addr *a1,
union nf_inet_addr *result,
const union nf_inet_addr *mask)
{
result->all[0] = a1->all[0] & mask->all[0];
result->all[1] = a1->all[1] & mask->all[1];
result->all[2] = a1->all[2] & mask->all[2];
result->all[3] = a1->all[3] & mask->all[3];
}
int netfilter_init(void);
struct sk_buff;
struct nf_hook_ops;
typedef unsigned int nf_hookfn(const struct nf_hook_ops *ops,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *));
struct nf_hook_ops {
struct list_head list;
nf_hookfn *hook;
struct module *owner;
void *priv;
u_int8_t pf;
unsigned int hooknum;
int priority;
};
struct nf_sockopt_ops {
struct list_head list;
u_int8_t pf;
int set_optmin;
int set_optmax;
int (*set)(struct sock *sk, int optval, void *user, unsigned int len);
int get_optmin;
int get_optmax;
int (*get)(struct sock *sk, int optval, void *user, int *len);
struct module *owner;
};
int nf_register_hook(struct nf_hook_ops *reg);
void nf_unregister_hook(struct nf_hook_ops *reg);
int nf_register_hooks(struct nf_hook_ops *reg, unsigned int n);
void nf_unregister_hooks(struct nf_hook_ops *reg, unsigned int n);
int nf_register_sockopt(struct nf_sockopt_ops *reg);
void nf_unregister_sockopt(struct nf_sockopt_ops *reg);
extern struct list_head nf_hooks[NFPROTO_NUMPROTO][8];
# 115 "include/linux/netfilter.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool nf_hooks_active(u_int8_t pf, unsigned int hook)
{
return !list_empty(&nf_hooks[pf][hook]);
}
int nf_hook_slow(u_int8_t pf, unsigned int hook, struct sk_buff *skb,
struct net_device *indev, struct net_device *outdev,
int (*okfn)(struct sk_buff *), int thresh);
# 132 "include/linux/netfilter.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int nf_hook_thresh(u_int8_t pf, unsigned int hook,
struct sk_buff *skb,
struct net_device *indev,
struct net_device *outdev,
int (*okfn)(struct sk_buff *), int thresh)
{
if (nf_hooks_active(pf, hook))
return nf_hook_slow(pf, hook, skb, indev, outdev, okfn, thresh);
return 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int nf_hook(u_int8_t pf, unsigned int hook, struct sk_buff *skb,
struct net_device *indev, struct net_device *outdev,
int (*okfn)(struct sk_buff *))
{
return nf_hook_thresh(pf, hook, skb, indev, outdev, okfn, (-((int)(~0U>>1)) - 1));
}
# 167 "include/linux/netfilter.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
NF_HOOK_THRESH(uint8_t pf, unsigned int hook, struct sk_buff *skb,
struct net_device *in, struct net_device *out,
int (*okfn)(struct sk_buff *), int thresh)
{
int ret = nf_hook_thresh(pf, hook, skb, in, out, okfn, thresh);
if (ret == 1)
ret = okfn(skb);
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
NF_HOOK_COND(uint8_t pf, unsigned int hook, struct sk_buff *skb,
struct net_device *in, struct net_device *out,
int (*okfn)(struct sk_buff *), bool cond)
{
int ret;
if (!cond ||
((ret = nf_hook_thresh(pf, hook, skb, in, out, okfn, (-((int)(~0U>>1)) - 1))) == 1))
ret = okfn(skb);
return ret;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
NF_HOOK(uint8_t pf, unsigned int hook, struct sk_buff *skb,
struct net_device *in, struct net_device *out,
int (*okfn)(struct sk_buff *))
{
return NF_HOOK_THRESH(pf, hook, skb, in, out, okfn, (-((int)(~0U>>1)) - 1));
}
int nf_setsockopt(struct sock *sk, u_int8_t pf, int optval, char *opt,
unsigned int len);
int nf_getsockopt(struct sock *sk, u_int8_t pf, int optval, char *opt,
int *len);
# 214 "include/linux/netfilter.h"
int skb_make_writable(struct sk_buff *skb, unsigned int writable_len);
struct flowi;
struct nf_queue_entry;
struct nf_afinfo {
unsigned short family;
__sum16 (*checksum)(struct sk_buff *skb, unsigned int hook,
unsigned int dataoff, u_int8_t protocol);
__sum16 (*checksum_partial)(struct sk_buff *skb,
unsigned int hook,
unsigned int dataoff,
unsigned int len,
u_int8_t protocol);
int (*route)(struct net *net, struct dst_entry **dst,
struct flowi *fl, bool strict);
void (*saveroute)(const struct sk_buff *skb,
struct nf_queue_entry *entry);
int (*reroute)(struct sk_buff *skb,
const struct nf_queue_entry *entry);
int route_key_size;
};
extern const struct nf_afinfo *nf_afinfo[NFPROTO_NUMPROTO];
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const struct nf_afinfo *nf_get_afinfo(unsigned short family)
{
return ({ typeof(*(nf_afinfo[family])) *_________p1 = (typeof(*(nf_afinfo[family])) *)(*(volatile typeof((nf_afinfo[family])) *)&((nf_afinfo[family]))); do { } while (0); ; do { } while(0); ((typeof(*(nf_afinfo[family])) *)(_________p1)); });
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16
nf_checksum(struct sk_buff *skb, unsigned int hook, unsigned int dataoff,
u_int8_t protocol, unsigned short family)
{
const struct nf_afinfo *afinfo;
__sum16 csum = 0;
rcu_read_lock();
afinfo = nf_get_afinfo(family);
if (afinfo)
csum = afinfo->checksum(skb, hook, dataoff, protocol);
rcu_read_unlock();
return csum;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16
nf_checksum_partial(struct sk_buff *skb, unsigned int hook,
unsigned int dataoff, unsigned int len,
u_int8_t protocol, unsigned short family)
{
const struct nf_afinfo *afinfo;
__sum16 csum = 0;
rcu_read_lock();
afinfo = nf_get_afinfo(family);
if (afinfo)
csum = afinfo->checksum_partial(skb, hook, dataoff, len,
protocol);
rcu_read_unlock();
return csum;
}
int nf_register_afinfo(const struct nf_afinfo *afinfo);
void nf_unregister_afinfo(const struct nf_afinfo *afinfo);
extern void (*nf_nat_decode_session_hook)(struct sk_buff *, struct flowi *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, u_int8_t family)
{
void (*decodefn)(struct sk_buff *, struct flowi *);
rcu_read_lock();
decodefn = ({ typeof(*(nf_nat_decode_session_hook)) *_________p1 = (typeof(*(nf_nat_decode_session_hook)) *)(*(volatile typeof((nf_nat_decode_session_hook)) *)&((nf_nat_decode_session_hook))); do { } while (0); ; do { } while(0); ((typeof(*(nf_nat_decode_session_hook)) *)(_________p1)); });
if (decodefn)
decodefn(skb, fl);
rcu_read_unlock();
}
# 320 "include/linux/netfilter.h"
extern void (*ip_ct_attach)(struct sk_buff *, const struct sk_buff *) ;
void nf_ct_attach(struct sk_buff *, const struct sk_buff *);
extern void (*nf_ct_destroy)(struct nf_conntrack *) ;
struct nf_conn;
enum ip_conntrack_info;
struct nlattr;
struct nfq_ct_hook {
size_t (*build_size)(const struct nf_conn *ct);
int (*build)(struct sk_buff *skb, struct nf_conn *ct);
int (*parse)(const struct nlattr *attr, struct nf_conn *ct);
int (*attach_expect)(const struct nlattr *attr, struct nf_conn *ct,
u32 portid, u32 report);
void (*seq_adjust)(struct sk_buff *skb, struct nf_conn *ct,
enum ip_conntrack_info ctinfo, s32 off);
};
extern struct nfq_ct_hook *nfq_ct_hook;
# 6 "include/net/netns/netfilter.h" 2
struct nf_logger;
struct netns_nf {
struct proc_dir_entry *proc_netfilter;
const struct nf_logger *nf_loggers[NFPROTO_NUMPROTO];
struct ctl_table_header *nf_log_dir_header;
};
# 23 "include/net/net_namespace.h" 2
# 1 "include/net/netns/x_tables.h" 1
struct ebt_table;
struct netns_xt {
struct list_head tables[NFPROTO_NUMPROTO];
bool notrack_deprecated_warning;
struct ebt_table *broute_table;
struct ebt_table *frame_filter;
struct ebt_table *frame_nat;
};
# 24 "include/net/net_namespace.h" 2
# 1 "include/net/netns/conntrack.h" 1
# 1 "include/linux/list_nulls.h" 1
# 17 "include/linux/list_nulls.h"
struct hlist_nulls_head {
struct hlist_nulls_node *first;
};
struct hlist_nulls_node {
struct hlist_nulls_node *next, **pprev;
};
# 33 "include/linux/list_nulls.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_a_nulls(const struct hlist_nulls_node *ptr)
{
return ((unsigned long)ptr & 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned long get_nulls_value(const struct hlist_nulls_node *ptr)
{
return ((unsigned long)ptr) >> 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hlist_nulls_unhashed(const struct hlist_nulls_node *h)
{
return !h->pprev;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int hlist_nulls_empty(const struct hlist_nulls_head *h)
{
return is_a_nulls(h->first);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_nulls_add_head(struct hlist_nulls_node *n,
struct hlist_nulls_head *h)
{
struct hlist_nulls_node *first = h->first;
n->next = first;
n->pprev = &h->first;
h->first = n;
if (!is_a_nulls(first))
first->pprev = &n->next;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __hlist_nulls_del(struct hlist_nulls_node *n)
{
struct hlist_nulls_node *next = n->next;
struct hlist_nulls_node **pprev = n->pprev;
*pprev = next;
if (!is_a_nulls(next))
next->pprev = pprev;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void hlist_nulls_del(struct hlist_nulls_node *n)
{
__hlist_nulls_del(n);
n->pprev = ((void *) 0x00200200 + 0);
}
# 6 "include/net/netns/conntrack.h" 2
# 1 "include/linux/netfilter/nf_conntrack_tcp.h" 1
# 1 "include/uapi/linux/netfilter/nf_conntrack_tcp.h" 1
enum tcp_conntrack {
TCP_CONNTRACK_NONE,
TCP_CONNTRACK_SYN_SENT,
TCP_CONNTRACK_SYN_RECV,
TCP_CONNTRACK_ESTABLISHED,
TCP_CONNTRACK_FIN_WAIT,
TCP_CONNTRACK_CLOSE_WAIT,
TCP_CONNTRACK_LAST_ACK,
TCP_CONNTRACK_TIME_WAIT,
TCP_CONNTRACK_CLOSE,
TCP_CONNTRACK_LISTEN,
TCP_CONNTRACK_MAX,
TCP_CONNTRACK_IGNORE,
TCP_CONNTRACK_RETRANS,
TCP_CONNTRACK_UNACK,
TCP_CONNTRACK_TIMEOUT_MAX
};
# 45 "include/uapi/linux/netfilter/nf_conntrack_tcp.h"
struct nf_ct_tcp_flags {
__u8 flags;
__u8 mask;
};
# 5 "include/linux/netfilter/nf_conntrack_tcp.h" 2
struct ip_ct_tcp_state {
u_int32_t td_end;
u_int32_t td_maxend;
u_int32_t td_maxwin;
u_int32_t td_maxack;
u_int8_t td_scale;
u_int8_t flags;
};
struct ip_ct_tcp {
struct ip_ct_tcp_state seen[2];
u_int8_t state;
u_int8_t last_dir;
u_int8_t retrans;
u_int8_t last_index;
u_int32_t last_seq;
u_int32_t last_ack;
u_int32_t last_end;
u_int16_t last_win;
u_int8_t last_wscale;
u_int8_t last_flags;
};
# 9 "include/net/netns/conntrack.h" 2
struct ctl_table_header;
struct nf_conntrack_ecache;
struct nf_proto_net {
struct ctl_table_header *ctl_table_header;
struct ctl_table *ctl_table;
unsigned int users;
};
struct nf_generic_net {
struct nf_proto_net pn;
unsigned int timeout;
};
struct nf_tcp_net {
struct nf_proto_net pn;
unsigned int timeouts[TCP_CONNTRACK_TIMEOUT_MAX];
unsigned int tcp_loose;
unsigned int tcp_be_liberal;
unsigned int tcp_max_retrans;
};
enum udp_conntrack {
UDP_CT_UNREPLIED,
UDP_CT_REPLIED,
UDP_CT_MAX
};
struct nf_udp_net {
struct nf_proto_net pn;
unsigned int timeouts[UDP_CT_MAX];
};
struct nf_icmp_net {
struct nf_proto_net pn;
unsigned int timeout;
};
struct nf_ip_net {
struct nf_generic_net generic;
struct nf_tcp_net tcp;
struct nf_udp_net udp;
struct nf_icmp_net icmp;
struct nf_icmp_net icmpv6;
};
struct ct_pcpu {
spinlock_t lock;
struct hlist_nulls_head unconfirmed;
struct hlist_nulls_head dying;
struct hlist_nulls_head tmpl;
};
struct netns_ct {
atomic_t count;
unsigned int expect_count;
struct delayed_work ecache_dwork;
bool ecache_dwork_pending;
struct ctl_table_header *sysctl_header;
struct ctl_table_header *acct_sysctl_header;
struct ctl_table_header *tstamp_sysctl_header;
struct ctl_table_header *event_sysctl_header;
struct ctl_table_header *helper_sysctl_header;
char *slabname;
unsigned int sysctl_log_invalid;
int sysctl_events;
int sysctl_acct;
int sysctl_auto_assign_helper;
bool auto_assign_helper_warned;
int sysctl_tstamp;
int sysctl_checksum;
unsigned int htable_size;
seqcount_t generation;
struct kmem_cache *nf_conntrack_cachep;
struct hlist_nulls_head *hash;
struct hlist_head *expect_hash;
struct ct_pcpu *pcpu_lists;
struct ip_conntrack_stat *stat;
struct nf_ct_event_notifier *nf_conntrack_event_cb;
struct nf_exp_event_notifier *nf_expect_event_cb;
struct nf_ip_net nf_ct_proto;
struct hlist_head *nat_bysource;
unsigned int nat_htable_size;
};
# 26 "include/net/net_namespace.h" 2
# 1 "include/net/netns/nftables.h" 1
struct nft_af_info;
struct netns_nftables {
struct list_head af_info;
struct list_head commit_list;
struct nft_af_info *ipv4;
struct nft_af_info *ipv6;
struct nft_af_info *inet;
struct nft_af_info *arp;
struct nft_af_info *bridge;
unsigned int base_seq;
u8 gencursor;
};
# 28 "include/net/net_namespace.h" 2
# 1 "include/net/netns/xfrm.h" 1
# 1 "./include/uapi/linux/xfrm.h" 1
# 13 "./include/uapi/linux/xfrm.h"
typedef union {
__be32 a4;
__be32 a6[4];
} xfrm_address_t;
struct xfrm_id {
xfrm_address_t daddr;
__be32 spi;
__u8 proto;
};
struct xfrm_sec_ctx {
__u8 ctx_doi;
__u8 ctx_alg;
__u16 ctx_len;
__u32 ctx_sid;
char ctx_str[0];
};
# 46 "./include/uapi/linux/xfrm.h"
struct xfrm_selector {
xfrm_address_t daddr;
xfrm_address_t saddr;
__be16 dport;
__be16 dport_mask;
__be16 sport;
__be16 sport_mask;
__u16 family;
__u8 prefixlen_d;
__u8 prefixlen_s;
__u8 proto;
int ifindex;
__kernel_uid32_t user;
};
struct xfrm_lifetime_cfg {
__u64 soft_byte_limit;
__u64 hard_byte_limit;
__u64 soft_packet_limit;
__u64 hard_packet_limit;
__u64 soft_add_expires_seconds;
__u64 hard_add_expires_seconds;
__u64 soft_use_expires_seconds;
__u64 hard_use_expires_seconds;
};
struct xfrm_lifetime_cur {
__u64 bytes;
__u64 packets;
__u64 add_time;
__u64 use_time;
};
struct xfrm_replay_state {
__u32 oseq;
__u32 seq;
__u32 bitmap;
};
struct xfrm_replay_state_esn {
unsigned int bmp_len;
__u32 oseq;
__u32 seq;
__u32 oseq_hi;
__u32 seq_hi;
__u32 replay_window;
__u32 bmp[0];
};
struct xfrm_algo {
char alg_name[64];
unsigned int alg_key_len;
char alg_key[0];
};
struct xfrm_algo_auth {
char alg_name[64];
unsigned int alg_key_len;
unsigned int alg_trunc_len;
char alg_key[0];
};
struct xfrm_algo_aead {
char alg_name[64];
unsigned int alg_key_len;
unsigned int alg_icv_len;
char alg_key[0];
};
struct xfrm_stats {
__u32 replay_window;
__u32 replay;
__u32 integrity_failed;
};
enum {
XFRM_POLICY_TYPE_MAIN = 0,
XFRM_POLICY_TYPE_SUB = 1,
XFRM_POLICY_TYPE_MAX = 2,
XFRM_POLICY_TYPE_ANY = 255
};
enum {
XFRM_POLICY_IN = 0,
XFRM_POLICY_OUT = 1,
XFRM_POLICY_FWD = 2,
XFRM_POLICY_MASK = 3,
XFRM_POLICY_MAX = 3
};
enum {
XFRM_SHARE_ANY,
XFRM_SHARE_SESSION,
XFRM_SHARE_USER,
XFRM_SHARE_UNIQUE
};
# 155 "./include/uapi/linux/xfrm.h"
enum {
XFRM_MSG_BASE = 0x10,
XFRM_MSG_NEWSA = 0x10,
XFRM_MSG_DELSA,
XFRM_MSG_GETSA,
XFRM_MSG_NEWPOLICY,
XFRM_MSG_DELPOLICY,
XFRM_MSG_GETPOLICY,
XFRM_MSG_ALLOCSPI,
XFRM_MSG_ACQUIRE,
XFRM_MSG_EXPIRE,
XFRM_MSG_UPDPOLICY,
XFRM_MSG_UPDSA,
XFRM_MSG_POLEXPIRE,
XFRM_MSG_FLUSHSA,
XFRM_MSG_FLUSHPOLICY,
XFRM_MSG_NEWAE,
XFRM_MSG_GETAE,
XFRM_MSG_REPORT,
XFRM_MSG_MIGRATE,
XFRM_MSG_NEWSADINFO,
XFRM_MSG_GETSADINFO,
XFRM_MSG_NEWSPDINFO,
XFRM_MSG_GETSPDINFO,
XFRM_MSG_MAPPING,
__XFRM_MSG_MAX
};
# 225 "./include/uapi/linux/xfrm.h"
struct xfrm_user_sec_ctx {
__u16 len;
__u16 exttype;
__u8 ctx_alg;
__u8 ctx_doi;
__u16 ctx_len;
};
struct xfrm_user_tmpl {
struct xfrm_id id;
__u16 family;
xfrm_address_t saddr;
__u32 reqid;
__u8 mode;
__u8 share;
__u8 optional;
__u32 aalgos;
__u32 ealgos;
__u32 calgos;
};
struct xfrm_encap_tmpl {
__u16 encap_type;
__be16 encap_sport;
__be16 encap_dport;
xfrm_address_t encap_oa;
};
enum xfrm_ae_ftype_t {
XFRM_AE_UNSPEC,
XFRM_AE_RTHR=1,
XFRM_AE_RVAL=2,
XFRM_AE_LVAL=4,
XFRM_AE_ETHR=8,
XFRM_AE_CR=16,
XFRM_AE_CE=32,
XFRM_AE_CU=64,
__XFRM_AE_MAX
};
struct xfrm_userpolicy_type {
__u8 type;
__u16 reserved1;
__u8 reserved2;
};
enum xfrm_attr_type_t {
XFRMA_UNSPEC,
XFRMA_ALG_AUTH,
XFRMA_ALG_CRYPT,
XFRMA_ALG_COMP,
XFRMA_ENCAP,
XFRMA_TMPL,
XFRMA_SA,
XFRMA_POLICY,
XFRMA_SEC_CTX,
XFRMA_LTIME_VAL,
XFRMA_REPLAY_VAL,
XFRMA_REPLAY_THRESH,
XFRMA_ETIMER_THRESH,
XFRMA_SRCADDR,
XFRMA_COADDR,
XFRMA_LASTUSED,
XFRMA_POLICY_TYPE,
XFRMA_MIGRATE,
XFRMA_ALG_AEAD,
XFRMA_KMADDRESS,
XFRMA_ALG_AUTH_TRUNC,
XFRMA_MARK,
XFRMA_TFCPAD,
XFRMA_REPLAY_ESN_VAL,
XFRMA_SA_EXTRA_FLAGS,
XFRMA_PROTO,
XFRMA_ADDRESS_FILTER,
__XFRMA_MAX
};
struct xfrm_mark {
__u32 v;
__u32 m;
};
enum xfrm_sadattr_type_t {
XFRMA_SAD_UNSPEC,
XFRMA_SAD_CNT,
XFRMA_SAD_HINFO,
__XFRMA_SAD_MAX
};
struct xfrmu_sadhinfo {
__u32 sadhcnt;
__u32 sadhmcnt;
};
enum xfrm_spdattr_type_t {
XFRMA_SPD_UNSPEC,
XFRMA_SPD_INFO,
XFRMA_SPD_HINFO,
XFRMA_SPD_IPV4_HTHRESH,
XFRMA_SPD_IPV6_HTHRESH,
__XFRMA_SPD_MAX
};
struct xfrmu_spdinfo {
__u32 incnt;
__u32 outcnt;
__u32 fwdcnt;
__u32 inscnt;
__u32 outscnt;
__u32 fwdscnt;
};
struct xfrmu_spdhinfo {
__u32 spdhcnt;
__u32 spdhmcnt;
};
struct xfrmu_spdhthresh {
__u8 lbits;
__u8 rbits;
};
struct xfrm_usersa_info {
struct xfrm_selector sel;
struct xfrm_id id;
xfrm_address_t saddr;
struct xfrm_lifetime_cfg lft;
struct xfrm_lifetime_cur curlft;
struct xfrm_stats stats;
__u32 seq;
__u32 reqid;
__u16 family;
__u8 mode;
__u8 replay_window;
__u8 flags;
# 378 "./include/uapi/linux/xfrm.h"
};
struct xfrm_usersa_id {
xfrm_address_t daddr;
__be32 spi;
__u16 family;
__u8 proto;
};
struct xfrm_aevent_id {
struct xfrm_usersa_id sa_id;
xfrm_address_t saddr;
__u32 flags;
__u32 reqid;
};
struct xfrm_userspi_info {
struct xfrm_usersa_info info;
__u32 min;
__u32 max;
};
struct xfrm_userpolicy_info {
struct xfrm_selector sel;
struct xfrm_lifetime_cfg lft;
struct xfrm_lifetime_cur curlft;
__u32 priority;
__u32 index;
__u8 dir;
__u8 action;
__u8 flags;
__u8 share;
};
struct xfrm_userpolicy_id {
struct xfrm_selector sel;
__u32 index;
__u8 dir;
};
struct xfrm_user_acquire {
struct xfrm_id id;
xfrm_address_t saddr;
struct xfrm_selector sel;
struct xfrm_userpolicy_info policy;
__u32 aalgos;
__u32 ealgos;
__u32 calgos;
__u32 seq;
};
struct xfrm_user_expire {
struct xfrm_usersa_info state;
__u8 hard;
};
struct xfrm_user_polexpire {
struct xfrm_userpolicy_info pol;
__u8 hard;
};
struct xfrm_usersa_flush {
__u8 proto;
};
struct xfrm_user_report {
__u8 proto;
struct xfrm_selector sel;
};
struct xfrm_user_kmaddress {
xfrm_address_t local;
xfrm_address_t remote;
__u32 reserved;
__u16 family;
};
struct xfrm_user_migrate {
xfrm_address_t old_daddr;
xfrm_address_t old_saddr;
xfrm_address_t new_daddr;
xfrm_address_t new_saddr;
__u8 proto;
__u8 mode;
__u16 reserved;
__u32 reqid;
__u16 old_family;
__u16 new_family;
};
struct xfrm_user_mapping {
struct xfrm_usersa_id id;
__u32 reqid;
xfrm_address_t old_saddr;
xfrm_address_t new_saddr;
__be16 old_sport;
__be16 new_sport;
};
struct xfrm_address_filter {
xfrm_address_t saddr;
xfrm_address_t daddr;
__u16 family;
__u8 splen;
__u8 dplen;
};
# 503 "./include/uapi/linux/xfrm.h"
enum xfrm_nlgroups {
XFRMNLGRP_NONE,
XFRMNLGRP_ACQUIRE,
XFRMNLGRP_EXPIRE,
XFRMNLGRP_SA,
XFRMNLGRP_POLICY,
XFRMNLGRP_AEVENTS,
XFRMNLGRP_REPORT,
XFRMNLGRP_MIGRATE,
XFRMNLGRP_MAPPING,
__XFRMNLGRP_MAX
};
# 8 "include/net/netns/xfrm.h" 2
# 1 "include/net/flowcache.h" 1
# 1 "include/linux/interrupt.h" 1
# 10 "include/linux/interrupt.h"
# 1 "include/linux/irqreturn.h" 1
# 10 "include/linux/irqreturn.h"
enum irqreturn {
IRQ_NONE = (0 << 0),
IRQ_HANDLED = (1 << 0),
IRQ_WAKE_THREAD = (1 << 1),
};
typedef enum irqreturn irqreturn_t;
# 11 "include/linux/interrupt.h" 2
# 1 "include/linux/hardirq.h" 1
# 1 "include/linux/ftrace_irq.h" 1
# 9 "include/linux/ftrace_irq.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ftrace_nmi_enter(void) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ftrace_nmi_exit(void) { }
# 7 "include/linux/hardirq.h" 2
# 1 "include/linux/vtime.h" 1
# 1 "include/linux/context_tracking_state.h" 1
# 1 "include/linux/static_key.h" 1
# 6 "include/linux/context_tracking_state.h" 2
struct context_tracking {
bool active;
enum ctx_state {
IN_KERNEL = 0,
IN_USER,
} state;
};
# 40 "include/linux/context_tracking_state.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool context_tracking_in_user(void) { return false; }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool context_tracking_active(void) { return false; }
# 5 "include/linux/vtime.h" 2
struct task_struct;
# 32 "include/linux/vtime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool vtime_accounting_enabled(void) { return false; }
# 69 "include/linux/vtime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vtime_task_switch(struct task_struct *prev) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vtime_account_system(struct task_struct *tsk) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vtime_account_user(struct task_struct *tsk) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vtime_account_irq_enter(struct task_struct *tsk) { }
# 95 "include/linux/vtime.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vtime_account_irq_exit(struct task_struct *tsk)
{
vtime_account_system(tsk);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vtime_user_enter(struct task_struct *tsk) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vtime_user_exit(struct task_struct *tsk) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vtime_guest_enter(struct task_struct *tsk) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vtime_guest_exit(struct task_struct *tsk) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void vtime_init_idle(struct task_struct *tsk, int cpu) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irqtime_account_irq(struct task_struct *tsk) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void account_irq_enter_time(struct task_struct *tsk)
{
vtime_account_irq_enter(tsk);
irqtime_account_irq(tsk);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void account_irq_exit_time(struct task_struct *tsk)
{
vtime_account_irq_exit(tsk);
irqtime_account_irq(tsk);
}
# 8 "include/linux/hardirq.h" 2
# 1 "./arch/mips/include/asm/hardirq.h" 1
# 13 "./arch/mips/include/asm/hardirq.h"
extern void ack_bad_irq(unsigned int irq);
# 1 "include/asm-generic/hardirq.h" 1
typedef struct {
unsigned int __softirq_pending;
} __attribute__((__aligned__((1 << 5)))) irq_cpustat_t;
# 1 "include/linux/irq_cpustat.h" 1
# 20 "include/linux/irq_cpustat.h"
extern irq_cpustat_t irq_stat[];
# 12 "include/asm-generic/hardirq.h" 2
# 1 "include/linux/irq.h" 1
# 24 "include/linux/irq.h"
# 1 "./arch/mips/include/asm/irq.h" 1
# 14 "./arch/mips/include/asm/irq.h"
# 1 "include/linux/irqdomain.h" 1
# 38 "include/linux/irqdomain.h"
struct device_node;
struct irq_domain;
struct of_device_id;
# 60 "include/linux/irqdomain.h"
struct irq_domain_ops {
int (*match)(struct irq_domain *d, struct device_node *node);
int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw);
void (*unmap)(struct irq_domain *d, unsigned int virq);
int (*xlate)(struct irq_domain *d, struct device_node *node,
const u32 *intspec, unsigned int intsize,
unsigned long *out_hwirq, unsigned int *out_type);
};
extern struct irq_domain_ops irq_generic_chip_ops;
struct irq_domain_chip_generic;
# 95 "include/linux/irqdomain.h"
struct irq_domain {
struct list_head link;
const char *name;
const struct irq_domain_ops *ops;
void *host_data;
struct device_node *of_node;
struct irq_domain_chip_generic *gc;
irq_hw_number_t hwirq_max;
unsigned int revmap_direct_max_irq;
unsigned int revmap_size;
struct radix_tree_root revmap_tree;
unsigned int linear_revmap[];
};
# 224 "include/linux/irqdomain.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_dispose_mapping(unsigned int virq) { }
# 15 "./arch/mips/include/asm/irq.h" 2
# 1 "./arch/mips/include/asm/mipsmtregs.h" 1
# 181 "./arch/mips/include/asm/mipsmtregs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned core_nvpes(void)
{
unsigned conf0;
if (!(cpu_data[0].ases & 0x00000020))
return 1;
conf0 = ({ int __res; if (2 == 0) __asm__ __volatile__( "mfc0\t%0, " "$0" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$0" ", " "2" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; });
return ((conf0 & ( (unsigned long)(0xf) << 10)) >> 10) + 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int dvpe(void)
{
int res = 0;
__asm__ __volatile__(
" .set push \n"
" .set noreorder \n"
" .set noat \n"
" .set mips32r2 \n"
" .word 0x41610001 # dvpe $1 \n"
" move %0, $1 \n"
" ehb \n"
" .set pop \n"
: "=r" (res));
do { unsigned long tmp; __asm__ __volatile__( " .set mips64r2 \n" " dla %0, 1f \n" " jr.hb %0 \n" " .set mips0 \n" "1: \n" : "=r" (tmp)); } while (0);
return res;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_evpe(void)
{
__asm__ __volatile__(
" .set push \n"
" .set noreorder \n"
" .set noat \n"
" .set mips32r2 \n"
" .word 0x41600021 # evpe \n"
" ehb \n"
" .set pop \n");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void evpe(int previous)
{
if ((previous & ((unsigned long)(1))))
__raw_evpe();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int dmt(void)
{
int res;
__asm__ __volatile__(
" .set push \n"
" .set mips32r2 \n"
" .set noat \n"
" .word 0x41610BC1 # dmt $1 \n"
" ehb \n"
" move %0, $1 \n"
" .set pop \n"
: "=r" (res));
do { unsigned long tmp; __asm__ __volatile__( " .set mips64r2 \n" " dla %0, 1f \n" " jr.hb %0 \n" " .set mips0 \n" "1: \n" : "=r" (tmp)); } while (0);
return res;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __raw_emt(void)
{
__asm__ __volatile__(
" .set noreorder \n"
" .set mips32r2 \n"
" .word 0x41600be1 # emt \n"
" ehb \n"
" .set mips0 \n"
" .set reorder");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void emt(int previous)
{
if ((previous & ((unsigned long)(1) << 15)))
__raw_emt();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ehb(void)
{
__asm__ __volatile__(
" .set mips32r2 \n"
" ehb \n"
" .set mips0 \n");
}
# 417 "./arch/mips/include/asm/mipsmtregs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int set_c0_mvpcontrol(unsigned int set) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$0" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$0" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res | set; do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$0" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$0" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int clear_c0_mvpcontrol(unsigned int clear) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$0" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$0" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~clear; do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$0" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$0" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; } static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int change_c0_mvpcontrol(unsigned int change, unsigned int val) { unsigned int res, new; res = ({ int __res; if (1 == 0) __asm__ __volatile__( "mfc0\t%0, " "$0" "\n\t" : "=r" (__res)); else __asm__ __volatile__( ".set\tmips32\n\t" "mfc0\t%0, " "$0" ", " "1" "\n\t" ".set\tmips0\n\t" : "=r" (__res)); __res; }); new = res & ~change; new |= (val & change); do { if (1 == 0) __asm__ __volatile__( "mtc0\t%z0, " "$0" "\n\t" : : "Jr" ((unsigned int)(new))); else __asm__ __volatile__( ".set\tmips32\n\t" "mtc0\t%z0, " "$0" ", " "1" "\n\t" ".set\tmips0" : : "Jr" ((unsigned int)(new))); } while (0); return res; }
# 17 "./arch/mips/include/asm/irq.h" 2
# 1 "./arch/mips/include/asm/tc3162/irq.h" 1
# 11 "./arch/mips/include/asm/tc3162/irq.h"
# 1 "./arch/mips/include/asm/mach-generic/irq.h" 1
# 12 "./arch/mips/include/asm/tc3162/irq.h" 2
# 19 "./arch/mips/include/asm/irq.h" 2
# 29 "./arch/mips/include/asm/irq.h"
void plat_irq_dispatch(void);
extern void do_IRQ(unsigned int irq);
extern void arch_init_irq(void);
extern void spurious_interrupt(void);
extern int allocate_irqno(void);
extern void alloc_legacy_irqno(void);
extern void free_irqno(unsigned int irq);
# 47 "./arch/mips/include/asm/irq.h"
extern int cp0_compare_irq;
extern int cp0_compare_irq_shift;
extern int cp0_perfcount_irq;
# 25 "include/linux/irq.h" 2
# 1 "./arch/mips/include/asm/irq_regs.h" 1
# 16 "./arch/mips/include/asm/irq_regs.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct pt_regs *get_irq_regs(void)
{
return current_thread_info()->regs;
}
# 27 "include/linux/irq.h" 2
struct seq_file;
struct module;
struct irq_desc;
struct irq_data;
typedef void (*irq_flow_handler_t)(unsigned int irq,
struct irq_desc *desc);
typedef void (*irq_preflow_handler_t)(struct irq_data *data);
# 77 "include/linux/irq.h"
enum {
IRQ_TYPE_NONE = 0x00000000,
IRQ_TYPE_EDGE_RISING = 0x00000001,
IRQ_TYPE_EDGE_FALLING = 0x00000002,
IRQ_TYPE_EDGE_BOTH = (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING),
IRQ_TYPE_LEVEL_HIGH = 0x00000004,
IRQ_TYPE_LEVEL_LOW = 0x00000008,
IRQ_TYPE_LEVEL_MASK = (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH),
IRQ_TYPE_SENSE_MASK = 0x0000000f,
IRQ_TYPE_DEFAULT = IRQ_TYPE_SENSE_MASK,
IRQ_TYPE_PROBE = 0x00000010,
IRQ_LEVEL = (1 << 8),
IRQ_PER_CPU = (1 << 9),
IRQ_NOPROBE = (1 << 10),
IRQ_NOREQUEST = (1 << 11),
IRQ_NOAUTOEN = (1 << 12),
IRQ_NO_BALANCING = (1 << 13),
IRQ_MOVE_PCNTXT = (1 << 14),
IRQ_NESTED_THREAD = (1 << 15),
IRQ_NOTHREAD = (1 << 16),
IRQ_PER_CPU_DEVID = (1 << 17),
IRQ_IS_POLLED = (1 << 18),
};
# 117 "include/linux/irq.h"
enum {
IRQ_SET_MASK_OK = 0,
IRQ_SET_MASK_OK_NOCOPY,
};
struct msi_desc;
struct irq_domain;
# 146 "include/linux/irq.h"
struct irq_data {
u32 mask;
unsigned int irq;
unsigned long hwirq;
unsigned int node;
unsigned int state_use_accessors;
struct irq_chip *chip;
struct irq_domain *domain;
void *handler_data;
void *chip_data;
struct msi_desc *msi_desc;
cpumask_var_t affinity;
};
# 178 "include/linux/irq.h"
enum {
IRQD_TRIGGER_MASK = 0xf,
IRQD_SETAFFINITY_PENDING = (1 << 8),
IRQD_NO_BALANCING = (1 << 10),
IRQD_PER_CPU = (1 << 11),
IRQD_AFFINITY_SET = (1 << 12),
IRQD_LEVEL = (1 << 13),
IRQD_WAKEUP_STATE = (1 << 14),
IRQD_MOVE_PCNTXT = (1 << 15),
IRQD_IRQ_DISABLED = (1 << 16),
IRQD_IRQ_MASKED = (1 << 17),
IRQD_IRQ_INPROGRESS = (1 << 18),
IRQD_WAKEUP_ARMED = (1 << 19),
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_is_setaffinity_pending(struct irq_data *d)
{
return d->state_use_accessors & IRQD_SETAFFINITY_PENDING;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_is_per_cpu(struct irq_data *d)
{
return d->state_use_accessors & IRQD_PER_CPU;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_can_balance(struct irq_data *d)
{
return !(d->state_use_accessors & (IRQD_PER_CPU | IRQD_NO_BALANCING));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_affinity_was_set(struct irq_data *d)
{
return d->state_use_accessors & IRQD_AFFINITY_SET;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irqd_mark_affinity_was_set(struct irq_data *d)
{
d->state_use_accessors |= IRQD_AFFINITY_SET;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 irqd_get_trigger_type(struct irq_data *d)
{
return d->state_use_accessors & IRQD_TRIGGER_MASK;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irqd_set_trigger_type(struct irq_data *d, u32 type)
{
d->state_use_accessors &= ~IRQD_TRIGGER_MASK;
d->state_use_accessors |= type & IRQD_TRIGGER_MASK;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_is_level_type(struct irq_data *d)
{
return d->state_use_accessors & IRQD_LEVEL;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_is_wakeup_set(struct irq_data *d)
{
return d->state_use_accessors & IRQD_WAKEUP_STATE;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_can_move_in_process_context(struct irq_data *d)
{
return d->state_use_accessors & IRQD_MOVE_PCNTXT;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_irq_disabled(struct irq_data *d)
{
return d->state_use_accessors & IRQD_IRQ_DISABLED;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_irq_masked(struct irq_data *d)
{
return d->state_use_accessors & IRQD_IRQ_MASKED;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_irq_inprogress(struct irq_data *d)
{
return d->state_use_accessors & IRQD_IRQ_INPROGRESS;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool irqd_is_wakeup_armed(struct irq_data *d)
{
return d->state_use_accessors & IRQD_WAKEUP_ARMED;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irqd_set_chained_irq_inprogress(struct irq_data *d)
{
d->state_use_accessors |= IRQD_IRQ_INPROGRESS;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irqd_clr_chained_irq_inprogress(struct irq_data *d)
{
d->state_use_accessors &= ~IRQD_IRQ_INPROGRESS;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) irq_hw_number_t irqd_to_hwirq(struct irq_data *d)
{
return d->hwirq;
}
# 320 "include/linux/irq.h"
struct irq_chip {
const char *name;
unsigned int (*irq_startup)(struct irq_data *data);
void (*irq_shutdown)(struct irq_data *data);
void (*irq_enable)(struct irq_data *data);
void (*irq_disable)(struct irq_data *data);
void (*irq_ack)(struct irq_data *data);
void (*irq_mask)(struct irq_data *data);
void (*irq_mask_ack)(struct irq_data *data);
void (*irq_unmask)(struct irq_data *data);
void (*irq_eoi)(struct irq_data *data);
int (*irq_set_affinity)(struct irq_data *data, const struct cpumask *dest, bool force);
int (*irq_retrigger)(struct irq_data *data);
int (*irq_set_type)(struct irq_data *data, unsigned int flow_type);
int (*irq_set_wake)(struct irq_data *data, unsigned int on);
void (*irq_bus_lock)(struct irq_data *data);
void (*irq_bus_sync_unlock)(struct irq_data *data);
void (*irq_cpu_online)(struct irq_data *data);
void (*irq_cpu_offline)(struct irq_data *data);
void (*irq_suspend)(struct irq_data *data);
void (*irq_resume)(struct irq_data *data);
void (*irq_pm_shutdown)(struct irq_data *data);
void (*irq_calc_mask)(struct irq_data *data);
void (*irq_print_chip)(struct irq_data *data, struct seq_file *p);
int (*irq_request_resources)(struct irq_data *data);
void (*irq_release_resources)(struct irq_data *data);
unsigned long flags;
};
# 369 "include/linux/irq.h"
enum {
IRQCHIP_SET_TYPE_MASKED = (1 << 0),
IRQCHIP_EOI_IF_HANDLED = (1 << 1),
IRQCHIP_MASK_ON_SUSPEND = (1 << 2),
IRQCHIP_ONOFFLINE_ENABLED = (1 << 3),
IRQCHIP_SKIP_SET_WAKE = (1 << 4),
IRQCHIP_ONESHOT_SAFE = (1 << 5),
IRQCHIP_EOI_THREADED = (1 << 6),
};
# 1 "include/linux/irqdesc.h" 1
# 11 "include/linux/irqdesc.h"
struct irq_affinity_notify;
struct proc_dir_entry;
struct module;
struct irq_desc;
struct irq_domain;
struct pt_regs;
# 49 "include/linux/irqdesc.h"
struct irq_desc {
struct irq_data irq_data;
unsigned int *kstat_irqs;
irq_flow_handler_t handle_irq;
struct irqaction *action;
unsigned int status_use_accessors;
unsigned int core_internal_state__do_not_mess_with_it;
unsigned int depth;
unsigned int wake_depth;
unsigned int irq_count;
unsigned long last_unhandled;
unsigned int irqs_unhandled;
atomic_t threads_handled;
int threads_handled_last;
raw_spinlock_t lock;
struct cpumask *percpu_enabled;
const struct cpumask *affinity_hint;
struct irq_affinity_notify *affinity_notify;
unsigned long threads_oneshot;
atomic_t threads_active;
wait_queue_head_t wait_for_threads;
struct proc_dir_entry *dir;
int parent_irq;
struct module *owner;
const char *name;
} __attribute__((__aligned__(1 << (5))));
extern struct irq_desc irq_desc[64];
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct irq_data *irq_desc_get_irq_data(struct irq_desc *desc)
{
return &desc->irq_data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct irq_chip *irq_desc_get_chip(struct irq_desc *desc)
{
return desc->irq_data.chip;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *irq_desc_get_chip_data(struct irq_desc *desc)
{
return desc->irq_data.chip_data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *irq_desc_get_handler_data(struct irq_desc *desc)
{
return desc->irq_data.handler_data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct msi_desc *irq_desc_get_msi_desc(struct irq_desc *desc)
{
return desc->irq_data.msi_desc;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void generic_handle_irq_desc(unsigned int irq, struct irq_desc *desc)
{
desc->handle_irq(irq, desc);
}
int generic_handle_irq(unsigned int irq);
# 151 "include/linux/irqdesc.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int irq_has_action(unsigned int irq)
{
struct irq_desc *desc = irq_to_desc(irq);
return desc->action != ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __irq_set_handler_locked(unsigned int irq,
irq_flow_handler_t handler)
{
struct irq_desc *desc;
desc = irq_to_desc(irq);
desc->handle_irq = handler;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
__irq_set_chip_handler_name_locked(unsigned int irq, struct irq_chip *chip,
irq_flow_handler_t handler, const char *name)
{
struct irq_desc *desc;
desc = irq_to_desc(irq);
irq_desc_get_irq_data(desc)->chip = chip;
desc->handle_irq = handler;
desc->name = name;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int irq_balancing_disabled(unsigned int irq)
{
struct irq_desc *desc;
desc = irq_to_desc(irq);
return desc->status_use_accessors & (IRQ_PER_CPU | IRQ_NO_BALANCING);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int irq_is_percpu(unsigned int irq)
{
struct irq_desc *desc;
desc = irq_to_desc(irq);
return desc->status_use_accessors & IRQ_PER_CPU;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
irq_set_lockdep_class(unsigned int irq, struct lock_class_key *class)
{
struct irq_desc *desc = irq_to_desc(irq);
if (desc)
do { (void)(class); } while (0);
}
# 381 "include/linux/irq.h" 2
# 1 "./arch/mips/include/asm/hw_irq.h" 1
# 13 "./arch/mips/include/asm/hw_irq.h"
extern atomic_t irq_err_count;
# 386 "include/linux/irq.h" 2
# 397 "include/linux/irq.h"
struct irqaction;
extern int setup_irq(unsigned int irq, struct irqaction *new);
extern void remove_irq(unsigned int irq, struct irqaction *act);
extern int setup_percpu_irq(unsigned int irq, struct irqaction *new);
extern void remove_percpu_irq(unsigned int irq, struct irqaction *act);
extern void irq_cpu_online(void);
extern void irq_cpu_offline(void);
extern int irq_set_affinity_locked(struct irq_data *data,
const struct cpumask *cpumask, bool force);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_move_irq(struct irq_data *data) { }
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_move_masked_irq(struct irq_data *data) { }
extern int no_irq_affinity;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int irq_set_parent(int irq, int parent_irq)
{
return 0;
}
extern void handle_level_irq(unsigned int irq, struct irq_desc *desc);
extern void handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc);
extern void handle_edge_irq(unsigned int irq, struct irq_desc *desc);
extern void handle_edge_eoi_irq(unsigned int irq, struct irq_desc *desc);
extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc);
extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc);
extern void handle_percpu_devid_irq(unsigned int irq, struct irq_desc *desc);
extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc);
extern void handle_nested_irq(unsigned int irq);
extern void note_interrupt(unsigned int irq, struct irq_desc *desc,
irqreturn_t action_ret);
extern int noirqdebug_setup(char *str);
extern int can_request_irq(unsigned int irq, unsigned long irqflags);
extern struct irq_chip no_irq_chip;
extern struct irq_chip dummy_irq_chip;
extern void
irq_set_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
irq_flow_handler_t handle, const char *name);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_set_chip_and_handler(unsigned int irq, struct irq_chip *chip,
irq_flow_handler_t handle)
{
irq_set_chip_and_handler_name(irq, chip, handle, ((void *)0));
}
extern int irq_set_percpu_devid(unsigned int irq);
extern void
__irq_set_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
const char *name);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
irq_set_handler(unsigned int irq, irq_flow_handler_t handle)
{
__irq_set_handler(irq, handle, 0, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void
irq_set_chained_handler(unsigned int irq, irq_flow_handler_t handle)
{
__irq_set_handler(irq, handle, 1, ((void *)0));
}
void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_set_status_flags(unsigned int irq, unsigned long set)
{
irq_modify_status(irq, 0, set);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_clear_status_flags(unsigned int irq, unsigned long clr)
{
irq_modify_status(irq, clr, 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_set_noprobe(unsigned int irq)
{
irq_modify_status(irq, 0, IRQ_NOPROBE);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_set_probe(unsigned int irq)
{
irq_modify_status(irq, IRQ_NOPROBE, 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_set_nothread(unsigned int irq)
{
irq_modify_status(irq, 0, IRQ_NOTHREAD);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_set_thread(unsigned int irq)
{
irq_modify_status(irq, IRQ_NOTHREAD, 0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_set_nested_thread(unsigned int irq, bool nest)
{
if (nest)
irq_set_status_flags(irq, IRQ_NESTED_THREAD);
else
irq_clear_status_flags(irq, IRQ_NESTED_THREAD);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_set_percpu_devid_flags(unsigned int irq)
{
irq_set_status_flags(irq,
IRQ_NOAUTOEN | IRQ_PER_CPU | IRQ_NOTHREAD |
IRQ_NOPROBE | IRQ_PER_CPU_DEVID);
}
extern int irq_set_chip(unsigned int irq, struct irq_chip *chip);
extern int irq_set_handler_data(unsigned int irq, void *data);
extern int irq_set_chip_data(unsigned int irq, void *data);
extern int irq_set_irq_type(unsigned int irq, unsigned int type);
extern int irq_set_msi_desc(unsigned int irq, struct msi_desc *entry);
extern int irq_set_msi_desc_off(unsigned int irq_base, unsigned int irq_offset,
struct msi_desc *entry);
extern struct irq_data *irq_get_irq_data(unsigned int irq);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct irq_chip *irq_get_chip(unsigned int irq)
{
struct irq_data *d = irq_get_irq_data(irq);
return d ? d->chip : ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct irq_chip *irq_data_get_irq_chip(struct irq_data *d)
{
return d->chip;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *irq_get_chip_data(unsigned int irq)
{
struct irq_data *d = irq_get_irq_data(irq);
return d ? d->chip_data : ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *irq_data_get_irq_chip_data(struct irq_data *d)
{
return d->chip_data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *irq_get_handler_data(unsigned int irq)
{
struct irq_data *d = irq_get_irq_data(irq);
return d ? d->handler_data : ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *irq_data_get_irq_handler_data(struct irq_data *d)
{
return d->handler_data;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct msi_desc *irq_get_msi_desc(unsigned int irq)
{
struct irq_data *d = irq_get_irq_data(irq);
return d ? d->msi_desc : ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct msi_desc *irq_data_get_msi(struct irq_data *d)
{
return d->msi_desc;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 irq_get_trigger_type(unsigned int irq)
{
struct irq_data *d = irq_get_irq_data(irq);
return d ? irqd_get_trigger_type(d) : 0;
}
unsigned int arch_dynirq_lower_bound(unsigned int from);
int __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node,
struct module *owner);
# 617 "include/linux/irq.h"
void irq_free_descs(unsigned int irq, unsigned int cnt);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_free_desc(unsigned int irq)
{
irq_free_descs(irq, 1);
}
# 659 "include/linux/irq.h"
struct irq_chip_regs {
unsigned long enable;
unsigned long disable;
unsigned long mask;
unsigned long ack;
unsigned long eoi;
unsigned long type;
unsigned long polarity;
};
# 682 "include/linux/irq.h"
struct irq_chip_type {
struct irq_chip chip;
struct irq_chip_regs regs;
irq_flow_handler_t handler;
u32 type;
u32 mask_cache_priv;
u32 *mask_cache;
};
# 716 "include/linux/irq.h"
struct irq_chip_generic {
raw_spinlock_t lock;
void *reg_base;
unsigned int irq_base;
unsigned int irq_cnt;
u32 mask_cache;
u32 type_cache;
u32 polarity_cache;
u32 wake_enabled;
u32 wake_active;
unsigned int num_ct;
void *private;
unsigned long installed;
unsigned long unused;
struct irq_domain *domain;
struct list_head list;
struct irq_chip_type chip_types[0];
};
# 744 "include/linux/irq.h"
enum irq_gc_flags {
IRQ_GC_INIT_MASK_CACHE = 1 << 0,
IRQ_GC_INIT_NESTED_LOCK = 1 << 1,
IRQ_GC_MASK_CACHE_PER_TYPE = 1 << 2,
IRQ_GC_NO_MASK = 1 << 3,
};
# 760 "include/linux/irq.h"
struct irq_domain_chip_generic {
unsigned int irqs_per_chip;
unsigned int num_chips;
unsigned int irq_flags_to_clear;
unsigned int irq_flags_to_set;
enum irq_gc_flags gc_flags;
struct irq_chip_generic *gc[0];
};
void irq_gc_noop(struct irq_data *d);
void irq_gc_mask_disable_reg(struct irq_data *d);
void irq_gc_mask_set_bit(struct irq_data *d);
void irq_gc_mask_clr_bit(struct irq_data *d);
void irq_gc_unmask_enable_reg(struct irq_data *d);
void irq_gc_ack_set_bit(struct irq_data *d);
void irq_gc_ack_clr_bit(struct irq_data *d);
void irq_gc_mask_disable_reg_and_ack(struct irq_data *d);
void irq_gc_eoi(struct irq_data *d);
int irq_gc_set_wake(struct irq_data *d, unsigned int on);
int irq_map_generic_chip(struct irq_domain *d, unsigned int virq,
irq_hw_number_t hw_irq);
struct irq_chip_generic *
irq_alloc_generic_chip(const char *name, int nr_ct, unsigned int irq_base,
void *reg_base, irq_flow_handler_t handler);
void irq_setup_generic_chip(struct irq_chip_generic *gc, u32 msk,
enum irq_gc_flags flags, unsigned int clr,
unsigned int set);
int irq_setup_alt_chip(struct irq_data *d, unsigned int type);
void irq_remove_generic_chip(struct irq_chip_generic *gc, u32 msk,
unsigned int clr, unsigned int set);
struct irq_chip_generic *irq_get_domain_generic_chip(struct irq_domain *d, unsigned int hw_irq);
int irq_alloc_domain_generic_chips(struct irq_domain *d, int irqs_per_chip,
int num_ct, const char *name,
irq_flow_handler_t handler,
unsigned int clr, unsigned int set,
enum irq_gc_flags flags);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct irq_chip_type *irq_data_get_chip_type(struct irq_data *d)
{
return ({ const typeof( ((struct irq_chip_type *)0)->chip ) *__mptr = (d->chip); (struct irq_chip_type *)( (char *)__mptr - __builtin_offsetof(struct irq_chip_type,chip) );});
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_gc_lock(struct irq_chip_generic *gc)
{
_raw_spin_lock(&gc->lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void irq_gc_unlock(struct irq_chip_generic *gc)
{
__raw_spin_unlock(&gc->lock);
}
# 13 "include/asm-generic/hardirq.h" 2
# 17 "./arch/mips/include/asm/hardirq.h" 2
# 9 "include/linux/hardirq.h" 2
extern void synchronize_irq(unsigned int irq);
extern void synchronize_hardirq(unsigned int irq);
# 25 "include/linux/hardirq.h"
extern void rcu_nmi_enter(void);
extern void rcu_nmi_exit(void);
# 45 "include/linux/hardirq.h"
extern void irq_enter(void);
# 60 "include/linux/hardirq.h"
extern void irq_exit(void);
# 13 "include/linux/interrupt.h" 2
# 83 "include/linux/interrupt.h"
enum {
IRQC_IS_HARDIRQ = 0,
IRQC_IS_NESTED,
};
typedef irqreturn_t (*irq_handler_t)(int, void *);
# 105 "include/linux/interrupt.h"
struct irqaction {
irq_handler_t handler;
void *dev_id;
void *percpu_dev_id;
struct irqaction *next;
irq_handler_t thread_fn;
struct task_struct *thread;
unsigned int irq;
unsigned int flags;
unsigned long thread_flags;
unsigned long thread_mask;
const char *name;
struct proc_dir_entry *dir;
} __attribute__((__aligned__(1 << (5))));
extern irqreturn_t no_action(int cpl, void *dev_id);
extern int __attribute__((warn_unused_result))
request_threaded_irq(unsigned int irq, irq_handler_t handler,
irq_handler_t thread_fn,
unsigned long flags, const char *name, void *dev);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result))
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
const char *name, void *dev)
{
return request_threaded_irq(irq, handler, ((void *)0), flags, name, dev);
}
extern int __attribute__((warn_unused_result))
request_any_context_irq(unsigned int irq, irq_handler_t handler,
unsigned long flags, const char *name, void *dev_id);
extern int __attribute__((warn_unused_result))
request_percpu_irq(unsigned int irq, irq_handler_t handler,
const char *devname, void *percpu_dev_id);
extern void free_irq(unsigned int, void *);
extern void free_percpu_irq(unsigned int, void *);
struct device;
extern int __attribute__((warn_unused_result))
devm_request_threaded_irq(struct device *dev, unsigned int irq,
irq_handler_t handler, irq_handler_t thread_fn,
unsigned long irqflags, const char *devname,
void *dev_id);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __attribute__((warn_unused_result))
devm_request_irq(struct device *dev, unsigned int irq, irq_handler_t handler,
unsigned long irqflags, const char *devname, void *dev_id)
{
return devm_request_threaded_irq(dev, irq, handler, ((void *)0), irqflags,
devname, dev_id);
}
extern int __attribute__((warn_unused_result))
devm_request_any_context_irq(struct device *dev, unsigned int irq,
irq_handler_t handler, unsigned long irqflags,
const char *devname, void *dev_id);
extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id);
# 186 "include/linux/interrupt.h"
extern void disable_irq_nosync(unsigned int irq);
extern void disable_irq(unsigned int irq);
extern void disable_percpu_irq(unsigned int irq);
extern void enable_irq(unsigned int irq);
extern void enable_percpu_irq(unsigned int irq, unsigned int type);
extern void irq_wake_thread(unsigned int irq, void *dev_id);
extern void suspend_device_irqs(void);
extern void resume_device_irqs(void);
# 209 "include/linux/interrupt.h"
struct irq_affinity_notify {
unsigned int irq;
struct kref kref;
struct work_struct work;
void (*notify)(struct irq_affinity_notify *, const cpumask_t *mask);
void (*release)(struct kref *ref);
};
extern cpumask_var_t irq_default_affinity;
extern int __irq_set_affinity(unsigned int irq, const struct cpumask *cpumask,
bool force);
# 232 "include/linux/interrupt.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
irq_set_affinity(unsigned int irq, const struct cpumask *cpumask)
{
return __irq_set_affinity(irq, cpumask, false);
}
# 249 "include/linux/interrupt.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int
irq_force_affinity(unsigned int irq, const struct cpumask *cpumask)
{
return __irq_set_affinity(irq, cpumask, true);
}
extern int irq_can_set_affinity(unsigned int irq);
extern int irq_select_affinity(unsigned int irq);
extern int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m);
extern int
irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify);
# 306 "include/linux/interrupt.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void disable_irq_nosync_lockdep(unsigned int irq)
{
disable_irq_nosync(irq);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void disable_irq_nosync_lockdep_irqsave(unsigned int irq, unsigned long *flags)
{
disable_irq_nosync(irq);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void disable_irq_lockdep(unsigned int irq)
{
disable_irq(irq);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void enable_irq_lockdep(unsigned int irq)
{
enable_irq(irq);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void enable_irq_lockdep_irqrestore(unsigned int irq, unsigned long *flags)
{
enable_irq(irq);
}
extern int irq_set_irq_wake(unsigned int irq, unsigned int on);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int enable_irq_wake(unsigned int irq)
{
return irq_set_irq_wake(irq, 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int disable_irq_wake(unsigned int irq)
{
return irq_set_irq_wake(irq, 0);
}
extern bool force_irqthreads;
# 387 "include/linux/interrupt.h"
enum
{
HI_SOFTIRQ=0,
TIMER_SOFTIRQ,
NET_TX_SOFTIRQ,
NET_RX_SOFTIRQ,
BLOCK_SOFTIRQ,
BLOCK_IOPOLL_SOFTIRQ,
TASKLET_SOFTIRQ,
SCHED_SOFTIRQ,
HRTIMER_SOFTIRQ,
RCU_SOFTIRQ,
NR_SOFTIRQS
};
extern const char * const softirq_to_name[NR_SOFTIRQS];
struct softirq_action
{
void (*action)(struct softirq_action *);
};
void do_softirq(void);
void __do_softirq(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void do_softirq_own_stack(void)
{
__do_softirq();
}
extern void open_softirq(int nr, void (*action)(struct softirq_action *));
extern void softirq_init(void);
extern void __raise_softirq_irqoff(unsigned int nr);
extern void raise_softirq_irqoff(unsigned int nr);
extern void raise_softirq(unsigned int nr);
extern __attribute__((section(".data..percpu" ""))) __typeof__(struct task_struct *) ksoftirqd;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct task_struct *this_cpu_ksoftirqd(void)
{
return ({ typeof(ksoftirqd) pscr_ret__; do { const void *__vpp_verify = (typeof((&(ksoftirqd)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(ksoftirqd)) { case 1: pscr_ret__ = ({ typeof(ksoftirqd) __ret; __asm__ __volatile__("": : :"memory"); __ret = *({ do { const void *__vpp_verify = (typeof((&(ksoftirqd)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(ksoftirqd))) *)(&(ksoftirqd)))); (typeof((typeof(*(&(ksoftirqd))) *)(&(ksoftirqd)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }); __asm__ __volatile__("": : :"memory"); __ret; }); break; case 2: pscr_ret__ = ({ typeof(ksoftirqd) __ret; __asm__ __volatile__("": : :"memory"); __ret = *({ do { const void *__vpp_verify = (typeof((&(ksoftirqd)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(ksoftirqd))) *)(&(ksoftirqd)))); (typeof((typeof(*(&(ksoftirqd))) *)(&(ksoftirqd)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }); __asm__ __volatile__("": : :"memory"); __ret; }); break; case 4: pscr_ret__ = ({ typeof(ksoftirqd) __ret; __asm__ __volatile__("": : :"memory"); __ret = *({ do { const void *__vpp_verify = (typeof((&(ksoftirqd)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(ksoftirqd))) *)(&(ksoftirqd)))); (typeof((typeof(*(&(ksoftirqd))) *)(&(ksoftirqd)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }); __asm__ __volatile__("": : :"memory"); __ret; }); break; case 8: pscr_ret__ = ({ typeof(ksoftirqd) __ret; __asm__ __volatile__("": : :"memory"); __ret = *({ do { const void *__vpp_verify = (typeof((&(ksoftirqd)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(ksoftirqd))) *)(&(ksoftirqd)))); (typeof((typeof(*(&(ksoftirqd))) *)(&(ksoftirqd)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }); __asm__ __volatile__("": : :"memory"); __ret; }); break; default: __bad_size_call_parameter(); break; } pscr_ret__; });
}
# 465 "include/linux/interrupt.h"
struct tasklet_struct
{
struct tasklet_struct *next;
unsigned long state;
atomic_t count;
void (*func)(unsigned long);
unsigned long data;
};
# 481 "include/linux/interrupt.h"
enum
{
TASKLET_STATE_SCHED,
TASKLET_STATE_RUN
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int tasklet_trylock(struct tasklet_struct *t)
{
return !test_and_set_bit(TASKLET_STATE_RUN, &(t)->state);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tasklet_unlock(struct tasklet_struct *t)
{
__asm__ __volatile__(" \n" : : :"memory");
clear_bit(TASKLET_STATE_RUN, &(t)->state);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tasklet_unlock_wait(struct tasklet_struct *t)
{
while (test_bit(TASKLET_STATE_RUN, &(t)->state)) { __asm__ __volatile__("": : :"memory"); }
}
extern void __tasklet_schedule(struct tasklet_struct *t);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tasklet_schedule(struct tasklet_struct *t)
{
if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state))
__tasklet_schedule(t);
}
extern void __tasklet_hi_schedule(struct tasklet_struct *t);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tasklet_hi_schedule(struct tasklet_struct *t)
{
if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state))
__tasklet_hi_schedule(t);
}
extern void __tasklet_hi_schedule_first(struct tasklet_struct *t);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tasklet_hi_schedule_first(struct tasklet_struct *t)
{
if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state))
__tasklet_hi_schedule_first(t);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tasklet_disable_nosync(struct tasklet_struct *t)
{
atomic_add(1, (&t->count));
__asm__ __volatile__(" \n" : : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tasklet_disable(struct tasklet_struct *t)
{
tasklet_disable_nosync(t);
tasklet_unlock_wait(t);
__asm__ __volatile__("": : :"memory");
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tasklet_enable(struct tasklet_struct *t)
{
__asm__ __volatile__(" \n" : : :"memory");
atomic_sub(1, (&t->count));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void tasklet_hi_enable(struct tasklet_struct *t)
{
__asm__ __volatile__(" \n" : : :"memory");
atomic_sub(1, (&t->count));
}
extern void tasklet_kill(struct tasklet_struct *t);
extern void tasklet_kill_immediate(struct tasklet_struct *t, unsigned int cpu);
extern void tasklet_init(struct tasklet_struct *t,
void (*func)(unsigned long), unsigned long data);
struct tasklet_hrtimer {
struct hrtimer timer;
struct tasklet_struct tasklet;
enum hrtimer_restart (*function)(struct hrtimer *);
};
extern void
tasklet_hrtimer_init(struct tasklet_hrtimer *ttimer,
enum hrtimer_restart (*function)(struct hrtimer *),
clockid_t which_clock, enum hrtimer_mode mode);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
int tasklet_hrtimer_start(struct tasklet_hrtimer *ttimer, ktime_t time,
const enum hrtimer_mode mode)
{
return hrtimer_start(&ttimer->timer, time, mode);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
void tasklet_hrtimer_cancel(struct tasklet_hrtimer *ttimer)
{
hrtimer_cancel(&ttimer->timer);
tasklet_kill(&ttimer->tasklet);
}
# 637 "include/linux/interrupt.h"
extern unsigned long probe_irq_on(void);
extern int probe_irq_off(unsigned long);
extern unsigned int probe_irq_mask(unsigned long);
extern void init_irq_proc(void);
struct seq_file;
int show_interrupts(struct seq_file *p, void *v);
int arch_show_interrupts(struct seq_file *p, int prec);
extern int early_irq_init(void);
extern int arch_probe_nr_irqs(void);
extern int arch_early_irq_init(void);
# 5 "include/net/flowcache.h" 2
struct flow_cache_percpu {
struct hlist_head *hash_table;
int hash_count;
u32 hash_rnd;
int hash_rnd_recalc;
struct tasklet_struct flush_tasklet;
};
struct flow_cache {
u32 hash_shift;
struct flow_cache_percpu *percpu;
struct notifier_block hotcpu_notifier;
int low_watermark;
int high_watermark;
struct timer_list rnd_timer;
};
# 10 "include/net/netns/xfrm.h" 2
struct ctl_table_header;
struct xfrm_policy_hash {
struct hlist_head *table;
unsigned int hmask;
u8 dbits4;
u8 sbits4;
u8 dbits6;
u8 sbits6;
};
struct xfrm_policy_hthresh {
struct work_struct work;
seqlock_t lock;
u8 lbits4;
u8 rbits4;
u8 lbits6;
u8 rbits6;
};
struct netns_xfrm {
struct list_head state_all;
# 41 "include/net/netns/xfrm.h"
struct hlist_head *state_bydst;
struct hlist_head *state_bysrc;
struct hlist_head *state_byspi;
unsigned int state_hmask;
unsigned int state_num;
struct work_struct state_hash_work;
struct hlist_head state_gc_list;
struct work_struct state_gc_work;
struct list_head policy_all;
struct hlist_head *policy_byidx;
unsigned int policy_idx_hmask;
struct hlist_head policy_inexact[XFRM_POLICY_MAX * 2];
struct xfrm_policy_hash policy_bydst[XFRM_POLICY_MAX * 2];
unsigned int policy_count[XFRM_POLICY_MAX * 2];
struct work_struct policy_hash_work;
struct xfrm_policy_hthresh policy_hthresh;
struct sock *nlsk;
struct sock *nlsk_stash;
u32 sysctl_aevent_etime;
u32 sysctl_aevent_rseqth;
int sysctl_larval_drop;
u32 sysctl_acq_expires;
struct ctl_table_header *sysctl_hdr;
struct dst_ops xfrm4_dst_ops;
struct dst_ops xfrm6_dst_ops;
spinlock_t xfrm_state_lock;
rwlock_t xfrm_policy_lock;
struct mutex xfrm_cfg_mutex;
struct flow_cache flow_cache_global;
atomic_t flow_cache_genid;
struct list_head flow_cache_gc_list;
spinlock_t flow_cache_gc_lock;
struct work_struct flow_cache_gc_work;
struct work_struct flow_cache_flush_work;
struct mutex flow_flush_sem;
};
# 29 "include/net/net_namespace.h" 2
struct user_namespace;
struct proc_dir_entry;
struct net_device;
struct sock;
struct ctl_table_header;
struct net_generic;
struct sock;
struct netns_ipvs;
struct net {
atomic_t passive;
atomic_t count;
spinlock_t rules_mod_lock;
struct list_head list;
struct list_head cleanup_list;
struct list_head exit_list;
struct user_namespace *user_ns;
unsigned int proc_inum;
struct proc_dir_entry *proc_net;
struct proc_dir_entry *proc_net_stat;
struct ctl_table_set sysctls;
struct sock *rtnl;
struct sock *genl_sock;
struct list_head dev_base_head;
struct hlist_head *dev_name_head;
struct hlist_head *dev_index_head;
unsigned int dev_base_seq;
int ifindex;
unsigned int dev_unreg_count;
struct list_head rules_ops;
struct net_device *loopback_dev;
struct netns_core core;
struct netns_mib mib;
struct netns_packet packet;
struct netns_unix unx;
struct netns_ipv4 ipv4;
struct netns_ipv6 ipv6;
# 105 "include/net/net_namespace.h"
struct netns_nf nf;
struct netns_xt xt;
struct netns_ct ct;
struct netns_nftables nft;
struct netns_nf_frag nf_frag;
struct sock *nfnl;
struct sock *nfnl_stash;
struct sk_buff_head wext_nlevents;
struct net_generic *gen;
struct netns_xfrm xfrm;
struct sock *diag_nlsk;
atomic_t fnhe_genid;
};
# 1 "include/linux/seq_file_net.h" 1
# 1 "include/linux/seq_file.h" 1
# 11 "include/linux/seq_file.h"
struct seq_operations;
struct file;
struct path;
struct inode;
struct dentry;
struct user_namespace;
struct seq_file {
char *buf;
size_t size;
size_t from;
size_t count;
size_t pad_until;
loff_t index;
loff_t read_pos;
u64 version;
struct mutex lock;
const struct seq_operations *op;
int poll_event;
struct user_namespace *user_ns;
void *private;
};
struct seq_operations {
void * (*start) (struct seq_file *m, loff_t *pos);
void (*stop) (struct seq_file *m, void *v);
void * (*next) (struct seq_file *m, void *v, loff_t *pos);
int (*show) (struct seq_file *m, void *v);
};
# 53 "include/linux/seq_file.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) size_t seq_get_buf(struct seq_file *m, char **bufp)
{
__BUG_ON((unsigned long)(m->count > m->size));
if (m->count < m->size)
*bufp = m->buf + m->count;
else
*bufp = ((void *)0);
return m->size - m->count;
}
# 73 "include/linux/seq_file.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void seq_commit(struct seq_file *m, int num)
{
if (num < 0) {
m->count = m->size;
} else {
__BUG_ON((unsigned long)(m->count + num > m->size));
m->count += num;
}
}
# 91 "include/linux/seq_file.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void seq_setwidth(struct seq_file *m, size_t size)
{
m->pad_until = m->count + size;
}
void seq_pad(struct seq_file *m, char c);
char *mangle_path(char *s, const char *p, const char *esc);
int seq_open(struct file *, const struct seq_operations *);
ssize_t seq_read(struct file *, char *, size_t, loff_t *);
loff_t seq_lseek(struct file *, loff_t, int);
int seq_release(struct inode *, struct file *);
int seq_escape(struct seq_file *, const char *, const char *);
int seq_putc(struct seq_file *m, char c);
int seq_puts(struct seq_file *m, const char *s);
int seq_write(struct seq_file *seq, const void *data, size_t len);
__attribute__((format(printf, 2, 3))) int seq_printf(struct seq_file *, const char *, ...);
__attribute__((format(printf, 2, 0))) int seq_vprintf(struct seq_file *, const char *, va_list args);
int seq_path(struct seq_file *, const struct path *, const char *);
int seq_dentry(struct seq_file *, struct dentry *, const char *);
int seq_path_root(struct seq_file *m, const struct path *path,
const struct path *root, const char *esc);
int seq_bitmap(struct seq_file *m, const unsigned long *bits,
unsigned int nr_bits);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int seq_cpumask(struct seq_file *m, const struct cpumask *mask)
{
return seq_bitmap(m, ((mask)->bits), nr_cpu_ids);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int seq_nodemask(struct seq_file *m, nodemask_t *mask)
{
return seq_bitmap(m, mask->bits, (1 << 0));
}
int seq_bitmap_list(struct seq_file *m, const unsigned long *bits,
unsigned int nr_bits);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int seq_cpumask_list(struct seq_file *m,
const struct cpumask *mask)
{
return seq_bitmap_list(m, ((mask)->bits), nr_cpu_ids);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int seq_nodemask_list(struct seq_file *m, nodemask_t *mask)
{
return seq_bitmap_list(m, mask->bits, (1 << 0));
}
int single_open(struct file *, int (*)(struct seq_file *, void *), void *);
int single_open_size(struct file *, int (*)(struct seq_file *, void *), void *, size_t);
int single_release(struct inode *, struct file *);
void *__seq_open_private(struct file *, const struct seq_operations *, int);
int seq_open_private(struct file *, const struct seq_operations *, int);
int seq_release_private(struct inode *, struct file *);
int seq_put_decimal_ull(struct seq_file *m, char delimiter,
unsigned long long num);
int seq_put_decimal_ll(struct seq_file *m, char delimiter,
long long num);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct user_namespace *seq_user_ns(struct seq_file *seq)
{
return seq->user_ns;
}
extern struct list_head *seq_list_start(struct list_head *head,
loff_t pos);
extern struct list_head *seq_list_start_head(struct list_head *head,
loff_t pos);
extern struct list_head *seq_list_next(void *v, struct list_head *head,
loff_t *ppos);
extern struct hlist_node *seq_hlist_start(struct hlist_head *head,
loff_t pos);
extern struct hlist_node *seq_hlist_start_head(struct hlist_head *head,
loff_t pos);
extern struct hlist_node *seq_hlist_next(void *v, struct hlist_head *head,
loff_t *ppos);
extern struct hlist_node *seq_hlist_start_rcu(struct hlist_head *head,
loff_t pos);
extern struct hlist_node *seq_hlist_start_head_rcu(struct hlist_head *head,
loff_t pos);
extern struct hlist_node *seq_hlist_next_rcu(void *v,
struct hlist_head *head,
loff_t *ppos);
extern struct hlist_node *seq_hlist_start_percpu(struct hlist_head *head, int *cpu, loff_t pos);
extern struct hlist_node *seq_hlist_next_percpu(void *v, struct hlist_head *head, int *cpu, loff_t *pos);
# 5 "include/linux/seq_file_net.h" 2
struct net;
extern struct net init_net;
struct seq_net_private {
};
int seq_open_net(struct inode *, struct file *,
const struct seq_operations *, int);
int single_open_net(struct inode *, struct file *file,
int (*show)(struct seq_file *, void *));
int seq_release_net(struct inode *, struct file *);
int single_release_net(struct inode *, struct file *);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct net *seq_file_net(struct seq_file *seq)
{
return &init_net;
}
# 136 "include/net/net_namespace.h" 2
extern struct net init_net;
# 1 "include/linux/nsproxy.h" 1
struct mnt_namespace;
struct uts_namespace;
struct ipc_namespace;
struct pid_namespace;
struct fs_struct;
# 29 "include/linux/nsproxy.h"
struct nsproxy {
atomic_t count;
struct uts_namespace *uts_ns;
struct ipc_namespace *ipc_ns;
struct mnt_namespace *mnt_ns;
struct pid_namespace *pid_ns_for_children;
struct net *net_ns;
};
extern struct nsproxy init_nsproxy;
# 65 "include/linux/nsproxy.h"
int copy_namespaces(unsigned long flags, struct task_struct *tsk);
void exit_task_namespaces(struct task_struct *tsk);
void switch_task_namespaces(struct task_struct *tsk, struct nsproxy *new);
void free_nsproxy(struct nsproxy *ns);
int unshare_nsproxy_namespaces(unsigned long, struct nsproxy **,
struct cred *, struct fs_struct *);
int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) nsproxy_cache_init(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void put_nsproxy(struct nsproxy *ns)
{
if ((atomic_sub_return(1, (&ns->count)) == 0)) {
free_nsproxy(ns);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void get_nsproxy(struct nsproxy *ns)
{
atomic_add(1, (&ns->count));
}
# 147 "include/net/net_namespace.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct net *copy_net_ns(unsigned long flags,
struct user_namespace *user_ns, struct net *old_net)
{
if (flags & 0x40000000)
return ERR_PTR(-22);
return old_net;
}
extern struct list_head net_namespace_list;
struct net *get_net_ns_by_pid(pid_t pid);
struct net *get_net_ns_by_fd(int pid);
void ipx_register_sysctl(void);
void ipx_unregister_sysctl(void);
# 207 "include/net/net_namespace.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct net *get_net(struct net *net)
{
return net;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void put_net(struct net *net)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct net *maybe_get_net(struct net *net)
{
return net;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
int net_eq(const struct net *net1, const struct net *net2)
{
return 1;
}
# 245 "include/net/net_namespace.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct net *hold_net(struct net *net)
{
return net;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void release_net(struct net *net)
{
}
# 292 "include/net/net_namespace.h"
struct pernet_operations {
struct list_head list;
int (*init)(struct net *net);
void (*exit)(struct net *net);
void (*exit_batch)(struct list_head *net_exit_list);
int *id;
size_t size;
};
# 320 "include/net/net_namespace.h"
int register_pernet_subsys(struct pernet_operations *);
void unregister_pernet_subsys(struct pernet_operations *);
int register_pernet_device(struct pernet_operations *);
void unregister_pernet_device(struct pernet_operations *);
struct ctl_table;
struct ctl_table_header;
int net_sysctl_init(void);
struct ctl_table_header *register_net_sysctl(struct net *net, const char *path,
struct ctl_table *table);
void unregister_net_sysctl_table(struct ctl_table_header *header);
# 345 "include/net/net_namespace.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int rt_genid_ipv4(struct net *net)
{
return (*(volatile typeof((&net->ipv4.rt_genid)->counter) *)&((&net->ipv4.rt_genid)->counter));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rt_genid_bump_ipv4(struct net *net)
{
atomic_add(1, (&net->ipv4.rt_genid));
}
extern void (*__fib6_flush_trees)(struct net *net);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rt_genid_bump_ipv6(struct net *net)
{
if (__fib6_flush_trees)
__fib6_flush_trees(net);
}
# 371 "include/net/net_namespace.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rt_genid_bump_all(struct net *net)
{
rt_genid_bump_ipv4(net);
rt_genid_bump_ipv6(net);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int fnhe_genid(struct net *net)
{
return (*(volatile typeof((&net->fnhe_genid)->counter) *)&((&net->fnhe_genid)->counter));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void fnhe_genid_bump(struct net *net)
{
atomic_add(1, (&net->fnhe_genid));
}
# 45 "include/linux/netdevice.h" 2
# 1 "include/net/dsa.h" 1
# 18 "include/net/dsa.h"
# 1 "include/linux/of.h" 1
# 22 "include/linux/of.h"
# 1 "include/linux/mod_devicetable.h" 1
# 12 "include/linux/mod_devicetable.h"
# 1 "include/linux/uuid.h" 1
# 23 "include/linux/uuid.h"
# 1 "include/uapi/linux/uuid.h" 1
# 27 "include/uapi/linux/uuid.h"
typedef struct {
__u8 b[16];
} uuid_le;
typedef struct {
__u8 b[16];
} uuid_be;
# 24 "include/linux/uuid.h" 2
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int uuid_le_cmp(const uuid_le u1, const uuid_le u2)
{
return memcmp(&u1, &u2, sizeof(uuid_le));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int uuid_be_cmp(const uuid_be u1, const uuid_be u2)
{
return memcmp(&u1, &u2, sizeof(uuid_be));
}
extern void uuid_le_gen(uuid_le *u);
extern void uuid_be_gen(uuid_be *u);
# 13 "include/linux/mod_devicetable.h" 2
typedef unsigned long kernel_ulong_t;
struct pci_device_id {
__u32 vendor, device;
__u32 subvendor, subdevice;
__u32 class, class_mask;
kernel_ulong_t driver_data;
};
struct ieee1394_device_id {
__u32 match_flags;
__u32 vendor_id;
__u32 model_id;
__u32 specifier_id;
__u32 version;
kernel_ulong_t driver_data;
};
# 101 "include/linux/mod_devicetable.h"
struct usb_device_id {
__u16 match_flags;
__u16 idVendor;
__u16 idProduct;
__u16 bcdDevice_lo;
__u16 bcdDevice_hi;
__u8 bDeviceClass;
__u8 bDeviceSubClass;
__u8 bDeviceProtocol;
__u8 bInterfaceClass;
__u8 bInterfaceSubClass;
__u8 bInterfaceProtocol;
__u8 bInterfaceNumber;
kernel_ulong_t driver_info
__attribute__((aligned(sizeof(kernel_ulong_t))));
};
# 146 "include/linux/mod_devicetable.h"
struct hid_device_id {
__u16 bus;
__u16 group;
__u32 vendor;
__u32 product;
kernel_ulong_t driver_data;
};
struct ccw_device_id {
__u16 match_flags;
__u16 cu_type;
__u16 dev_type;
__u8 cu_model;
__u8 dev_model;
kernel_ulong_t driver_info;
};
struct ap_device_id {
__u16 match_flags;
__u8 dev_type;
kernel_ulong_t driver_info;
};
struct css_device_id {
__u8 match_flags;
__u8 type;
kernel_ulong_t driver_data;
};
struct acpi_device_id {
__u8 id[9];
kernel_ulong_t driver_data;
};
struct pnp_device_id {
__u8 id[8];
kernel_ulong_t driver_data;
};
struct pnp_card_device_id {
__u8 id[8];
kernel_ulong_t driver_data;
struct {
__u8 id[8];
} devs[8];
};
struct serio_device_id {
__u8 type;
__u8 extra;
__u8 id;
__u8 proto;
};
struct of_device_id
{
char name[32];
char type[32];
char compatible[128];
const void *data;
};
struct vio_device_id {
char type[32];
char compat[32];
};
struct pcmcia_device_id {
__u16 match_flags;
__u16 manf_id;
__u16 card_id;
__u8 func_id;
__u8 function;
__u8 device_no;
__u32 prod_id_hash[4];
const char * prod_id[4];
kernel_ulong_t driver_info;
char * cisfile;
};
# 302 "include/linux/mod_devicetable.h"
struct input_device_id {
kernel_ulong_t flags;
__u16 bustype;
__u16 vendor;
__u16 product;
__u16 version;
kernel_ulong_t evbit[0x1f / 32 + 1];
kernel_ulong_t keybit[0x2ff / 32 + 1];
kernel_ulong_t relbit[0x0f / 32 + 1];
kernel_ulong_t absbit[0x3f / 32 + 1];
kernel_ulong_t mscbit[0x07 / 32 + 1];
kernel_ulong_t ledbit[0x0f / 32 + 1];
kernel_ulong_t sndbit[0x07 / 32 + 1];
kernel_ulong_t ffbit[0x7f / 32 + 1];
kernel_ulong_t swbit[0x0f / 32 + 1];
kernel_ulong_t driver_info;
};
struct eisa_device_id {
char sig[8];
kernel_ulong_t driver_data;
};
struct parisc_device_id {
__u8 hw_type;
__u8 hversion_rev;
__u16 hversion;
__u32 sversion;
};
# 352 "include/linux/mod_devicetable.h"
struct sdio_device_id {
__u8 class;
__u16 vendor;
__u16 device;
kernel_ulong_t driver_data;
};
struct ssb_device_id {
__u16 vendor;
__u16 coreid;
__u8 revision;
__u8 __pad;
} __attribute__((packed, aligned(2)));
# 376 "include/linux/mod_devicetable.h"
struct bcma_device_id {
__u16 manuf;
__u16 id;
__u8 rev;
__u8 class;
} __attribute__((packed,aligned(2)));
# 392 "include/linux/mod_devicetable.h"
struct virtio_device_id {
__u32 device;
__u32 vendor;
};
struct hv_vmbus_device_id {
__u8 guid[16];
kernel_ulong_t driver_data;
};
struct rpmsg_device_id {
char name[32];
};
struct i2c_device_id {
char name[20];
kernel_ulong_t driver_data;
};
struct spi_device_id {
char name[32];
kernel_ulong_t driver_data;
};
struct spmi_device_id {
char name[32];
kernel_ulong_t driver_data;
};
enum dmi_field {
DMI_NONE,
DMI_BIOS_VENDOR,
DMI_BIOS_VERSION,
DMI_BIOS_DATE,
DMI_SYS_VENDOR,
DMI_PRODUCT_NAME,
DMI_PRODUCT_VERSION,
DMI_PRODUCT_SERIAL,
DMI_PRODUCT_UUID,
DMI_BOARD_VENDOR,
DMI_BOARD_NAME,
DMI_BOARD_VERSION,
DMI_BOARD_SERIAL,
DMI_BOARD_ASSET_TAG,
DMI_CHASSIS_VENDOR,
DMI_CHASSIS_TYPE,
DMI_CHASSIS_VERSION,
DMI_CHASSIS_SERIAL,
DMI_CHASSIS_ASSET_TAG,
DMI_STRING_MAX,
};
struct dmi_strmatch {
unsigned char slot:7;
unsigned char exact_match:1;
char substr[79];
};
struct dmi_system_id {
int (*callback)(const struct dmi_system_id *);
const char *ident;
struct dmi_strmatch matches[4];
void *driver_data;
};
# 493 "include/linux/mod_devicetable.h"
struct platform_device_id {
char name[20];
kernel_ulong_t driver_data;
};
# 519 "include/linux/mod_devicetable.h"
struct mdio_device_id {
__u32 phy_id;
__u32 phy_id_mask;
};
struct zorro_device_id {
__u32 id;
kernel_ulong_t driver_data;
};
struct isapnp_device_id {
unsigned short card_vendor, card_device;
unsigned short vendor, function;
kernel_ulong_t driver_data;
};
# 548 "include/linux/mod_devicetable.h"
struct amba_id {
unsigned int id;
unsigned int mask;
void *data;
};
# 564 "include/linux/mod_devicetable.h"
struct x86_cpu_id {
__u16 vendor;
__u16 family;
__u16 model;
__u16 feature;
kernel_ulong_t driver_data;
};
# 585 "include/linux/mod_devicetable.h"
struct cpu_feature {
__u16 feature;
};
struct ipack_device_id {
__u8 format;
__u32 vendor;
__u32 device;
};
struct mei_cl_device_id {
char name[32];
kernel_ulong_t driver_info;
};
# 619 "include/linux/mod_devicetable.h"
struct rio_device_id {
__u16 did, vid;
__u16 asm_did, asm_vid;
};
struct mcb_device_id {
__u16 device;
kernel_ulong_t driver_data;
};
# 23 "include/linux/of.h" 2
# 1 "include/linux/property.h" 1
# 18 "include/linux/property.h"
struct device;
enum dev_prop_type {
DEV_PROP_U8,
DEV_PROP_U16,
DEV_PROP_U32,
DEV_PROP_U64,
DEV_PROP_STRING,
DEV_PROP_MAX,
};
bool device_property_present(struct device *dev, const char *propname);
int device_property_read_u8_array(struct device *dev, const char *propname,
u8 *val, size_t nval);
int device_property_read_u16_array(struct device *dev, const char *propname,
u16 *val, size_t nval);
int device_property_read_u32_array(struct device *dev, const char *propname,
u32 *val, size_t nval);
int device_property_read_u64_array(struct device *dev, const char *propname,
u64 *val, size_t nval);
int device_property_read_string_array(struct device *dev, const char *propname,
const char **val, size_t nval);
int device_property_read_string(struct device *dev, const char *propname,
const char **val);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool device_property_read_bool(struct device *dev,
const char *propname)
{
return device_property_present(dev, propname);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_property_read_u8(struct device *dev,
const char *propname, u8 *val)
{
return device_property_read_u8_array(dev, propname, val, 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_property_read_u16(struct device *dev,
const char *propname, u16 *val)
{
return device_property_read_u16_array(dev, propname, val, 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_property_read_u32(struct device *dev,
const char *propname, u32 *val)
{
return device_property_read_u32_array(dev, propname, val, 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int device_property_read_u64(struct device *dev,
const char *propname, u64 *val)
{
return device_property_read_u64_array(dev, propname, val, 1);
}
# 27 "include/linux/of.h" 2
typedef u32 phandle;
typedef u32 ihandle;
struct property {
char *name;
int length;
void *value;
struct property *next;
unsigned long _flags;
unsigned int unique_id;
struct bin_attribute attr;
};
struct device_node {
const char *name;
const char *type;
phandle phandle;
const char *full_name;
struct property *properties;
struct property *deadprops;
struct device_node *parent;
struct device_node *child;
struct device_node *sibling;
struct device_node *next;
struct device_node *allnext;
struct kobject kobj;
unsigned long _flags;
void *data;
};
struct of_phandle_args {
struct device_node *np;
int args_count;
uint32_t args[16];
};
extern struct kobj_type of_node_ktype;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void of_node_init(struct device_node *node)
{
kobject_init(&node->kobj, &of_node_ktype);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_node_is_initialized(struct device_node *node)
{
return node && node->kobj.state_initialized;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_node_is_attached(struct device_node *node)
{
return node && node->kobj.state_in_sysfs;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_node_get(struct device_node *node)
{
return node;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void of_node_put(struct device_node *node) { }
# 363 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const char* of_node_full_name(const struct device_node *np)
{
return "<no-node>";
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_find_node_by_name(struct device_node *from,
const char *name)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_find_node_by_type(struct device_node *from,
const char *type)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_find_matching_node_and_match(
struct device_node *from,
const struct of_device_id *matches,
const struct of_device_id **match)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_find_node_by_path(const char *path)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_get_parent(const struct device_node *node)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_get_next_child(
const struct device_node *node, struct device_node *prev)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_get_next_available_child(
const struct device_node *node, struct device_node *prev)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_find_node_with_property(
struct device_node *from, const char *prop_name)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool of_have_populated_dt(void)
{
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_get_child_by_name(
const struct device_node *node,
const char *name)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_device_is_compatible(const struct device_node *device,
const char *name)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_device_is_available(const struct device_node *device)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct property *of_find_property(const struct device_node *np,
const char *name,
int *lenp)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_find_compatible_node(
struct device_node *from,
const char *type,
const char *compat)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_count_elems_of_size(const struct device_node *np,
const char *propname, int elem_size)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_u32_index(const struct device_node *np,
const char *propname, u32 index, u32 *out_value)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_u8_array(const struct device_node *np,
const char *propname, u8 *out_values, size_t sz)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_u16_array(const struct device_node *np,
const char *propname, u16 *out_values, size_t sz)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_u32_array(const struct device_node *np,
const char *propname,
u32 *out_values, size_t sz)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_u64_array(const struct device_node *np,
const char *propname,
u64 *out_values, size_t sz)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_string(struct device_node *np,
const char *propname,
const char **out_string)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_string_helper(struct device_node *np,
const char *propname,
const char **out_strs, size_t sz, int index)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const void *of_get_property(const struct device_node *node,
const char *name,
int *lenp)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_get_cpu_node(int cpu,
unsigned int *thread)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_u64(const struct device_node *np,
const char *propname, u64 *out_value)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_match_string(struct device_node *np,
const char *propname,
const char *string)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_parse_phandle(const struct device_node *np,
const char *phandle_name,
int index)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_parse_phandle_with_args(struct device_node *np,
const char *list_name,
const char *cells_name,
int index,
struct of_phandle_args *out_args)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_parse_phandle_with_fixed_args(const struct device_node *np,
const char *list_name, int cells_count, int index,
struct of_phandle_args *out_args)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_count_phandle_with_args(struct device_node *np,
const char *list_name,
const char *cells_name)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_alias_get_id(struct device_node *np, const char *stem)
{
return -89;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_machine_is_compatible(const char *compat)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool of_console_check(const struct device_node *dn, const char *name, int index)
{
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const __be32 *of_prop_next_u32(struct property *prop,
const __be32 *cur, u32 *pu)
{
return ((void *)0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const char *of_prop_next_string(struct property *prop,
const char *cur)
{
return ((void *)0);
}
# 596 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_node_to_nid(struct device_node *device)
{
return (-1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct device_node *of_find_matching_node(
struct device_node *from,
const struct of_device_id *matches)
{
return of_find_matching_node_and_match(from, matches, ((void *)0));
}
# 620 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_count_u8_elems(const struct device_node *np,
const char *propname)
{
return of_property_count_elems_of_size(np, propname, sizeof(u8));
}
# 637 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_count_u16_elems(const struct device_node *np,
const char *propname)
{
return of_property_count_elems_of_size(np, propname, sizeof(u16));
}
# 654 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_count_u32_elems(const struct device_node *np,
const char *propname)
{
return of_property_count_elems_of_size(np, propname, sizeof(u32));
}
# 671 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_count_u64_elems(const struct device_node *np,
const char *propname)
{
return of_property_count_elems_of_size(np, propname, sizeof(u64));
}
# 690 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_string_array(struct device_node *np,
const char *propname, const char **out_strs,
size_t sz)
{
return of_property_read_string_helper(np, propname, out_strs, sz, 0);
}
# 709 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_count_strings(struct device_node *np,
const char *propname)
{
return of_property_read_string_helper(np, propname, ((void *)0), 0, 0);
}
# 733 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_string_index(struct device_node *np,
const char *propname,
int index, const char **output)
{
int rc = of_property_read_string_helper(np, propname, output, 1, index);
return rc < 0 ? rc : 0;
}
# 749 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool of_property_read_bool(const struct device_node *np,
const char *propname)
{
struct property *prop = of_find_property(np, propname, ((void *)0));
return prop ? true : false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_u8(const struct device_node *np,
const char *propname,
u8 *out_value)
{
return of_property_read_u8_array(np, propname, out_value, 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_u16(const struct device_node *np,
const char *propname,
u16 *out_value)
{
return of_property_read_u16_array(np, propname, out_value, 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_property_read_u32(const struct device_node *np,
const char *propname,
u32 *out_value)
{
return of_property_read_u32_array(np, propname, out_value, 1);
}
# 817 "include/linux/of.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_get_child_count(const struct device_node *np)
{
struct device_node *child;
int num = 0;
for (child = of_get_next_child(np, ((void *)0)); child != ((void *)0); child = of_get_next_child(np, child))
num++;
return num;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int of_get_available_child_count(const struct device_node *np)
{
struct device_node *child;
int num = 0;
for (child = of_get_next_available_child(np, ((void *)0)); child != ((void *)0); child = of_get_next_available_child(np, child))
num++;
return num;
}
# 853 "include/linux/of.h"
typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
typedef void (*of_init_fn_1)(struct device_node *);
# 875 "include/linux/of.h"
struct of_changeset_entry {
struct list_head node;
unsigned long action;
struct device_node *np;
struct property *prop;
struct property *old_prop;
};
# 893 "include/linux/of.h"
struct of_changeset {
struct list_head entries;
};
# 938 "include/linux/of.h"
extern int of_resolve_phandles(struct device_node *tree);
# 19 "include/net/dsa.h" 2
# 1 "include/linux/phy.h" 1
# 21 "include/linux/phy.h"
# 1 "include/linux/mii.h" 1
# 12 "include/linux/mii.h"
# 1 "include/uapi/linux/mii.h" 1
# 154 "include/uapi/linux/mii.h"
struct mii_ioctl_data {
__u16 phy_id;
__u16 reg_num;
__u16 val_in;
__u16 val_out;
};
# 13 "include/linux/mii.h" 2
struct ethtool_cmd;
struct mii_if_info {
int phy_id;
int advertising;
int phy_id_mask;
int reg_num_mask;
unsigned int full_duplex : 1;
unsigned int force_media : 1;
unsigned int supports_gmii : 1;
struct net_device *dev;
int (*mdio_read) (struct net_device *dev, int phy_id, int location);
void (*mdio_write) (struct net_device *dev, int phy_id, int location, int val);
};
extern int mii_link_ok (struct mii_if_info *mii);
extern int mii_nway_restart (struct mii_if_info *mii);
extern int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd);
extern int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd);
extern int mii_check_gmii_support(struct mii_if_info *mii);
extern void mii_check_link (struct mii_if_info *mii);
extern unsigned int mii_check_media (struct mii_if_info *mii,
unsigned int ok_to_print,
unsigned int init_media);
extern int generic_mii_ioctl(struct mii_if_info *mii_if,
struct mii_ioctl_data *mii_data, int cmd,
unsigned int *duplex_changed);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct mii_ioctl_data *if_mii(struct ifreq *rq)
{
return (struct mii_ioctl_data *) &rq->ifr_ifru;
}
# 64 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int mii_nway_result (unsigned int negotiated)
{
unsigned int ret;
if (negotiated & 0x0100)
ret = 0x0100;
else if (negotiated & 0x0200)
ret = 0x0200;
else if (negotiated & 0x0080)
ret = 0x0080;
else if (negotiated & 0x0040)
ret = 0x0040;
else
ret = 0x0020;
return ret;
}
# 91 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int mii_duplex (unsigned int duplex_lock,
unsigned int negotiated)
{
if (duplex_lock)
return 1;
if (mii_nway_result(negotiated) & (0x0040 | 0x0100))
return 1;
return 0;
}
# 109 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 ethtool_adv_to_mii_adv_t(u32 ethadv)
{
u32 result = 0;
if (ethadv & (1 << 0))
result |= 0x0020;
if (ethadv & (1 << 1))
result |= 0x0040;
if (ethadv & (1 << 2))
result |= 0x0080;
if (ethadv & (1 << 3))
result |= 0x0100;
if (ethadv & (1 << 13))
result |= 0x0400;
if (ethadv & (1 << 14))
result |= 0x0800;
return result;
}
# 136 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 mii_adv_to_ethtool_adv_t(u32 adv)
{
u32 result = 0;
if (adv & 0x0020)
result |= (1 << 0);
if (adv & 0x0040)
result |= (1 << 1);
if (adv & 0x0080)
result |= (1 << 2);
if (adv & 0x0100)
result |= (1 << 3);
if (adv & 0x0400)
result |= (1 << 13);
if (adv & 0x0800)
result |= (1 << 14);
return result;
}
# 164 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 ethtool_adv_to_mii_ctrl1000_t(u32 ethadv)
{
u32 result = 0;
if (ethadv & (1 << 4))
result |= 0x0100;
if (ethadv & (1 << 5))
result |= 0x0200;
return result;
}
# 184 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 mii_ctrl1000_to_ethtool_adv_t(u32 adv)
{
u32 result = 0;
if (adv & 0x0100)
result |= (1 << 4);
if (adv & 0x0200)
result |= (1 << 5);
return result;
}
# 204 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 mii_lpa_to_ethtool_lpa_t(u32 lpa)
{
u32 result = 0;
if (lpa & 0x4000)
result |= (1 << 6);
return result | mii_adv_to_ethtool_adv_t(lpa);
}
# 222 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 mii_stat1000_to_ethtool_lpa_t(u32 lpa)
{
u32 result = 0;
if (lpa & 0x0400)
result |= (1 << 4);
if (lpa & 0x0800)
result |= (1 << 5);
return result;
}
# 242 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 ethtool_adv_to_mii_adv_x(u32 ethadv)
{
u32 result = 0;
if (ethadv & (1 << 4))
result |= 0x0040;
if (ethadv & (1 << 5))
result |= 0x0020;
if (ethadv & (1 << 13))
result |= 0x0080;
if (ethadv & (1 << 14))
result |= 0x0100;
return result;
}
# 266 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 mii_adv_to_ethtool_adv_x(u32 adv)
{
u32 result = 0;
if (adv & 0x0040)
result |= (1 << 4);
if (adv & 0x0020)
result |= (1 << 5);
if (adv & 0x0080)
result |= (1 << 13);
if (adv & 0x0100)
result |= (1 << 14);
return result;
}
# 290 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 mii_lpa_to_ethtool_lpa_x(u32 lpa)
{
u32 result = 0;
if (lpa & 0x4000)
result |= (1 << 6);
return result | mii_adv_to_ethtool_adv_x(lpa);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 mii_advertise_flowctrl(int cap)
{
u16 adv = 0;
if (cap & 0x02)
adv = 0x0400 | 0x0800;
if (cap & 0x01)
adv ^= 0x0800;
return adv;
}
# 323 "include/linux/mii.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u8 mii_resolve_flowctrl_fdx(u16 lcladv, u16 rmtadv)
{
u8 cap = 0;
if (lcladv & rmtadv & 0x0400) {
cap = 0x01 | 0x02;
} else if (lcladv & rmtadv & 0x0800) {
if (lcladv & 0x0400)
cap = 0x02;
else if (rmtadv & 0x0400)
cap = 0x01;
}
return cap;
}
# 22 "include/linux/phy.h" 2
# 62 "include/linux/phy.h"
typedef enum {
PHY_INTERFACE_MODE_NA,
PHY_INTERFACE_MODE_MII,
PHY_INTERFACE_MODE_GMII,
PHY_INTERFACE_MODE_SGMII,
PHY_INTERFACE_MODE_TBI,
PHY_INTERFACE_MODE_REVMII,
PHY_INTERFACE_MODE_RMII,
PHY_INTERFACE_MODE_RGMII,
PHY_INTERFACE_MODE_RGMII_ID,
PHY_INTERFACE_MODE_RGMII_RXID,
PHY_INTERFACE_MODE_RGMII_TXID,
PHY_INTERFACE_MODE_RTBI,
PHY_INTERFACE_MODE_SMII,
PHY_INTERFACE_MODE_XGMII,
PHY_INTERFACE_MODE_MOCA,
PHY_INTERFACE_MODE_QSGMII,
PHY_INTERFACE_MODE_MAX,
} phy_interface_t;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const char *phy_modes(phy_interface_t interface)
{
switch (interface) {
case PHY_INTERFACE_MODE_NA:
return "";
case PHY_INTERFACE_MODE_MII:
return "mii";
case PHY_INTERFACE_MODE_GMII:
return "gmii";
case PHY_INTERFACE_MODE_SGMII:
return "sgmii";
case PHY_INTERFACE_MODE_TBI:
return "tbi";
case PHY_INTERFACE_MODE_REVMII:
return "rev-mii";
case PHY_INTERFACE_MODE_RMII:
return "rmii";
case PHY_INTERFACE_MODE_RGMII:
return "rgmii";
case PHY_INTERFACE_MODE_RGMII_ID:
return "rgmii-id";
case PHY_INTERFACE_MODE_RGMII_RXID:
return "rgmii-rxid";
case PHY_INTERFACE_MODE_RGMII_TXID:
return "rgmii-txid";
case PHY_INTERFACE_MODE_RTBI:
return "rtbi";
case PHY_INTERFACE_MODE_SMII:
return "smii";
case PHY_INTERFACE_MODE_XGMII:
return "xgmii";
case PHY_INTERFACE_MODE_MOCA:
return "moca";
case PHY_INTERFACE_MODE_QSGMII:
return "qsgmii";
default:
return "unknown";
}
}
# 148 "include/linux/phy.h"
struct device;
struct sk_buff;
struct mii_bus {
const char *name;
char id[(20 - 3)];
void *priv;
int (*read)(struct mii_bus *bus, int phy_id, int regnum);
int (*write)(struct mii_bus *bus, int phy_id, int regnum, u16 val);
int (*reset)(struct mii_bus *bus);
struct mutex mdio_lock;
struct device *parent;
enum {
MDIOBUS_ALLOCATED = 1,
MDIOBUS_REGISTERED,
MDIOBUS_UNREGISTERED,
MDIOBUS_RELEASED,
} state;
struct device dev;
struct phy_device *phy_map[32];
u32 phy_mask;
int *irq;
};
struct mii_bus *mdiobus_alloc_size(size_t);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct mii_bus *mdiobus_alloc(void)
{
return mdiobus_alloc_size(0);
}
int mdiobus_register(struct mii_bus *bus);
void mdiobus_unregister(struct mii_bus *bus);
void mdiobus_free(struct mii_bus *bus);
struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct mii_bus *devm_mdiobus_alloc(struct device *dev)
{
return devm_mdiobus_alloc_size(dev, 0);
}
void devm_mdiobus_free(struct device *dev, struct mii_bus *bus);
struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr);
int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum);
int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);
# 296 "include/linux/phy.h"
enum phy_state {
PHY_DOWN = 0,
PHY_STARTING,
PHY_READY,
PHY_PENDING,
PHY_UP,
PHY_AN,
PHY_RUNNING,
PHY_NOLINK,
PHY_FORCING,
PHY_CHANGELINK,
PHY_HALTED,
PHY_RESUMING
};
struct phy_c45_device_ids {
u32 devices_in_package;
u32 device_ids[8];
};
# 352 "include/linux/phy.h"
struct phy_device {
struct phy_driver *drv;
struct mii_bus *bus;
struct device dev;
u32 phy_id;
struct phy_c45_device_ids c45_ids;
bool is_c45;
bool is_internal;
bool has_fixups;
enum phy_state state;
u32 dev_flags;
phy_interface_t interface;
int addr;
int speed;
int duplex;
int pause;
int asym_pause;
int link;
u32 interrupts;
u32 supported;
u32 advertising;
u32 lp_advertising;
int autoneg;
int link_timeout;
int irq;
void *priv;
struct work_struct phy_queue;
struct delayed_work state_queue;
atomic_t irq_disable;
struct mutex lock;
struct net_device *attached_dev;
void (*adjust_link)(struct net_device *dev);
};
# 445 "include/linux/phy.h"
struct phy_driver {
u32 phy_id;
char *name;
unsigned int phy_id_mask;
u32 features;
u32 flags;
int (*soft_reset)(struct phy_device *phydev);
int (*config_init)(struct phy_device *phydev);
int (*probe)(struct phy_device *phydev);
int (*suspend)(struct phy_device *phydev);
int (*resume)(struct phy_device *phydev);
int (*config_aneg)(struct phy_device *phydev);
int (*aneg_done)(struct phy_device *phydev);
int (*read_status)(struct phy_device *phydev);
int (*ack_interrupt)(struct phy_device *phydev);
int (*config_intr)(struct phy_device *phydev);
int (*did_interrupt)(struct phy_device *phydev);
void (*remove)(struct phy_device *phydev);
int (*match_phy_device)(struct phy_device *phydev);
int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti);
int (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr);
# 521 "include/linux/phy.h"
bool (*rxtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
void (*txtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
# 546 "include/linux/phy.h"
void (*link_change_notify)(struct phy_device *dev);
int (*read_mmd_indirect)(struct phy_device *dev, int ptrad,
int devnum, int regnum);
void (*write_mmd_indirect)(struct phy_device *dev, int ptrad,
int devnum, int regnum, u32 val);
struct device_driver driver;
};
struct phy_fixup {
struct list_head list;
char bus_id[20];
u32 phy_uid;
u32 phy_uid_mask;
int (*run)(struct phy_device *phydev);
};
# 591 "include/linux/phy.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum)
{
if (!phydev->is_c45)
return -122;
return mdiobus_read(phydev->bus, phydev->addr,
(1<<30) | (devad << 16) | (regnum & 0xffff));
}
# 610 "include/linux/phy.h"
int phy_read_mmd_indirect(struct phy_device *phydev, int prtad,
int devad, int addr);
# 622 "include/linux/phy.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int phy_read(struct phy_device *phydev, u32 regnum)
{
return mdiobus_read(phydev->bus, phydev->addr, regnum);
}
# 637 "include/linux/phy.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
{
return mdiobus_write(phydev->bus, phydev->addr, regnum, val);
}
# 649 "include/linux/phy.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool phy_interrupt_is_valid(struct phy_device *phydev)
{
return phydev->irq != -1 && phydev->irq != -2;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool phy_is_internal(struct phy_device *phydev)
{
return phydev->is_internal;
}
# 673 "include/linux/phy.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int phy_write_mmd(struct phy_device *phydev, int devad,
u32 regnum, u16 val)
{
if (!phydev->is_c45)
return -122;
regnum = (1<<30) | ((devad & 0x1f) << 16) | (regnum & 0xffff);
return mdiobus_write(phydev->bus, phydev->addr, regnum, val);
}
# 695 "include/linux/phy.h"
void phy_write_mmd_indirect(struct phy_device *phydev, int prtad,
int devad, int addr, u32 data);
struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
bool is_c45,
struct phy_c45_device_ids *c45_ids);
struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
int phy_device_register(struct phy_device *phy);
int phy_init_hw(struct phy_device *phydev);
int phy_suspend(struct phy_device *phydev);
int phy_resume(struct phy_device *phydev);
struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
phy_interface_t interface);
struct phy_device *phy_find_first(struct mii_bus *bus);
int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
u32 flags, phy_interface_t interface);
int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
void (*handler)(struct net_device *),
phy_interface_t interface);
struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
void (*handler)(struct net_device *),
phy_interface_t interface);
void phy_disconnect(struct phy_device *phydev);
void phy_detach(struct phy_device *phydev);
void phy_start(struct phy_device *phydev);
void phy_stop(struct phy_device *phydev);
int phy_start_aneg(struct phy_device *phydev);
int phy_stop_interrupts(struct phy_device *phydev);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int phy_read_status(struct phy_device *phydev)
{
return phydev->drv->read_status(phydev);
}
int genphy_config_init(struct phy_device *phydev);
int genphy_setup_forced(struct phy_device *phydev);
int genphy_restart_aneg(struct phy_device *phydev);
int genphy_config_aneg(struct phy_device *phydev);
int genphy_aneg_done(struct phy_device *phydev);
int genphy_update_link(struct phy_device *phydev);
int genphy_read_status(struct phy_device *phydev);
int genphy_suspend(struct phy_device *phydev);
int genphy_resume(struct phy_device *phydev);
int genphy_soft_reset(struct phy_device *phydev);
void phy_driver_unregister(struct phy_driver *drv);
void phy_drivers_unregister(struct phy_driver *drv, int n);
int phy_driver_register(struct phy_driver *new_driver);
int phy_drivers_register(struct phy_driver *new_driver, int n);
void phy_state_machine(struct work_struct *work);
void phy_change(struct work_struct *work);
void phy_mac_interrupt(struct phy_device *phydev, int new_link);
void phy_start_machine(struct phy_device *phydev);
void phy_stop_machine(struct phy_device *phydev);
int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);
int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
int phy_start_interrupts(struct phy_device *phydev);
void phy_print_status(struct phy_device *phydev);
void phy_device_free(struct phy_device *phydev);
int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
int (*run)(struct phy_device *));
int phy_register_fixup_for_id(const char *bus_id,
int (*run)(struct phy_device *));
int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
int (*run)(struct phy_device *));
int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable);
int phy_get_eee_err(struct phy_device *phydev);
int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data);
int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data);
int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol);
void phy_ethtool_get_wol(struct phy_device *phydev,
struct ethtool_wolinfo *wol);
int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) mdio_bus_init(void);
void mdio_bus_exit(void);
extern struct bus_type mdio_bus_type;
# 20 "include/net/dsa.h" 2
# 1 "include/linux/phy_fixed.h" 1
struct fixed_phy_status {
int link;
int speed;
int duplex;
int pause;
int asym_pause;
};
struct device_node;
# 25 "include/linux/phy_fixed.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int fixed_phy_add(unsigned int irq, int phy_id,
struct fixed_phy_status *status)
{
return -19;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct phy_device *fixed_phy_register(unsigned int irq,
struct fixed_phy_status *status,
struct device_node *np)
{
return ERR_PTR(-19);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int fixed_phy_del(int phy_addr)
{
return -19;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int fixed_phy_set_link_update(struct phy_device *phydev,
int (*link_update)(struct net_device *,
struct fixed_phy_status *))
{
return -19;
}
# 21 "include/net/dsa.h" 2
enum dsa_tag_protocol {
DSA_TAG_PROTO_NONE = 0,
DSA_TAG_PROTO_DSA,
DSA_TAG_PROTO_TRAILER,
DSA_TAG_PROTO_EDSA,
DSA_TAG_PROTO_BRCM,
};
struct dsa_chip_data {
struct device *host_dev;
int sw_addr;
struct device_node *of_node;
# 54 "include/net/dsa.h"
char *port_names[12];
struct device_node *port_dn[12];
s8 *rtable;
};
struct dsa_platform_data {
struct device *netdev;
int nr_chips;
struct dsa_chip_data *chip;
};
struct packet_type;
struct dsa_switch_tree {
struct dsa_platform_data *pd;
struct net_device *master_netdev;
int (*rcv)(struct sk_buff *skb,
struct net_device *dev,
struct packet_type *pt,
struct net_device *orig_dev);
enum dsa_tag_protocol tag_protocol;
s8 cpu_switch;
s8 cpu_port;
int link_poll_needed;
struct work_struct link_poll_work;
struct timer_list link_poll_timer;
struct dsa_switch *ds[4];
};
struct dsa_switch {
struct dsa_switch_tree *dst;
int index;
struct dsa_chip_data *pd;
struct dsa_switch_driver *drv;
struct device *master_dev;
u32 dsa_port_mask;
u32 phys_port_mask;
u32 phys_mii_mask;
struct mii_bus *slave_mii_bus;
struct net_device *ports[12];
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dsa_is_cpu_port(struct dsa_switch *ds, int p)
{
return !!(ds->index == ds->dst->cpu_switch && p == ds->dst->cpu_port);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u8 dsa_upstream_port(struct dsa_switch *ds)
{
struct dsa_switch_tree *dst = ds->dst;
if (dst->cpu_switch == ds->index)
return dst->cpu_port;
else
return ds->pd->rtable[dst->cpu_switch];
}
struct dsa_switch_driver {
struct list_head list;
enum dsa_tag_protocol tag_protocol;
int priv_size;
char *(*probe)(struct device *host_dev, int sw_addr);
int (*setup)(struct dsa_switch *ds);
int (*set_addr)(struct dsa_switch *ds, u8 *addr);
u32 (*get_phy_flags)(struct dsa_switch *ds, int port);
int (*phy_read)(struct dsa_switch *ds, int port, int regnum);
int (*phy_write)(struct dsa_switch *ds, int port,
int regnum, u16 val);
void (*poll_link)(struct dsa_switch *ds);
void (*adjust_link)(struct dsa_switch *ds, int port,
struct phy_device *phydev);
void (*fixed_link_update)(struct dsa_switch *ds, int port,
struct fixed_phy_status *st);
void (*get_strings)(struct dsa_switch *ds, int port, uint8_t *data);
void (*get_ethtool_stats)(struct dsa_switch *ds,
int port, uint64_t *data);
int (*get_sset_count)(struct dsa_switch *ds);
void (*get_wol)(struct dsa_switch *ds, int port,
struct ethtool_wolinfo *w);
int (*set_wol)(struct dsa_switch *ds, int port,
struct ethtool_wolinfo *w);
int (*suspend)(struct dsa_switch *ds);
int (*resume)(struct dsa_switch *ds);
int (*port_enable)(struct dsa_switch *ds, int port,
struct phy_device *phy);
void (*port_disable)(struct dsa_switch *ds, int port,
struct phy_device *phy);
int (*set_eee)(struct dsa_switch *ds, int port,
struct phy_device *phydev,
struct ethtool_eee *e);
int (*get_eee)(struct dsa_switch *ds, int port,
struct ethtool_eee *e);
};
void register_switch_driver(struct dsa_switch_driver *type);
void unregister_switch_driver(struct dsa_switch_driver *type);
struct mii_bus *dsa_host_dev_to_mii_bus(struct device *dev);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *ds_to_priv(struct dsa_switch *ds)
{
return (void *)(ds + 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dsa_uses_tagged_protocol(struct dsa_switch_tree *dst)
{
return dst->rcv != ((void *)0);
}
# 46 "include/linux/netdevice.h" 2
# 1 "include/net/netprio_cgroup.h" 1
# 17 "include/net/netprio_cgroup.h"
# 1 "include/linux/cgroup.h" 1
# 16 "include/linux/cgroup.h"
# 1 "./include/uapi/linux/cgroupstats.h" 1
# 19 "./include/uapi/linux/cgroupstats.h"
# 1 "./include/uapi/linux/taskstats.h" 1
# 40 "./include/uapi/linux/taskstats.h"
struct taskstats {
__u16 version;
__u32 ac_exitcode;
__u8 ac_flag;
__u8 ac_nice;
# 71 "./include/uapi/linux/taskstats.h"
__u64 cpu_count __attribute__((aligned(8)));
__u64 cpu_delay_total;
__u64 blkio_count;
__u64 blkio_delay_total;
__u64 swapin_count;
__u64 swapin_delay_total;
__u64 cpu_run_real_total;
__u64 cpu_run_virtual_total;
char ac_comm[32];
__u8 ac_sched __attribute__((aligned(8)));
__u8 ac_pad[3];
__u32 ac_uid __attribute__((aligned(8)));
__u32 ac_gid;
__u32 ac_pid;
__u32 ac_ppid;
__u32 ac_btime;
__u64 ac_etime __attribute__((aligned(8)));
__u64 ac_utime;
__u64 ac_stime;
__u64 ac_minflt;
__u64 ac_majflt;
# 130 "./include/uapi/linux/taskstats.h"
__u64 coremem;
__u64 virtmem;
__u64 hiwater_rss;
__u64 hiwater_vm;
__u64 read_char;
__u64 write_char;
__u64 read_syscalls;
__u64 write_syscalls;
__u64 read_bytes;
__u64 write_bytes;
__u64 cancelled_write_bytes;
__u64 nvcsw;
__u64 nivcsw;
__u64 ac_utimescaled;
__u64 ac_stimescaled;
__u64 cpu_scaled_run_real_total;
__u64 freepages_count;
__u64 freepages_delay_total;
};
# 175 "./include/uapi/linux/taskstats.h"
enum {
TASKSTATS_CMD_UNSPEC = 0,
TASKSTATS_CMD_GET,
TASKSTATS_CMD_NEW,
__TASKSTATS_CMD_MAX,
};
enum {
TASKSTATS_TYPE_UNSPEC = 0,
TASKSTATS_TYPE_PID,
TASKSTATS_TYPE_TGID,
TASKSTATS_TYPE_STATS,
TASKSTATS_TYPE_AGGR_PID,
TASKSTATS_TYPE_AGGR_TGID,
TASKSTATS_TYPE_NULL,
__TASKSTATS_TYPE_MAX,
};
enum {
TASKSTATS_CMD_ATTR_UNSPEC = 0,
TASKSTATS_CMD_ATTR_PID,
TASKSTATS_CMD_ATTR_TGID,
TASKSTATS_CMD_ATTR_REGISTER_CPUMASK,
TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK,
__TASKSTATS_CMD_ATTR_MAX,
};
# 20 "./include/uapi/linux/cgroupstats.h" 2
# 31 "./include/uapi/linux/cgroupstats.h"
struct cgroupstats {
__u64 nr_sleeping;
__u64 nr_running;
__u64 nr_stopped;
__u64 nr_uninterruptible;
__u64 nr_io_wait;
};
enum {
CGROUPSTATS_CMD_UNSPEC = __TASKSTATS_CMD_MAX,
CGROUPSTATS_CMD_GET,
CGROUPSTATS_CMD_NEW,
__CGROUPSTATS_CMD_MAX,
};
enum {
CGROUPSTATS_TYPE_UNSPEC = 0,
CGROUPSTATS_TYPE_CGROUP_STATS,
__CGROUPSTATS_TYPE_MAX,
};
enum {
CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
CGROUPSTATS_CMD_ATTR_FD,
__CGROUPSTATS_CMD_ATTR_MAX,
};
# 17 "include/linux/cgroup.h" 2
# 1 "include/linux/percpu-refcount.h" 1
# 54 "include/linux/percpu-refcount.h"
struct percpu_ref;
typedef void (percpu_ref_func_t)(struct percpu_ref *);
enum {
__PERCPU_REF_ATOMIC = 1LU << 0,
__PERCPU_REF_DEAD = 1LU << 1,
__PERCPU_REF_ATOMIC_DEAD = __PERCPU_REF_ATOMIC | __PERCPU_REF_DEAD,
__PERCPU_REF_FLAG_BITS = 2,
};
enum {
PERCPU_REF_INIT_ATOMIC = 1 << 0,
PERCPU_REF_INIT_DEAD = 1 << 1,
};
struct percpu_ref {
atomic_long_t count;
unsigned long percpu_count_ptr;
percpu_ref_func_t *release;
percpu_ref_func_t *confirm_switch;
bool force_atomic:1;
struct callback_head rcu;
};
int __attribute__((warn_unused_result)) percpu_ref_init(struct percpu_ref *ref,
percpu_ref_func_t *release, unsigned int flags,
gfp_t gfp);
void percpu_ref_exit(struct percpu_ref *ref);
void percpu_ref_switch_to_atomic(struct percpu_ref *ref,
percpu_ref_func_t *confirm_switch);
void percpu_ref_switch_to_percpu(struct percpu_ref *ref);
void percpu_ref_kill_and_confirm(struct percpu_ref *ref,
percpu_ref_func_t *confirm_kill);
void percpu_ref_reinit(struct percpu_ref *ref);
# 117 "include/linux/percpu-refcount.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void percpu_ref_kill(struct percpu_ref *ref)
{
return percpu_ref_kill_and_confirm(ref, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __ref_is_percpu(struct percpu_ref *ref,
unsigned long **percpu_countp)
{
unsigned long percpu_ptr = (*(volatile typeof(ref->percpu_count_ptr) *)&(ref->percpu_count_ptr));
do { } while(0);
if (__builtin_expect(!!(percpu_ptr & __PERCPU_REF_ATOMIC_DEAD), 0))
return false;
*percpu_countp = (unsigned long *)percpu_ptr;
return true;
}
# 157 "include/linux/percpu-refcount.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void percpu_ref_get(struct percpu_ref *ref)
{
unsigned long *percpu_count;
rcu_read_lock_sched();
if (__ref_is_percpu(ref, &percpu_count))
do { do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(*percpu_count)) { case 1: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 2: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 4: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 8: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
else
atomic_long_inc(&ref->count);
rcu_read_unlock_sched();
}
# 180 "include/linux/percpu-refcount.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool percpu_ref_tryget(struct percpu_ref *ref)
{
unsigned long *percpu_count;
int ret;
rcu_read_lock_sched();
if (__ref_is_percpu(ref, &percpu_count)) {
do { do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(*percpu_count)) { case 1: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 2: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 4: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 8: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
ret = true;
} else {
ret = atomic_add_unless(((atomic_t *)(&ref->count)), 1, 0);
}
rcu_read_unlock_sched();
return ret;
}
# 214 "include/linux/percpu-refcount.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool percpu_ref_tryget_live(struct percpu_ref *ref)
{
unsigned long *percpu_count;
int ret = false;
rcu_read_lock_sched();
if (__ref_is_percpu(ref, &percpu_count)) {
do { do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(*percpu_count)) { case 1: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 2: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 4: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 8: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
ret = true;
} else if (!((*(volatile typeof(ref->percpu_count_ptr) *)&(ref->percpu_count_ptr)) & __PERCPU_REF_DEAD)) {
ret = atomic_add_unless(((atomic_t *)(&ref->count)), 1, 0);
}
rcu_read_unlock_sched();
return ret;
}
# 242 "include/linux/percpu-refcount.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void percpu_ref_put(struct percpu_ref *ref)
{
unsigned long *percpu_count;
rcu_read_lock_sched();
if (__ref_is_percpu(ref, &percpu_count))
do { do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(*percpu_count)) { case 1: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += -(typeof(*percpu_count))(1); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 2: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += -(typeof(*percpu_count))(1); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 4: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += -(typeof(*percpu_count))(1); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 8: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*percpu_count)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))); (typeof((typeof(*(&(*percpu_count))) *)(&(*percpu_count)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += -(typeof(*percpu_count))(1); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
else if (__builtin_expect(!!(atomic_long_dec_and_test(&ref->count)), 0))
ref->release(ref);
rcu_read_unlock_sched();
}
# 264 "include/linux/percpu-refcount.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool percpu_ref_is_zero(struct percpu_ref *ref)
{
unsigned long *percpu_count;
if (__ref_is_percpu(ref, &percpu_count))
return false;
return !atomic_long_read(&ref->count);
}
# 22 "include/linux/cgroup.h" 2
struct cgroup_root;
struct cgroup_subsys;
struct cgroup;
extern int cgroup_init_early(void);
extern int cgroup_init(void);
extern void cgroup_fork(struct task_struct *p);
extern void cgroup_post_fork(struct task_struct *p);
extern void cgroup_exit(struct task_struct *p);
extern int cgroupstats_build(struct cgroupstats *stats,
struct dentry *dentry);
extern int proc_cgroup_show(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *tsk);
enum cgroup_subsys_id {
# 1 "include/linux/cgroup_subsys.h" 1
cpuset_cgrp_id,
cpu_cgrp_id,
cpuacct_cgrp_id,
devices_cgrp_id,
freezer_cgrp_id,
# 54 "include/linux/cgroup_subsys.h"
debug_cgrp_id,
# 47 "include/linux/cgroup.h" 2
CGROUP_SUBSYS_COUNT,
};
# 58 "include/linux/cgroup.h"
struct cgroup_subsys_state {
struct cgroup *cgroup;
struct cgroup_subsys *ss;
struct percpu_ref refcnt;
struct cgroup_subsys_state *parent;
struct list_head sibling;
struct list_head children;
int id;
unsigned int flags;
u64 serial_nr;
struct callback_head callback_head;
struct work_struct destroy_work;
};
enum {
CSS_NO_REF = (1 << 0),
CSS_ONLINE = (1 << 1),
CSS_RELEASED = (1 << 2),
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void css_get(struct cgroup_subsys_state *css)
{
if (!(css->flags & CSS_NO_REF))
percpu_ref_get(&css->refcnt);
}
# 126 "include/linux/cgroup.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool css_tryget(struct cgroup_subsys_state *css)
{
if (!(css->flags & CSS_NO_REF))
return percpu_ref_tryget(&css->refcnt);
return true;
}
# 143 "include/linux/cgroup.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool css_tryget_online(struct cgroup_subsys_state *css)
{
if (!(css->flags & CSS_NO_REF))
return percpu_ref_tryget_live(&css->refcnt);
return true;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void css_put(struct cgroup_subsys_state *css)
{
if (!(css->flags & CSS_NO_REF))
percpu_ref_put(&css->refcnt);
}
enum {
CGRP_NOTIFY_ON_RELEASE,
CGRP_CPUSET_CLONE_CHILDREN,
};
struct cgroup {
struct cgroup_subsys_state self;
unsigned long flags;
# 188 "include/linux/cgroup.h"
int id;
int populated_cnt;
struct kernfs_node *kn;
struct kernfs_node *populated_kn;
# 209 "include/linux/cgroup.h"
unsigned int subtree_control;
unsigned int child_subsys_mask;
struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT];
struct cgroup_root *root;
struct list_head cset_links;
# 230 "include/linux/cgroup.h"
struct list_head e_csets[CGROUP_SUBSYS_COUNT];
struct list_head pidlists;
struct mutex pidlist_mutex;
wait_queue_head_t offline_waitq;
struct work_struct release_agent_work;
};
enum {
CGRP_ROOT_SANE_BEHAVIOR = (1 << 0),
CGRP_ROOT_NOPREFIX = (1 << 1),
CGRP_ROOT_XATTR = (1 << 2),
};
struct cgroup_root {
struct kernfs_root *kf_root;
unsigned int subsys_mask;
int hierarchy_id;
struct cgroup cgrp;
atomic_t nr_cgrps;
struct list_head root_list;
unsigned int flags;
struct idr cgroup_idr;
char release_agent_path[4096];
char name[64];
};
# 299 "include/linux/cgroup.h"
struct css_set {
atomic_t refcount;
struct hlist_node hlist;
# 317 "include/linux/cgroup.h"
struct list_head tasks;
struct list_head mg_tasks;
struct list_head cgrp_links;
struct cgroup *dfl_cgrp;
struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT];
struct list_head mg_preload_node;
struct list_head mg_node;
# 350 "include/linux/cgroup.h"
struct cgroup *mg_src_cgrp;
struct css_set *mg_dst_cset;
# 360 "include/linux/cgroup.h"
struct list_head e_cset_node[CGROUP_SUBSYS_COUNT];
struct callback_head callback_head;
};
# 375 "include/linux/cgroup.h"
enum {
CFTYPE_ONLY_ON_ROOT = (1 << 0),
CFTYPE_NOT_ON_ROOT = (1 << 1),
CFTYPE_NO_PREFIX = (1 << 3),
__CFTYPE_ONLY_ON_DFL = (1 << 16),
__CFTYPE_NOT_ON_DFL = (1 << 17),
};
struct cftype {
char name[64];
int private;
umode_t mode;
size_t max_write_len;
unsigned int flags;
struct cgroup_subsys *ss;
struct list_head node;
struct kernfs_ops *kf_ops;
u64 (*read_u64)(struct cgroup_subsys_state *css, struct cftype *cft);
s64 (*read_s64)(struct cgroup_subsys_state *css, struct cftype *cft);
int (*seq_show)(struct seq_file *sf, void *v);
void *(*seq_start)(struct seq_file *sf, loff_t *ppos);
void *(*seq_next)(struct seq_file *sf, void *v, loff_t *ppos);
void (*seq_stop)(struct seq_file *sf, void *v);
int (*write_u64)(struct cgroup_subsys_state *css, struct cftype *cft,
u64 val);
int (*write_s64)(struct cgroup_subsys_state *css, struct cftype *cft,
s64 val);
ssize_t (*write)(struct kernfs_open_file *of,
char *buf, size_t nbytes, loff_t off);
};
extern struct cgroup_root cgrp_dfl_root;
extern struct css_set init_css_set;
# 519 "include/linux/cgroup.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool cgroup_on_dfl(const struct cgroup *cgrp)
{
return cgrp->root == &cgrp_dfl_root;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool cgroup_has_tasks(struct cgroup *cgrp)
{
return !list_empty(&cgrp->cset_links);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) ino_t cgroup_ino(struct cgroup *cgrp)
{
return cgrp->kn->ino;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct cftype *of_cft(struct kernfs_open_file *of)
{
return of->kn->priv;
}
struct cgroup_subsys_state *of_css(struct kernfs_open_file *of);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct cftype *seq_cft(struct seq_file *seq)
{
return of_cft(seq->private);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct cgroup_subsys_state *seq_css(struct seq_file *seq)
{
return of_css(seq->private);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int cgroup_name(struct cgroup *cgrp, char *buf, size_t buflen)
{
return kernfs_name(cgrp->kn, buf, buflen);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) char * __attribute__((warn_unused_result)) cgroup_path(struct cgroup *cgrp, char *buf,
size_t buflen)
{
return kernfs_path(cgrp->kn, buf, buflen);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pr_cont_cgroup_name(struct cgroup *cgrp)
{
pr_cont_kernfs_name(cgrp->kn);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void pr_cont_cgroup_path(struct cgroup *cgrp)
{
pr_cont_kernfs_path(cgrp->kn);
}
char *task_cgroup_path(struct task_struct *task, char *buf, size_t buflen);
int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts);
int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts);
int cgroup_rm_cftypes(struct cftype *cfts);
bool cgroup_is_descendant(struct cgroup *cgrp, struct cgroup *ancestor);
struct cgroup_taskset;
struct task_struct *cgroup_taskset_first(struct cgroup_taskset *tset);
struct task_struct *cgroup_taskset_next(struct cgroup_taskset *tset);
# 611 "include/linux/cgroup.h"
struct cgroup_subsys {
struct cgroup_subsys_state *(*css_alloc)(struct cgroup_subsys_state *parent_css);
int (*css_online)(struct cgroup_subsys_state *css);
void (*css_offline)(struct cgroup_subsys_state *css);
void (*css_free)(struct cgroup_subsys_state *css);
void (*css_reset)(struct cgroup_subsys_state *css);
int (*can_attach)(struct cgroup_subsys_state *css,
struct cgroup_taskset *tset);
void (*cancel_attach)(struct cgroup_subsys_state *css,
struct cgroup_taskset *tset);
void (*attach)(struct cgroup_subsys_state *css,
struct cgroup_taskset *tset);
void (*fork)(struct task_struct *task);
void (*exit)(struct cgroup_subsys_state *css,
struct cgroup_subsys_state *old_css,
struct task_struct *task);
void (*bind)(struct cgroup_subsys_state *root_css);
int disabled;
int early_init;
# 645 "include/linux/cgroup.h"
bool broken_hierarchy;
bool warned_broken_hierarchy;
int id;
const char *name;
struct cgroup_root *root;
struct idr css_idr;
struct list_head cfts;
struct cftype *dfl_cftypes;
struct cftype *legacy_cftypes;
# 679 "include/linux/cgroup.h"
unsigned int depends_on;
};
# 1 "include/linux/cgroup_subsys.h" 1
extern struct cgroup_subsys cpuset_cgrp_subsys;
extern struct cgroup_subsys cpu_cgrp_subsys;
extern struct cgroup_subsys cpuacct_cgrp_subsys;
extern struct cgroup_subsys devices_cgrp_subsys;
extern struct cgroup_subsys freezer_cgrp_subsys;
# 54 "include/linux/cgroup_subsys.h"
extern struct cgroup_subsys debug_cgrp_subsys;
# 684 "include/linux/cgroup.h" 2
# 730 "include/linux/cgroup.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct css_set *task_css_set(struct task_struct *task)
{
return ({ typeof(*((task)->cgroups)) *_________p1 = (typeof(*((task)->cgroups)) *)(*(volatile typeof(((task)->cgroups)) *)&(((task)->cgroups))); do { } while (0); ; do { } while(0); ((typeof(*((task)->cgroups)) *)(_________p1)); });
}
# 742 "include/linux/cgroup.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct cgroup_subsys_state *task_css(struct task_struct *task,
int subsys_id)
{
return ({ typeof(*(((task))->cgroups)) *_________p1 = (typeof(*(((task))->cgroups)) *)(*(volatile typeof((((task))->cgroups)) *)&((((task))->cgroups))); do { } while (0); ; do { } while(0); ((typeof(*(((task))->cgroups)) *)(_________p1)); })->subsys[(subsys_id)];
}
# 756 "include/linux/cgroup.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool task_css_is_root(struct task_struct *task, int subsys_id)
{
return ({ typeof(*(((task))->cgroups)) *_________p1 = (typeof(*(((task))->cgroups)) *)(*(volatile typeof((((task))->cgroups)) *)&((((task))->cgroups))); do { } while (0); ; do { } while(0); ((typeof(*(((task))->cgroups)) *)(_________p1)); })->subsys[(subsys_id)] ==
init_css_set.subsys[subsys_id];
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct cgroup *task_cgroup(struct task_struct *task,
int subsys_id)
{
return task_css(task, subsys_id)->cgroup;
}
struct cgroup_subsys_state *css_next_child(struct cgroup_subsys_state *pos,
struct cgroup_subsys_state *parent);
struct cgroup_subsys_state *css_from_id(int id, struct cgroup_subsys *ss);
# 795 "include/linux/cgroup.h"
struct cgroup_subsys_state *
css_next_descendant_pre(struct cgroup_subsys_state *pos,
struct cgroup_subsys_state *css);
struct cgroup_subsys_state *
css_rightmost_descendant(struct cgroup_subsys_state *pos);
# 862 "include/linux/cgroup.h"
struct cgroup_subsys_state *
css_next_descendant_post(struct cgroup_subsys_state *pos,
struct cgroup_subsys_state *css);
# 889 "include/linux/cgroup.h"
bool css_has_online_children(struct cgroup_subsys_state *css);
struct css_task_iter {
struct cgroup_subsys *ss;
struct list_head *cset_pos;
struct list_head *cset_head;
struct list_head *task_pos;
struct list_head *tasks_head;
struct list_head *mg_tasks_head;
};
void css_task_iter_start(struct cgroup_subsys_state *css,
struct css_task_iter *it);
struct task_struct *css_task_iter_next(struct css_task_iter *it);
void css_task_iter_end(struct css_task_iter *it);
int cgroup_attach_task_all(struct task_struct *from, struct task_struct *);
int cgroup_transfer_tasks(struct cgroup *to, struct cgroup *from);
struct cgroup_subsys_state *css_tryget_online_from_dir(struct dentry *dentry,
struct cgroup_subsys *ss);
# 18 "include/net/netprio_cgroup.h" 2
# 42 "include/net/netprio_cgroup.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 task_netprioidx(struct task_struct *p)
{
return 0;
}
# 50 "include/linux/netdevice.h" 2
# 1 "./include/uapi/linux/neighbour.h" 1
# 1 "include/linux/netlink.h" 1
# 1 "include/net/scm.h" 1
# 1 "include/linux/security.h" 1
# 31 "include/linux/security.h"
struct linux_binprm;
struct cred;
struct rlimit;
struct siginfo;
struct sem_array;
struct sembuf;
struct kern_ipc_perm;
struct audit_context;
struct super_block;
struct inode;
struct dentry;
struct file;
struct vfsmount;
struct path;
struct qstr;
struct nameidata;
struct iattr;
struct fown_struct;
struct file_operations;
struct shmid_kernel;
struct msg_msg;
struct msg_queue;
struct xattr;
struct xfrm_sec_ctx;
struct mm_struct;
# 67 "include/linux/security.h"
struct ctl_table;
struct audit_krule;
struct user_namespace;
struct timezone;
extern int cap_capable(const struct cred *cred, struct user_namespace *ns,
int cap, int audit);
extern int cap_settime(const struct timespec *ts, const struct timezone *tz);
extern int cap_ptrace_access_check(struct task_struct *child, unsigned int mode);
extern int cap_ptrace_traceme(struct task_struct *parent);
extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted);
extern int cap_capset(struct cred *new, const struct cred *old,
const kernel_cap_t *effective,
const kernel_cap_t *inheritable,
const kernel_cap_t *permitted);
extern int cap_bprm_set_creds(struct linux_binprm *bprm);
extern int cap_bprm_secureexec(struct linux_binprm *bprm);
extern int cap_inode_setxattr(struct dentry *dentry, const char *name,
const void *value, size_t size, int flags);
extern int cap_inode_removexattr(struct dentry *dentry, const char *name);
extern int cap_inode_need_killpriv(struct dentry *dentry);
extern int cap_inode_killpriv(struct dentry *dentry);
extern int cap_mmap_addr(unsigned long addr);
extern int cap_mmap_file(struct file *file, unsigned long reqprot,
unsigned long prot, unsigned long flags);
extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags);
extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3,
unsigned long arg4, unsigned long arg5);
extern int cap_task_setscheduler(struct task_struct *p);
extern int cap_task_setioprio(struct task_struct *p, int ioprio);
extern int cap_task_setnice(struct task_struct *p, int nice);
extern int cap_vm_enough_memory(struct mm_struct *mm, long pages);
struct msghdr;
struct sk_buff;
struct sock;
struct sockaddr;
struct socket;
struct flowi;
struct dst_entry;
struct xfrm_selector;
struct xfrm_policy;
struct xfrm_state;
struct xfrm_user_sec_ctx;
struct seq_file;
extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb);
void reset_security_ops(void);
extern unsigned long mmap_min_addr;
extern unsigned long dac_mmap_min_addr;
# 145 "include/linux/security.h"
struct sched_param;
struct request_sock;
# 155 "include/linux/security.h"
extern int mmap_min_addr_handler(struct ctl_table *table, int write,
void *buffer, size_t *lenp, loff_t *ppos);
typedef int (*initxattrs) (struct inode *inode,
const struct xattr *xattr_array, void *fs_data);
struct security_mnt_opts {
char **mnt_opts;
int *mnt_opts_flags;
int num_mnt_opts;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_init_mnt_opts(struct security_mnt_opts *opts)
{
opts->mnt_opts = ((void *)0);
opts->mnt_opts_flags = ((void *)0);
opts->num_mnt_opts = 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_free_mnt_opts(struct security_mnt_opts *opts)
{
int i;
if (opts->mnt_opts)
for (i = 0; i < opts->num_mnt_opts; i++)
kfree(opts->mnt_opts[i]);
kfree(opts->mnt_opts);
opts->mnt_opts = ((void *)0);
kfree(opts->mnt_opts_flags);
opts->mnt_opts_flags = ((void *)0);
opts->num_mnt_opts = 0;
}
# 1441 "include/linux/security.h"
struct security_operations {
char name[10 + 1];
int (*ptrace_access_check) (struct task_struct *child, unsigned int mode);
int (*ptrace_traceme) (struct task_struct *parent);
int (*capget) (struct task_struct *target,
kernel_cap_t *effective,
kernel_cap_t *inheritable, kernel_cap_t *permitted);
int (*capset) (struct cred *new,
const struct cred *old,
const kernel_cap_t *effective,
const kernel_cap_t *inheritable,
const kernel_cap_t *permitted);
int (*capable) (const struct cred *cred, struct user_namespace *ns,
int cap, int audit);
int (*quotactl) (int cmds, int type, int id, struct super_block *sb);
int (*quota_on) (struct dentry *dentry);
int (*syslog) (int type);
int (*settime) (const struct timespec *ts, const struct timezone *tz);
int (*vm_enough_memory) (struct mm_struct *mm, long pages);
int (*bprm_set_creds) (struct linux_binprm *bprm);
int (*bprm_check_security) (struct linux_binprm *bprm);
int (*bprm_secureexec) (struct linux_binprm *bprm);
void (*bprm_committing_creds) (struct linux_binprm *bprm);
void (*bprm_committed_creds) (struct linux_binprm *bprm);
int (*sb_alloc_security) (struct super_block *sb);
void (*sb_free_security) (struct super_block *sb);
int (*sb_copy_data) (char *orig, char *copy);
int (*sb_remount) (struct super_block *sb, void *data);
int (*sb_kern_mount) (struct super_block *sb, int flags, void *data);
int (*sb_show_options) (struct seq_file *m, struct super_block *sb);
int (*sb_statfs) (struct dentry *dentry);
int (*sb_mount) (const char *dev_name, struct path *path,
const char *type, unsigned long flags, void *data);
int (*sb_umount) (struct vfsmount *mnt, int flags);
int (*sb_pivotroot) (struct path *old_path,
struct path *new_path);
int (*sb_set_mnt_opts) (struct super_block *sb,
struct security_mnt_opts *opts,
unsigned long kern_flags,
unsigned long *set_kern_flags);
int (*sb_clone_mnt_opts) (const struct super_block *oldsb,
struct super_block *newsb);
int (*sb_parse_opts_str) (char *options, struct security_mnt_opts *opts);
int (*dentry_init_security) (struct dentry *dentry, int mode,
struct qstr *name, void **ctx,
u32 *ctxlen);
# 1510 "include/linux/security.h"
int (*inode_alloc_security) (struct inode *inode);
void (*inode_free_security) (struct inode *inode);
int (*inode_init_security) (struct inode *inode, struct inode *dir,
const struct qstr *qstr, const char **name,
void **value, size_t *len);
int (*inode_create) (struct inode *dir,
struct dentry *dentry, umode_t mode);
int (*inode_link) (struct dentry *old_dentry,
struct inode *dir, struct dentry *new_dentry);
int (*inode_unlink) (struct inode *dir, struct dentry *dentry);
int (*inode_symlink) (struct inode *dir,
struct dentry *dentry, const char *old_name);
int (*inode_mkdir) (struct inode *dir, struct dentry *dentry, umode_t mode);
int (*inode_rmdir) (struct inode *dir, struct dentry *dentry);
int (*inode_mknod) (struct inode *dir, struct dentry *dentry,
umode_t mode, dev_t dev);
int (*inode_rename) (struct inode *old_dir, struct dentry *old_dentry,
struct inode *new_dir, struct dentry *new_dentry);
int (*inode_readlink) (struct dentry *dentry);
int (*inode_follow_link) (struct dentry *dentry, struct nameidata *nd);
int (*inode_permission) (struct inode *inode, int mask);
int (*inode_setattr) (struct dentry *dentry, struct iattr *attr);
int (*inode_getattr) (struct vfsmount *mnt, struct dentry *dentry);
int (*inode_setxattr) (struct dentry *dentry, const char *name,
const void *value, size_t size, int flags);
void (*inode_post_setxattr) (struct dentry *dentry, const char *name,
const void *value, size_t size, int flags);
int (*inode_getxattr) (struct dentry *dentry, const char *name);
int (*inode_listxattr) (struct dentry *dentry);
int (*inode_removexattr) (struct dentry *dentry, const char *name);
int (*inode_need_killpriv) (struct dentry *dentry);
int (*inode_killpriv) (struct dentry *dentry);
int (*inode_getsecurity) (const struct inode *inode, const char *name, void **buffer, bool alloc);
int (*inode_setsecurity) (struct inode *inode, const char *name, const void *value, size_t size, int flags);
int (*inode_listsecurity) (struct inode *inode, char *buffer, size_t buffer_size);
void (*inode_getsecid) (const struct inode *inode, u32 *secid);
int (*file_permission) (struct file *file, int mask);
int (*file_alloc_security) (struct file *file);
void (*file_free_security) (struct file *file);
int (*file_ioctl) (struct file *file, unsigned int cmd,
unsigned long arg);
int (*mmap_addr) (unsigned long addr);
int (*mmap_file) (struct file *file,
unsigned long reqprot, unsigned long prot,
unsigned long flags);
int (*file_mprotect) (struct vm_area_struct *vma,
unsigned long reqprot,
unsigned long prot);
int (*file_lock) (struct file *file, unsigned int cmd);
int (*file_fcntl) (struct file *file, unsigned int cmd,
unsigned long arg);
void (*file_set_fowner) (struct file *file);
int (*file_send_sigiotask) (struct task_struct *tsk,
struct fown_struct *fown, int sig);
int (*file_receive) (struct file *file);
int (*file_open) (struct file *file, const struct cred *cred);
int (*task_create) (unsigned long clone_flags);
void (*task_free) (struct task_struct *task);
int (*cred_alloc_blank) (struct cred *cred, gfp_t gfp);
void (*cred_free) (struct cred *cred);
int (*cred_prepare)(struct cred *new, const struct cred *old,
gfp_t gfp);
void (*cred_transfer)(struct cred *new, const struct cred *old);
int (*kernel_act_as)(struct cred *new, u32 secid);
int (*kernel_create_files_as)(struct cred *new, struct inode *inode);
int (*kernel_fw_from_file)(struct file *file, char *buf, size_t size);
int (*kernel_module_request)(char *kmod_name);
int (*kernel_module_from_file)(struct file *file);
int (*task_fix_setuid) (struct cred *new, const struct cred *old,
int flags);
int (*task_setpgid) (struct task_struct *p, pid_t pgid);
int (*task_getpgid) (struct task_struct *p);
int (*task_getsid) (struct task_struct *p);
void (*task_getsecid) (struct task_struct *p, u32 *secid);
int (*task_setnice) (struct task_struct *p, int nice);
int (*task_setioprio) (struct task_struct *p, int ioprio);
int (*task_getioprio) (struct task_struct *p);
int (*task_setrlimit) (struct task_struct *p, unsigned int resource,
struct rlimit *new_rlim);
int (*task_setscheduler) (struct task_struct *p);
int (*task_getscheduler) (struct task_struct *p);
int (*task_movememory) (struct task_struct *p);
int (*task_kill) (struct task_struct *p,
struct siginfo *info, int sig, u32 secid);
int (*task_wait) (struct task_struct *p);
int (*task_prctl) (int option, unsigned long arg2,
unsigned long arg3, unsigned long arg4,
unsigned long arg5);
void (*task_to_inode) (struct task_struct *p, struct inode *inode);
int (*ipc_permission) (struct kern_ipc_perm *ipcp, short flag);
void (*ipc_getsecid) (struct kern_ipc_perm *ipcp, u32 *secid);
int (*msg_msg_alloc_security) (struct msg_msg *msg);
void (*msg_msg_free_security) (struct msg_msg *msg);
int (*msg_queue_alloc_security) (struct msg_queue *msq);
void (*msg_queue_free_security) (struct msg_queue *msq);
int (*msg_queue_associate) (struct msg_queue *msq, int msqflg);
int (*msg_queue_msgctl) (struct msg_queue *msq, int cmd);
int (*msg_queue_msgsnd) (struct msg_queue *msq,
struct msg_msg *msg, int msqflg);
int (*msg_queue_msgrcv) (struct msg_queue *msq,
struct msg_msg *msg,
struct task_struct *target,
long type, int mode);
int (*shm_alloc_security) (struct shmid_kernel *shp);
void (*shm_free_security) (struct shmid_kernel *shp);
int (*shm_associate) (struct shmid_kernel *shp, int shmflg);
int (*shm_shmctl) (struct shmid_kernel *shp, int cmd);
int (*shm_shmat) (struct shmid_kernel *shp,
char *shmaddr, int shmflg);
int (*sem_alloc_security) (struct sem_array *sma);
void (*sem_free_security) (struct sem_array *sma);
int (*sem_associate) (struct sem_array *sma, int semflg);
int (*sem_semctl) (struct sem_array *sma, int cmd);
int (*sem_semop) (struct sem_array *sma,
struct sembuf *sops, unsigned nsops, int alter);
int (*netlink_send) (struct sock *sk, struct sk_buff *skb);
void (*d_instantiate) (struct dentry *dentry, struct inode *inode);
int (*getprocattr) (struct task_struct *p, char *name, char **value);
int (*setprocattr) (struct task_struct *p, char *name, void *value, size_t size);
int (*ismaclabel) (const char *name);
int (*secid_to_secctx) (u32 secid, char **secdata, u32 *seclen);
int (*secctx_to_secid) (const char *secdata, u32 seclen, u32 *secid);
void (*release_secctx) (char *secdata, u32 seclen);
int (*inode_notifysecctx)(struct inode *inode, void *ctx, u32 ctxlen);
int (*inode_setsecctx)(struct dentry *dentry, void *ctx, u32 ctxlen);
int (*inode_getsecctx)(struct inode *inode, void **ctx, u32 *ctxlen);
# 1732 "include/linux/security.h"
};
extern int security_init(void);
extern int security_module_enable(struct security_operations *ops);
extern int register_security(struct security_operations *ops);
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) security_fixup_ops(struct security_operations *ops);
int security_ptrace_access_check(struct task_struct *child, unsigned int mode);
int security_ptrace_traceme(struct task_struct *parent);
int security_capget(struct task_struct *target,
kernel_cap_t *effective,
kernel_cap_t *inheritable,
kernel_cap_t *permitted);
int security_capset(struct cred *new, const struct cred *old,
const kernel_cap_t *effective,
const kernel_cap_t *inheritable,
const kernel_cap_t *permitted);
int security_capable(const struct cred *cred, struct user_namespace *ns,
int cap);
int security_capable_noaudit(const struct cred *cred, struct user_namespace *ns,
int cap);
int security_quotactl(int cmds, int type, int id, struct super_block *sb);
int security_quota_on(struct dentry *dentry);
int security_syslog(int type);
int security_settime(const struct timespec *ts, const struct timezone *tz);
int security_vm_enough_memory_mm(struct mm_struct *mm, long pages);
int security_bprm_set_creds(struct linux_binprm *bprm);
int security_bprm_check(struct linux_binprm *bprm);
void security_bprm_committing_creds(struct linux_binprm *bprm);
void security_bprm_committed_creds(struct linux_binprm *bprm);
int security_bprm_secureexec(struct linux_binprm *bprm);
int security_sb_alloc(struct super_block *sb);
void security_sb_free(struct super_block *sb);
int security_sb_copy_data(char *orig, char *copy);
int security_sb_remount(struct super_block *sb, void *data);
int security_sb_kern_mount(struct super_block *sb, int flags, void *data);
int security_sb_show_options(struct seq_file *m, struct super_block *sb);
int security_sb_statfs(struct dentry *dentry);
int security_sb_mount(const char *dev_name, struct path *path,
const char *type, unsigned long flags, void *data);
int security_sb_umount(struct vfsmount *mnt, int flags);
int security_sb_pivotroot(struct path *old_path, struct path *new_path);
int security_sb_set_mnt_opts(struct super_block *sb,
struct security_mnt_opts *opts,
unsigned long kern_flags,
unsigned long *set_kern_flags);
int security_sb_clone_mnt_opts(const struct super_block *oldsb,
struct super_block *newsb);
int security_sb_parse_opts_str(char *options, struct security_mnt_opts *opts);
int security_dentry_init_security(struct dentry *dentry, int mode,
struct qstr *name, void **ctx,
u32 *ctxlen);
int security_inode_alloc(struct inode *inode);
void security_inode_free(struct inode *inode);
int security_inode_init_security(struct inode *inode, struct inode *dir,
const struct qstr *qstr,
initxattrs initxattrs, void *fs_data);
int security_old_inode_init_security(struct inode *inode, struct inode *dir,
const struct qstr *qstr, const char **name,
void **value, size_t *len);
int security_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode);
int security_inode_link(struct dentry *old_dentry, struct inode *dir,
struct dentry *new_dentry);
int security_inode_unlink(struct inode *dir, struct dentry *dentry);
int security_inode_symlink(struct inode *dir, struct dentry *dentry,
const char *old_name);
int security_inode_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode);
int security_inode_rmdir(struct inode *dir, struct dentry *dentry);
int security_inode_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev);
int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry,
struct inode *new_dir, struct dentry *new_dentry,
unsigned int flags);
int security_inode_readlink(struct dentry *dentry);
int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd);
int security_inode_permission(struct inode *inode, int mask);
int security_inode_setattr(struct dentry *dentry, struct iattr *attr);
int security_inode_getattr(struct vfsmount *mnt, struct dentry *dentry);
int security_inode_setxattr(struct dentry *dentry, const char *name,
const void *value, size_t size, int flags);
void security_inode_post_setxattr(struct dentry *dentry, const char *name,
const void *value, size_t size, int flags);
int security_inode_getxattr(struct dentry *dentry, const char *name);
int security_inode_listxattr(struct dentry *dentry);
int security_inode_removexattr(struct dentry *dentry, const char *name);
int security_inode_need_killpriv(struct dentry *dentry);
int security_inode_killpriv(struct dentry *dentry);
int security_inode_getsecurity(const struct inode *inode, const char *name, void **buffer, bool alloc);
int security_inode_setsecurity(struct inode *inode, const char *name, const void *value, size_t size, int flags);
int security_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size);
void security_inode_getsecid(const struct inode *inode, u32 *secid);
int security_file_permission(struct file *file, int mask);
int security_file_alloc(struct file *file);
void security_file_free(struct file *file);
int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
int security_mmap_file(struct file *file, unsigned long prot,
unsigned long flags);
int security_mmap_addr(unsigned long addr);
int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot,
unsigned long prot);
int security_file_lock(struct file *file, unsigned int cmd);
int security_file_fcntl(struct file *file, unsigned int cmd, unsigned long arg);
void security_file_set_fowner(struct file *file);
int security_file_send_sigiotask(struct task_struct *tsk,
struct fown_struct *fown, int sig);
int security_file_receive(struct file *file);
int security_file_open(struct file *file, const struct cred *cred);
int security_task_create(unsigned long clone_flags);
void security_task_free(struct task_struct *task);
int security_cred_alloc_blank(struct cred *cred, gfp_t gfp);
void security_cred_free(struct cred *cred);
int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp);
void security_transfer_creds(struct cred *new, const struct cred *old);
int security_kernel_act_as(struct cred *new, u32 secid);
int security_kernel_create_files_as(struct cred *new, struct inode *inode);
int security_kernel_fw_from_file(struct file *file, char *buf, size_t size);
int security_kernel_module_request(char *kmod_name);
int security_kernel_module_from_file(struct file *file);
int security_task_fix_setuid(struct cred *new, const struct cred *old,
int flags);
int security_task_setpgid(struct task_struct *p, pid_t pgid);
int security_task_getpgid(struct task_struct *p);
int security_task_getsid(struct task_struct *p);
void security_task_getsecid(struct task_struct *p, u32 *secid);
int security_task_setnice(struct task_struct *p, int nice);
int security_task_setioprio(struct task_struct *p, int ioprio);
int security_task_getioprio(struct task_struct *p);
int security_task_setrlimit(struct task_struct *p, unsigned int resource,
struct rlimit *new_rlim);
int security_task_setscheduler(struct task_struct *p);
int security_task_getscheduler(struct task_struct *p);
int security_task_movememory(struct task_struct *p);
int security_task_kill(struct task_struct *p, struct siginfo *info,
int sig, u32 secid);
int security_task_wait(struct task_struct *p);
int security_task_prctl(int option, unsigned long arg2, unsigned long arg3,
unsigned long arg4, unsigned long arg5);
void security_task_to_inode(struct task_struct *p, struct inode *inode);
int security_ipc_permission(struct kern_ipc_perm *ipcp, short flag);
void security_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid);
int security_msg_msg_alloc(struct msg_msg *msg);
void security_msg_msg_free(struct msg_msg *msg);
int security_msg_queue_alloc(struct msg_queue *msq);
void security_msg_queue_free(struct msg_queue *msq);
int security_msg_queue_associate(struct msg_queue *msq, int msqflg);
int security_msg_queue_msgctl(struct msg_queue *msq, int cmd);
int security_msg_queue_msgsnd(struct msg_queue *msq,
struct msg_msg *msg, int msqflg);
int security_msg_queue_msgrcv(struct msg_queue *msq, struct msg_msg *msg,
struct task_struct *target, long type, int mode);
int security_shm_alloc(struct shmid_kernel *shp);
void security_shm_free(struct shmid_kernel *shp);
int security_shm_associate(struct shmid_kernel *shp, int shmflg);
int security_shm_shmctl(struct shmid_kernel *shp, int cmd);
int security_shm_shmat(struct shmid_kernel *shp, char *shmaddr, int shmflg);
int security_sem_alloc(struct sem_array *sma);
void security_sem_free(struct sem_array *sma);
int security_sem_associate(struct sem_array *sma, int semflg);
int security_sem_semctl(struct sem_array *sma, int cmd);
int security_sem_semop(struct sem_array *sma, struct sembuf *sops,
unsigned nsops, int alter);
void security_d_instantiate(struct dentry *dentry, struct inode *inode);
int security_getprocattr(struct task_struct *p, char *name, char **value);
int security_setprocattr(struct task_struct *p, char *name, void *value, size_t size);
int security_netlink_send(struct sock *sk, struct sk_buff *skb);
int security_ismaclabel(const char *name);
int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen);
int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid);
void security_release_secctx(char *secdata, u32 seclen);
int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen);
int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen);
int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen);
# 2683 "include/linux/security.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_unix_stream_connect(struct sock *sock,
struct sock *other,
struct sock *newsk)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_unix_may_send(struct socket *sock,
struct socket *other)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_create(int family, int type,
int protocol, int kern)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_post_create(struct socket *sock,
int family,
int type,
int protocol, int kern)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_bind(struct socket *sock,
struct sockaddr *address,
int addrlen)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_connect(struct socket *sock,
struct sockaddr *address,
int addrlen)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_listen(struct socket *sock, int backlog)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_accept(struct socket *sock,
struct socket *newsock)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_sendmsg(struct socket *sock,
struct msghdr *msg, int size)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_recvmsg(struct socket *sock,
struct msghdr *msg, int size,
int flags)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_getsockname(struct socket *sock)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_getpeername(struct socket *sock)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_getsockopt(struct socket *sock,
int level, int optname)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_setsockopt(struct socket *sock,
int level, int optname)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_shutdown(struct socket *sock, int how)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_sock_rcv_skb(struct sock *sk,
struct sk_buff *skb)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_getpeersec_stream(struct socket *sock, char *optval,
int *optlen, unsigned len)
{
return -99;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid)
{
return -99;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_sk_alloc(struct sock *sk, int family, gfp_t priority)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_sk_free(struct sock *sk)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_sk_clone(const struct sock *sk, struct sock *newsk)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_sk_classify_flow(struct sock *sk, struct flowi *fl)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_req_classify_flow(const struct request_sock *req, struct flowi *fl)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_sock_graft(struct sock *sk, struct socket *parent)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_inet_conn_request(struct sock *sk,
struct sk_buff *skb, struct request_sock *req)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_inet_csk_clone(struct sock *newsk,
const struct request_sock *req)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_inet_conn_established(struct sock *sk,
struct sk_buff *skb)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_secmark_relabel_packet(u32 secid)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_secmark_refcount_inc(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_secmark_refcount_dec(void)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_tun_dev_alloc_security(void **security)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_tun_dev_free_security(void *security)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_tun_dev_create(void)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_tun_dev_attach_queue(void *security)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_tun_dev_attach(struct sock *sk, void *security)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_tun_dev_open(void *security)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_skb_owned_by(struct sk_buff *skb, struct sock *sk)
{
}
# 2901 "include/linux/security.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_xfrm_policy_alloc(struct xfrm_sec_ctx **ctxp,
struct xfrm_user_sec_ctx *sec_ctx,
gfp_t gfp)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_xfrm_policy_clone(struct xfrm_sec_ctx *old, struct xfrm_sec_ctx **new_ctxp)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_xfrm_policy_free(struct xfrm_sec_ctx *ctx)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_xfrm_policy_delete(struct xfrm_sec_ctx *ctx)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_xfrm_state_alloc(struct xfrm_state *x,
struct xfrm_user_sec_ctx *sec_ctx)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_xfrm_state_alloc_acquire(struct xfrm_state *x,
struct xfrm_sec_ctx *polsec, u32 secid)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_xfrm_state_free(struct xfrm_state *x)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_xfrm_state_delete(struct xfrm_state *x)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_xfrm_state_pol_flow_match(struct xfrm_state *x,
struct xfrm_policy *xp, const struct flowi *fl)
{
return 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void security_skb_classify_flow(struct sk_buff *skb, struct flowi *fl)
{
}
# 2983 "include/linux/security.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_unlink(struct path *dir, struct dentry *dentry)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_mkdir(struct path *dir, struct dentry *dentry,
umode_t mode)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_rmdir(struct path *dir, struct dentry *dentry)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_mknod(struct path *dir, struct dentry *dentry,
umode_t mode, unsigned int dev)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_truncate(struct path *path)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_symlink(struct path *dir, struct dentry *dentry,
const char *old_name)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_link(struct dentry *old_dentry,
struct path *new_dir,
struct dentry *new_dentry)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_rename(struct path *old_dir,
struct dentry *old_dentry,
struct path *new_dir,
struct dentry *new_dentry,
unsigned int flags)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_chmod(struct path *path, umode_t mode)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int security_path_chroot(struct path *path)
{
return 0;
}
# 3121 "include/linux/security.h"
extern struct dentry *securityfs_create_file(const char *name, umode_t mode,
struct dentry *parent, void *data,
const struct file_operations *fops);
extern struct dentry *securityfs_create_dir(const char *name, struct dentry *parent);
extern void securityfs_remove(struct dentry *dentry);
# 3151 "include/linux/security.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) char *alloc_secdata(void)
{
return (char *)get_zeroed_page(((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u)));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void free_secdata(void *secdata)
{
free_pages(((unsigned long)secdata), 0);
}
# 3180 "include/linux/security.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int yama_ptrace_access_check(struct task_struct *child,
unsigned int mode)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int yama_ptrace_traceme(struct task_struct *parent)
{
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void yama_task_free(struct task_struct *task)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int yama_task_prctl(int option, unsigned long arg2,
unsigned long arg3, unsigned long arg4,
unsigned long arg5)
{
return -89;
}
# 7 "include/net/scm.h" 2
# 15 "include/net/scm.h"
struct scm_creds {
u32 pid;
kuid_t uid;
kgid_t gid;
};
struct scm_fp_list {
short count;
short max;
struct file *fp[253];
};
struct scm_cookie {
struct pid *pid;
struct scm_fp_list *fp;
struct scm_creds creds;
};
void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm);
void scm_detach_fds_compat(struct msghdr *msg, struct scm_cookie *scm);
int __scm_send(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm);
void __scm_destroy(struct scm_cookie *scm);
struct scm_fp_list *scm_fp_dup(struct scm_fp_list *fpl);
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) void unix_get_peersec_dgram(struct socket *sock, struct scm_cookie *scm)
{ }
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) void scm_set_cred(struct scm_cookie *scm,
struct pid *pid, kuid_t uid, kgid_t gid)
{
scm->pid = get_pid(pid);
scm->creds.pid = pid_vnr(pid);
scm->creds.uid = uid;
scm->creds.gid = gid;
}
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) void scm_destroy_cred(struct scm_cookie *scm)
{
put_pid(scm->pid);
scm->pid = ((void *)0);
}
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) void scm_destroy(struct scm_cookie *scm)
{
scm_destroy_cred(scm);
if (scm->fp)
__scm_destroy(scm);
}
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) int scm_send(struct socket *sock, struct msghdr *msg,
struct scm_cookie *scm, bool forcecreds)
{
memset(scm, 0, sizeof(*scm));
scm->creds.uid = (kuid_t){ -1 };
scm->creds.gid = (kgid_t){ -1 };
if (forcecreds)
scm_set_cred(scm, task_tgid((current_thread_info()->task)), (({ ({ do { } while (0); ; ((typeof(*((current_thread_info()->task)->cred)) *)(((current_thread_info()->task)->cred))); })->uid; })), (({ ({ do { } while (0); ; ((typeof(*((current_thread_info()->task)->cred)) *)(((current_thread_info()->task)->cred))); })->gid; })));
unix_get_peersec_dgram(sock, scm);
if (msg->msg_controllen <= 0)
return 0;
return __scm_send(sock, msg, scm);
}
# 105 "include/net/scm.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void scm_passec(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm)
{ }
static __inline__ __attribute__((always_inline)) __attribute__((no_instrument_function)) void scm_recv(struct socket *sock, struct msghdr *msg,
struct scm_cookie *scm, int flags)
{
if (!msg->msg_control) {
if (test_bit(3, &sock->flags) || scm->fp)
msg->msg_flags |= 8;
scm_destroy(scm);
return;
}
if (test_bit(3, &sock->flags)) {
struct user_namespace *current_ns = (({ ({ do { } while (0); ; ((typeof(*((current_thread_info()->task)->cred)) *)(((current_thread_info()->task)->cred))); })->user_ns; }));
struct ucred ucreds = {
.pid = scm->creds.pid,
.uid = from_kuid_munged(current_ns, scm->creds.uid),
.gid = from_kgid_munged(current_ns, scm->creds.gid),
};
put_cmsg(msg, 0xffff, 0x02, sizeof(ucreds), &ucreds);
}
scm_destroy_cred(scm);
scm_passec(sock, msg, scm);
if (!scm->fp)
return;
scm_detach_fds(msg, scm);
}
# 9 "include/linux/netlink.h" 2
# 1 "include/uapi/linux/netlink.h" 1
# 35 "include/uapi/linux/netlink.h"
struct sockaddr_nl {
__kernel_sa_family_t nl_family;
unsigned short nl_pad;
__u32 nl_pid;
__u32 nl_groups;
};
struct nlmsghdr {
__u32 nlmsg_len;
__u16 nlmsg_type;
__u16 nlmsg_flags;
__u32 nlmsg_seq;
__u32 nlmsg_pid;
};
# 99 "include/uapi/linux/netlink.h"
struct nlmsgerr {
int error;
struct nlmsghdr msg;
};
# 112 "include/uapi/linux/netlink.h"
struct nl_pktinfo {
__u32 group;
};
struct nl_mmap_req {
unsigned int nm_block_size;
unsigned int nm_block_nr;
unsigned int nm_frame_size;
unsigned int nm_frame_nr;
};
struct nl_mmap_hdr {
unsigned int nm_status;
unsigned int nm_len;
__u32 nm_group;
__u32 nm_pid;
__u32 nm_uid;
__u32 nm_gid;
};
enum nl_mmap_status {
NL_MMAP_STATUS_UNUSED,
NL_MMAP_STATUS_RESERVED,
NL_MMAP_STATUS_VALID,
NL_MMAP_STATUS_COPY,
NL_MMAP_STATUS_SKIP,
};
enum {
NETLINK_UNCONNECTED = 0,
NETLINK_CONNECTED,
};
# 161 "include/uapi/linux/netlink.h"
struct nlattr {
__u16 nla_len;
__u16 nla_type;
};
# 10 "include/linux/netlink.h" 2
struct net;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct nlmsghdr *nlmsg_hdr(const struct sk_buff *skb)
{
return (struct nlmsghdr *)skb->data;
}
enum netlink_skb_flags {
NETLINK_SKB_MMAPED = 0x1,
NETLINK_SKB_TX = 0x2,
NETLINK_SKB_DELIVERED = 0x4,
NETLINK_SKB_DST = 0x8,
};
struct netlink_skb_parms {
struct scm_creds creds;
__u32 portid;
__u32 dst_group;
__u32 flags;
struct sock *sk;
};
extern void netlink_table_grab(void);
extern void netlink_table_ungrab(void);
struct netlink_kernel_cfg {
unsigned int groups;
unsigned int flags;
void (*input)(struct sk_buff *skb);
struct mutex *cb_mutex;
int (*bind)(int group);
void (*unbind)(int group);
bool (*compare)(struct net *net, struct sock *sk);
};
extern struct sock *__netlink_kernel_create(struct net *net, int unit,
struct module *module,
struct netlink_kernel_cfg *cfg);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sock *
netlink_kernel_create(struct net *net, int unit, struct netlink_kernel_cfg *cfg)
{
return __netlink_kernel_create(net, unit, (&__this_module), cfg);
}
extern void netlink_kernel_release(struct sock *sk);
extern int __netlink_change_ngroups(struct sock *sk, unsigned int groups);
extern int netlink_change_ngroups(struct sock *sk, unsigned int groups);
extern void __netlink_clear_multicast_users(struct sock *sk, unsigned int group);
extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err);
extern int netlink_has_listeners(struct sock *sk, unsigned int group);
extern struct sk_buff *netlink_alloc_skb(struct sock *ssk, unsigned int size,
u32 dst_portid, gfp_t gfp_mask);
extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 portid, int nonblock);
extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 portid,
__u32 group, gfp_t allocation);
extern int netlink_broadcast_filtered(struct sock *ssk, struct sk_buff *skb,
__u32 portid, __u32 group, gfp_t allocation,
int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data),
void *filter_data);
extern int netlink_set_err(struct sock *ssk, __u32 portid, __u32 group, int code);
extern int netlink_register_notifier(struct notifier_block *nb);
extern int netlink_unregister_notifier(struct notifier_block *nb);
struct sock *netlink_getsockbyfilp(struct file *filp);
int netlink_attachskb(struct sock *sk, struct sk_buff *skb,
long *timeo, struct sock *ssk);
void netlink_detachskb(struct sock *sk, struct sk_buff *skb);
int netlink_sendskb(struct sock *sk, struct sk_buff *skb);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct sk_buff *
netlink_skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
{
struct sk_buff *nskb;
nskb = skb_clone(skb, gfp_mask);
if (!nskb)
return ((void *)0);
if (is_vmalloc_addr(skb->head))
nskb->destructor = skb->destructor;
return nskb;
}
# 120 "include/linux/netlink.h"
struct netlink_callback {
struct sk_buff *skb;
const struct nlmsghdr *nlh;
int (*dump)(struct sk_buff * skb,
struct netlink_callback *cb);
int (*done)(struct netlink_callback *cb);
void *data;
struct module *module;
u16 family;
u16 min_dump_alloc;
unsigned int prev_seq, seq;
long args[6];
};
struct netlink_notify {
struct net *net;
int portid;
int protocol;
};
struct nlmsghdr *
__nlmsg_put(struct sk_buff *skb, u32 portid, u32 seq, int type, int len, int flags);
struct netlink_dump_control {
int (*dump)(struct sk_buff *skb, struct netlink_callback *);
int (*done)(struct netlink_callback *);
void *data;
struct module *module;
u16 min_dump_alloc;
};
extern int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
const struct nlmsghdr *nlh,
struct netlink_dump_control *control);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
const struct nlmsghdr *nlh,
struct netlink_dump_control *control)
{
if (!control->module)
control->module = (&__this_module);
return __netlink_dump_start(ssk, skb, nlh, control);
}
struct netlink_tap {
struct net_device *dev;
struct module *module;
struct list_head list;
};
extern int netlink_add_tap(struct netlink_tap *nt);
extern int netlink_remove_tap(struct netlink_tap *nt);
bool __netlink_ns_capable(const struct netlink_skb_parms *nsp,
struct user_namespace *ns, int cap);
bool netlink_ns_capable(const struct sk_buff *skb,
struct user_namespace *ns, int cap);
bool netlink_capable(const struct sk_buff *skb, int cap);
bool netlink_net_capable(const struct sk_buff *skb, int cap);
# 6 "./include/uapi/linux/neighbour.h" 2
struct ndmsg {
__u8 ndm_family;
__u8 ndm_pad1;
__u16 ndm_pad2;
__s32 ndm_ifindex;
__u16 ndm_state;
__u8 ndm_flags;
__u8 ndm_type;
};
enum {
NDA_UNSPEC,
NDA_DST,
NDA_LLADDR,
NDA_CACHEINFO,
NDA_PROBES,
NDA_VLAN,
NDA_PORT,
NDA_VNI,
NDA_IFINDEX,
NDA_MASTER,
__NDA_MAX
};
# 65 "./include/uapi/linux/neighbour.h"
struct nda_cacheinfo {
__u32 ndm_confirmed;
__u32 ndm_used;
__u32 ndm_updated;
__u32 ndm_refcnt;
};
# 97 "./include/uapi/linux/neighbour.h"
struct ndt_stats {
__u64 ndts_allocs;
__u64 ndts_destroys;
__u64 ndts_hash_grows;
__u64 ndts_res_failed;
__u64 ndts_lookups;
__u64 ndts_hits;
__u64 ndts_rcv_probes_mcast;
__u64 ndts_rcv_probes_ucast;
__u64 ndts_periodic_gc_runs;
__u64 ndts_forced_gc_runs;
};
enum {
NDTPA_UNSPEC,
NDTPA_IFINDEX,
NDTPA_REFCNT,
NDTPA_REACHABLE_TIME,
NDTPA_BASE_REACHABLE_TIME,
NDTPA_RETRANS_TIME,
NDTPA_GC_STALETIME,
NDTPA_DELAY_PROBE_TIME,
NDTPA_QUEUE_LEN,
NDTPA_APP_PROBES,
NDTPA_UCAST_PROBES,
NDTPA_MCAST_PROBES,
NDTPA_ANYCAST_DELAY,
NDTPA_PROXY_DELAY,
NDTPA_PROXY_QLEN,
NDTPA_LOCKTIME,
NDTPA_QUEUE_LENBYTES,
__NDTPA_MAX
};
struct ndtmsg {
__u8 ndtm_family;
__u8 ndtm_pad1;
__u16 ndtm_pad2;
};
struct ndt_config {
__u16 ndtc_key_len;
__u16 ndtc_entry_size;
__u32 ndtc_entries;
__u32 ndtc_last_flush;
__u32 ndtc_last_rand;
__u32 ndtc_hash_rnd;
__u32 ndtc_hash_mask;
__u32 ndtc_hash_chain_gc;
__u32 ndtc_proxy_qlen;
};
enum {
NDTA_UNSPEC,
NDTA_NAME,
NDTA_THRESH1,
NDTA_THRESH2,
NDTA_THRESH3,
NDTA_CONFIG,
NDTA_PARMS,
NDTA_STATS,
NDTA_GC_INTERVAL,
__NDTA_MAX
};
# 53 "include/linux/netdevice.h" 2
# 1 "include/uapi/linux/netdevice.h" 1
# 30 "include/uapi/linux/netdevice.h"
# 1 "./include/uapi/linux/if_packet.h" 1
struct sockaddr_pkt {
unsigned short spkt_family;
unsigned char spkt_device[14];
__be16 spkt_protocol;
};
struct sockaddr_ll {
unsigned short sll_family;
__be16 sll_protocol;
int sll_ifindex;
unsigned short sll_hatype;
unsigned char sll_pkttype;
unsigned char sll_halen;
unsigned char sll_addr[8];
};
# 68 "./include/uapi/linux/if_packet.h"
struct tpacket_stats {
unsigned int tp_packets;
unsigned int tp_drops;
};
struct tpacket_stats_v3 {
unsigned int tp_packets;
unsigned int tp_drops;
unsigned int tp_freeze_q_cnt;
};
union tpacket_stats_u {
struct tpacket_stats stats1;
struct tpacket_stats_v3 stats3;
};
struct tpacket_auxdata {
__u32 tp_status;
__u32 tp_len;
__u32 tp_snaplen;
__u16 tp_mac;
__u16 tp_net;
__u16 tp_vlan_tci;
__u16 tp_vlan_tpid;
};
# 118 "./include/uapi/linux/if_packet.h"
struct tpacket_hdr {
unsigned long tp_status;
unsigned int tp_len;
unsigned int tp_snaplen;
unsigned short tp_mac;
unsigned short tp_net;
unsigned int tp_sec;
unsigned int tp_usec;
};
struct tpacket2_hdr {
__u32 tp_status;
__u32 tp_len;
__u32 tp_snaplen;
__u16 tp_mac;
__u16 tp_net;
__u32 tp_sec;
__u32 tp_nsec;
__u16 tp_vlan_tci;
__u16 tp_vlan_tpid;
__u8 tp_padding[4];
};
struct tpacket_hdr_variant1 {
__u32 tp_rxhash;
__u32 tp_vlan_tci;
__u16 tp_vlan_tpid;
__u16 tp_padding;
};
struct tpacket3_hdr {
__u32 tp_next_offset;
__u32 tp_sec;
__u32 tp_nsec;
__u32 tp_snaplen;
__u32 tp_len;
__u32 tp_status;
__u16 tp_mac;
__u16 tp_net;
union {
struct tpacket_hdr_variant1 hv1;
};
__u8 tp_padding[8];
};
struct tpacket_bd_ts {
unsigned int ts_sec;
union {
unsigned int ts_usec;
unsigned int ts_nsec;
};
};
struct tpacket_hdr_v1 {
__u32 block_status;
__u32 num_pkts;
__u32 offset_to_first_pkt;
__u32 blk_len;
# 198 "./include/uapi/linux/if_packet.h"
__u64 seq_num;
# 226 "./include/uapi/linux/if_packet.h"
struct tpacket_bd_ts ts_first_pkt, ts_last_pkt;
};
union tpacket_bd_header_u {
struct tpacket_hdr_v1 bh1;
};
struct tpacket_block_desc {
__u32 version;
__u32 offset_to_priv;
union tpacket_bd_header_u hdr;
};
enum tpacket_versions {
TPACKET_V1,
TPACKET_V2,
TPACKET_V3
};
# 261 "./include/uapi/linux/if_packet.h"
struct tpacket_req {
unsigned int tp_block_size;
unsigned int tp_block_nr;
unsigned int tp_frame_size;
unsigned int tp_frame_nr;
};
struct tpacket_req3 {
unsigned int tp_block_size;
unsigned int tp_block_nr;
unsigned int tp_frame_size;
unsigned int tp_frame_nr;
unsigned int tp_retire_blk_tov;
unsigned int tp_sizeof_priv;
unsigned int tp_feature_req_word;
};
union tpacket_req_u {
struct tpacket_req req;
struct tpacket_req3 req3;
};
struct packet_mreq {
int mr_ifindex;
unsigned short mr_type;
unsigned short mr_alen;
unsigned char mr_address[8];
};
# 31 "include/uapi/linux/netdevice.h" 2
# 1 "include/linux/if_link.h" 1
# 1 "include/uapi/linux/if_link.h" 1
struct rtnl_link_stats {
__u32 rx_packets;
__u32 tx_packets;
__u32 rx_bytes;
__u32 tx_bytes;
__u32 rx_errors;
__u32 tx_errors;
__u32 rx_dropped;
__u32 tx_dropped;
__u32 multicast;
__u32 collisions;
__u32 rx_length_errors;
__u32 rx_over_errors;
__u32 rx_crc_errors;
__u32 rx_frame_errors;
__u32 rx_fifo_errors;
__u32 rx_missed_errors;
__u32 tx_aborted_errors;
__u32 tx_carrier_errors;
__u32 tx_fifo_errors;
__u32 tx_heartbeat_errors;
__u32 tx_window_errors;
__u32 rx_compressed;
__u32 tx_compressed;
};
struct rtnl_link_stats64 {
__u64 rx_packets;
__u64 tx_packets;
__u64 rx_bytes;
__u64 tx_bytes;
__u64 rx_errors;
__u64 tx_errors;
__u64 rx_dropped;
__u64 tx_dropped;
__u64 multicast;
__u64 collisions;
__u64 rx_length_errors;
__u64 rx_over_errors;
__u64 rx_crc_errors;
__u64 rx_frame_errors;
__u64 rx_fifo_errors;
__u64 rx_missed_errors;
__u64 tx_aborted_errors;
__u64 tx_carrier_errors;
__u64 tx_fifo_errors;
__u64 tx_heartbeat_errors;
__u64 tx_window_errors;
__u64 rx_compressed;
__u64 tx_compressed;
};
struct rtnl_link_ifmap {
__u64 mem_start;
__u64 mem_end;
__u64 base_addr;
__u16 irq;
__u8 dma;
__u8 port;
};
# 101 "include/uapi/linux/if_link.h"
enum {
IFLA_UNSPEC,
IFLA_ADDRESS,
IFLA_BROADCAST,
IFLA_IFNAME,
IFLA_MTU,
IFLA_LINK,
IFLA_QDISC,
IFLA_STATS,
IFLA_COST,
IFLA_PRIORITY,
IFLA_MASTER,
IFLA_WIRELESS,
IFLA_PROTINFO,
IFLA_TXQLEN,
IFLA_MAP,
IFLA_WEIGHT,
IFLA_OPERSTATE,
IFLA_LINKMODE,
IFLA_LINKINFO,
IFLA_NET_NS_PID,
IFLA_IFALIAS,
IFLA_NUM_VF,
IFLA_VFINFO_LIST,
IFLA_STATS64,
IFLA_VF_PORTS,
IFLA_PORT_SELF,
IFLA_AF_SPEC,
IFLA_GROUP,
IFLA_NET_NS_FD,
IFLA_EXT_MASK,
IFLA_PROMISCUITY,
IFLA_NUM_TX_QUEUES,
IFLA_NUM_RX_QUEUES,
IFLA_CARRIER,
IFLA_PHYS_PORT_ID,
IFLA_CARRIER_CHANGES,
__IFLA_MAX
};
# 160 "include/uapi/linux/if_link.h"
enum {
IFLA_INET_UNSPEC,
IFLA_INET_CONF,
__IFLA_INET_MAX,
};
# 198 "include/uapi/linux/if_link.h"
enum {
IFLA_INET6_UNSPEC,
IFLA_INET6_FLAGS,
IFLA_INET6_CONF,
IFLA_INET6_STATS,
IFLA_INET6_MCAST,
IFLA_INET6_CACHEINFO,
IFLA_INET6_ICMP6STATS,
IFLA_INET6_TOKEN,
IFLA_INET6_ADDR_GEN_MODE,
__IFLA_INET6_MAX
};
enum in6_addr_gen_mode {
IN6_ADDR_GEN_MODE_EUI64,
IN6_ADDR_GEN_MODE_NONE,
};
enum {
IFLA_BR_UNSPEC,
IFLA_BR_FORWARD_DELAY,
IFLA_BR_HELLO_TIME,
IFLA_BR_MAX_AGE,
__IFLA_BR_MAX,
};
enum {
BRIDGE_MODE_UNSPEC,
BRIDGE_MODE_HAIRPIN,
};
enum {
IFLA_BRPORT_UNSPEC,
IFLA_BRPORT_STATE,
IFLA_BRPORT_PRIORITY,
IFLA_BRPORT_COST,
IFLA_BRPORT_MODE,
IFLA_BRPORT_GUARD,
IFLA_BRPORT_PROTECT,
IFLA_BRPORT_FAST_LEAVE,
IFLA_BRPORT_LEARNING,
IFLA_BRPORT_UNICAST_FLOOD,
__IFLA_BRPORT_MAX
};
struct ifla_cacheinfo {
__u32 max_reasm_len;
__u32 tstamp;
__u32 reachable_time;
__u32 retrans_time;
};
enum {
IFLA_INFO_UNSPEC,
IFLA_INFO_KIND,
IFLA_INFO_DATA,
IFLA_INFO_XSTATS,
IFLA_INFO_SLAVE_KIND,
IFLA_INFO_SLAVE_DATA,
__IFLA_INFO_MAX,
};
enum {
IFLA_VLAN_UNSPEC,
IFLA_VLAN_ID,
IFLA_VLAN_FLAGS,
IFLA_VLAN_EGRESS_QOS,
IFLA_VLAN_INGRESS_QOS,
IFLA_VLAN_PROTOCOL,
__IFLA_VLAN_MAX,
};
struct ifla_vlan_flags {
__u32 flags;
__u32 mask;
};
enum {
IFLA_VLAN_QOS_UNSPEC,
IFLA_VLAN_QOS_MAPPING,
__IFLA_VLAN_QOS_MAX
};
struct ifla_vlan_qos_mapping {
__u32 from;
__u32 to;
};
enum {
IFLA_MACVLAN_UNSPEC,
IFLA_MACVLAN_MODE,
IFLA_MACVLAN_FLAGS,
IFLA_MACVLAN_MACADDR_MODE,
IFLA_MACVLAN_MACADDR,
IFLA_MACVLAN_MACADDR_DATA,
IFLA_MACVLAN_MACADDR_COUNT,
__IFLA_MACVLAN_MAX,
};
enum macvlan_mode {
MACVLAN_MODE_PRIVATE = 1,
MACVLAN_MODE_VEPA = 2,
MACVLAN_MODE_BRIDGE = 4,
MACVLAN_MODE_PASSTHRU = 8,
MACVLAN_MODE_SOURCE = 16,
};
enum macvlan_macaddr_mode {
MACVLAN_MACADDR_ADD,
MACVLAN_MACADDR_DEL,
MACVLAN_MACADDR_FLUSH,
MACVLAN_MACADDR_SET,
};
enum {
IFLA_VXLAN_UNSPEC,
IFLA_VXLAN_ID,
IFLA_VXLAN_GROUP,
IFLA_VXLAN_LINK,
IFLA_VXLAN_LOCAL,
IFLA_VXLAN_TTL,
IFLA_VXLAN_TOS,
IFLA_VXLAN_LEARNING,
IFLA_VXLAN_AGEING,
IFLA_VXLAN_LIMIT,
IFLA_VXLAN_PORT_RANGE,
IFLA_VXLAN_PROXY,
IFLA_VXLAN_RSC,
IFLA_VXLAN_L2MISS,
IFLA_VXLAN_L3MISS,
IFLA_VXLAN_PORT,
IFLA_VXLAN_GROUP6,
IFLA_VXLAN_LOCAL6,
IFLA_VXLAN_UDP_CSUM,
IFLA_VXLAN_UDP_ZERO_CSUM6_TX,
IFLA_VXLAN_UDP_ZERO_CSUM6_RX,
__IFLA_VXLAN_MAX
};
struct ifla_vxlan_port_range {
__be16 low;
__be16 high;
};
enum {
IFLA_BOND_UNSPEC,
IFLA_BOND_MODE,
IFLA_BOND_ACTIVE_SLAVE,
IFLA_BOND_MIIMON,
IFLA_BOND_UPDELAY,
IFLA_BOND_DOWNDELAY,
IFLA_BOND_USE_CARRIER,
IFLA_BOND_ARP_INTERVAL,
IFLA_BOND_ARP_IP_TARGET,
IFLA_BOND_ARP_VALIDATE,
IFLA_BOND_ARP_ALL_TARGETS,
IFLA_BOND_PRIMARY,
IFLA_BOND_PRIMARY_RESELECT,
IFLA_BOND_FAIL_OVER_MAC,
IFLA_BOND_XMIT_HASH_POLICY,
IFLA_BOND_RESEND_IGMP,
IFLA_BOND_NUM_PEER_NOTIF,
IFLA_BOND_ALL_SLAVES_ACTIVE,
IFLA_BOND_MIN_LINKS,
IFLA_BOND_LP_INTERVAL,
IFLA_BOND_PACKETS_PER_SLAVE,
IFLA_BOND_AD_LACP_RATE,
IFLA_BOND_AD_SELECT,
IFLA_BOND_AD_INFO,
__IFLA_BOND_MAX,
};
enum {
IFLA_BOND_AD_INFO_UNSPEC,
IFLA_BOND_AD_INFO_AGGREGATOR,
IFLA_BOND_AD_INFO_NUM_PORTS,
IFLA_BOND_AD_INFO_ACTOR_KEY,
IFLA_BOND_AD_INFO_PARTNER_KEY,
IFLA_BOND_AD_INFO_PARTNER_MAC,
__IFLA_BOND_AD_INFO_MAX,
};
enum {
IFLA_BOND_SLAVE_UNSPEC,
IFLA_BOND_SLAVE_STATE,
IFLA_BOND_SLAVE_MII_STATUS,
IFLA_BOND_SLAVE_LINK_FAILURE_COUNT,
IFLA_BOND_SLAVE_PERM_HWADDR,
IFLA_BOND_SLAVE_QUEUE_ID,
IFLA_BOND_SLAVE_AD_AGGREGATOR_ID,
__IFLA_BOND_SLAVE_MAX,
};
enum {
IFLA_VF_INFO_UNSPEC,
IFLA_VF_INFO,
__IFLA_VF_INFO_MAX,
};
enum {
IFLA_VF_UNSPEC,
IFLA_VF_MAC,
IFLA_VF_VLAN,
IFLA_VF_TX_RATE,
IFLA_VF_SPOOFCHK,
IFLA_VF_LINK_STATE,
IFLA_VF_RATE,
__IFLA_VF_MAX,
};
struct ifla_vf_mac {
__u32 vf;
__u8 mac[32];
};
struct ifla_vf_vlan {
__u32 vf;
__u32 vlan;
__u32 qos;
};
struct ifla_vf_tx_rate {
__u32 vf;
__u32 rate;
};
struct ifla_vf_rate {
__u32 vf;
__u32 min_tx_rate;
__u32 max_tx_rate;
};
struct ifla_vf_spoofchk {
__u32 vf;
__u32 setting;
};
enum {
IFLA_VF_LINK_STATE_AUTO,
IFLA_VF_LINK_STATE_ENABLE,
IFLA_VF_LINK_STATE_DISABLE,
__IFLA_VF_LINK_STATE_MAX,
};
struct ifla_vf_link_state {
__u32 vf;
__u32 link_state;
};
# 498 "include/uapi/linux/if_link.h"
enum {
IFLA_VF_PORT_UNSPEC,
IFLA_VF_PORT,
__IFLA_VF_PORT_MAX,
};
enum {
IFLA_PORT_UNSPEC,
IFLA_PORT_VF,
IFLA_PORT_PROFILE,
IFLA_PORT_VSI_TYPE,
IFLA_PORT_INSTANCE_UUID,
IFLA_PORT_HOST_UUID,
IFLA_PORT_REQUEST,
IFLA_PORT_RESPONSE,
__IFLA_PORT_MAX,
};
enum {
PORT_REQUEST_PREASSOCIATE = 0,
PORT_REQUEST_PREASSOCIATE_RR,
PORT_REQUEST_ASSOCIATE,
PORT_REQUEST_DISASSOCIATE,
};
enum {
PORT_VDP_RESPONSE_SUCCESS = 0,
PORT_VDP_RESPONSE_INVALID_FORMAT,
PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES,
PORT_VDP_RESPONSE_UNUSED_VTID,
PORT_VDP_RESPONSE_VTID_VIOLATION,
PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION,
PORT_VDP_RESPONSE_OUT_OF_SYNC,
PORT_PROFILE_RESPONSE_SUCCESS = 0x100,
PORT_PROFILE_RESPONSE_INPROGRESS,
PORT_PROFILE_RESPONSE_INVALID,
PORT_PROFILE_RESPONSE_BADSTATE,
PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES,
PORT_PROFILE_RESPONSE_ERROR,
};
struct ifla_port_vsi {
__u8 vsi_mgr_id;
__u8 vsi_type_id[3];
__u8 vsi_type_version;
__u8 pad[3];
};
enum {
IFLA_IPOIB_UNSPEC,
IFLA_IPOIB_PKEY,
IFLA_IPOIB_MODE,
IFLA_IPOIB_UMCAST,
__IFLA_IPOIB_MAX
};
enum {
IPOIB_MODE_DATAGRAM = 0,
IPOIB_MODE_CONNECTED = 1,
};
enum {
IFLA_HSR_UNSPEC,
IFLA_HSR_SLAVE1,
IFLA_HSR_SLAVE2,
IFLA_HSR_MULTICAST_SPEC,
IFLA_HSR_SUPERVISION_ADDR,
IFLA_HSR_SEQ_NR,
__IFLA_HSR_MAX,
};
# 5 "include/linux/if_link.h" 2
struct ifla_vf_info {
__u32 vf;
__u8 mac[32];
__u32 vlan;
__u32 qos;
__u32 spoofchk;
__u32 linkstate;
__u32 min_tx_rate;
__u32 max_tx_rate;
};
# 32 "include/uapi/linux/netdevice.h" 2
# 48 "include/uapi/linux/netdevice.h"
enum {
IF_PORT_UNKNOWN = 0,
IF_PORT_10BASE2,
IF_PORT_10BASET,
IF_PORT_AUI,
IF_PORT_100BASET,
IF_PORT_100BASETX,
IF_PORT_100BASEFX
};
# 54 "include/linux/netdevice.h" 2
struct netpoll_info;
struct device;
struct phy_device;
struct wireless_dev;
void netdev_set_default_ethtool_ops(struct net_device *dev,
const struct ethtool_ops *ops);
# 101 "include/linux/netdevice.h"
enum netdev_tx {
__NETDEV_TX_MIN = (-((int)(~0U>>1)) - 1),
NETDEV_TX_OK = 0x00,
NETDEV_TX_BUSY = 0x10,
NETDEV_TX_LOCKED = 0x20,
};
typedef enum netdev_tx netdev_tx_t;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool dev_xmit_complete(int rc)
{
if (__builtin_expect(!!(rc < 0x0f), 1))
return true;
return false;
}
# 154 "include/linux/netdevice.h"
struct net_device_stats {
unsigned long rx_packets;
unsigned long tx_packets;
unsigned long rx_bytes;
unsigned long tx_bytes;
unsigned long rx_errors;
unsigned long tx_errors;
unsigned long rx_dropped;
unsigned long tx_dropped;
unsigned long multicast;
unsigned long collisions;
unsigned long rx_length_errors;
unsigned long rx_over_errors;
unsigned long rx_crc_errors;
unsigned long rx_frame_errors;
unsigned long rx_fifo_errors;
unsigned long rx_missed_errors;
unsigned long tx_aborted_errors;
unsigned long tx_carrier_errors;
unsigned long tx_fifo_errors;
unsigned long tx_heartbeat_errors;
unsigned long tx_window_errors;
unsigned long rx_compressed;
unsigned long tx_compressed;
};
# 1 "include/linux/static_key.h" 1
# 186 "include/linux/netdevice.h" 2
extern struct static_key rps_needed;
struct neighbour;
struct neigh_parms;
struct sk_buff;
struct netdev_hw_addr {
struct list_head list;
unsigned char addr[32];
unsigned char type;
bool global_use;
int sync_cnt;
int refcount;
int synced;
struct callback_head callback_head;
};
struct netdev_hw_addr_list {
struct list_head list;
int count;
};
# 229 "include/linux/netdevice.h"
struct hh_cache {
u16 hh_len;
u16 __pad;
seqlock_t hh_lock;
unsigned long hh_data[(((96)+(16 -1))&~(16 - 1)) / sizeof(long)];
};
# 256 "include/linux/netdevice.h"
struct header_ops {
int (*create) (struct sk_buff *skb, struct net_device *dev,
unsigned short type, const void *daddr,
const void *saddr, unsigned int len);
int (*parse)(const struct sk_buff *skb, unsigned char *haddr);
int (*rebuild)(struct sk_buff *skb);
int (*cache)(const struct neighbour *neigh, struct hh_cache *hh, __be16 type);
void (*cache_update)(struct hh_cache *hh,
const struct net_device *dev,
const unsigned char *haddr);
};
enum netdev_state_t {
__LINK_STATE_START,
__LINK_STATE_PRESENT,
__LINK_STATE_NOCARRIER,
__LINK_STATE_LINKWATCH_PENDING,
__LINK_STATE_DORMANT,
};
struct netdev_boot_setup {
char name[16];
struct ifmap map;
};
int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) netdev_boot_setup(char *str);
struct napi_struct {
struct list_head poll_list;
unsigned long state;
int weight;
unsigned int gro_count;
int (*poll)(struct napi_struct *, int);
struct net_device *dev;
struct sk_buff *gro_list;
struct sk_buff *skb;
struct list_head dev_list;
struct hlist_node napi_hash_node;
unsigned int napi_id;
};
enum {
NAPI_STATE_SCHED,
NAPI_STATE_DISABLE,
NAPI_STATE_NPSVC,
NAPI_STATE_HASHED,
};
enum gro_result {
GRO_MERGED,
GRO_MERGED_FREE,
GRO_HELD,
GRO_NORMAL,
GRO_DROP,
};
typedef enum gro_result gro_result_t;
# 379 "include/linux/netdevice.h"
enum rx_handler_result {
RX_HANDLER_CONSUMED,
RX_HANDLER_ANOTHER,
RX_HANDLER_EXACT,
RX_HANDLER_PASS,
};
typedef enum rx_handler_result rx_handler_result_t;
typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **pskb);
void __napi_schedule(struct napi_struct *n);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool napi_disable_pending(struct napi_struct *n)
{
return test_bit(NAPI_STATE_DISABLE, &n->state);
}
# 404 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool napi_schedule_prep(struct napi_struct *n)
{
return !napi_disable_pending(n) &&
!test_and_set_bit(NAPI_STATE_SCHED, &n->state);
}
# 417 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void napi_schedule(struct napi_struct *n)
{
if (napi_schedule_prep(n))
__napi_schedule(n);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool napi_reschedule(struct napi_struct *napi)
{
if (napi_schedule_prep(napi)) {
__napi_schedule(napi);
return true;
}
return false;
}
void __napi_complete(struct napi_struct *n);
void napi_complete(struct napi_struct *n);
# 449 "include/linux/netdevice.h"
struct napi_struct *napi_by_id(unsigned int napi_id);
void napi_hash_add(struct napi_struct *napi);
# 466 "include/linux/netdevice.h"
void napi_hash_del(struct napi_struct *napi);
# 475 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void napi_disable(struct napi_struct *n)
{
do { do { } while (0); } while (0);
set_bit(NAPI_STATE_DISABLE, &n->state);
while (test_and_set_bit(NAPI_STATE_SCHED, &n->state))
msleep(1);
clear_bit(NAPI_STATE_DISABLE, &n->state);
}
# 491 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void napi_enable(struct napi_struct *n)
{
__BUG_ON((unsigned long)(!test_bit(NAPI_STATE_SCHED, &n->state)));
__asm__ __volatile__(" \n" : : :"memory");
clear_bit(NAPI_STATE_SCHED, &n->state);
}
# 507 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void napi_synchronize(const struct napi_struct *n)
{
while (test_bit(NAPI_STATE_SCHED, &n->state))
msleep(1);
}
enum netdev_queue_state_t {
__QUEUE_STATE_DRV_XOFF,
__QUEUE_STATE_STACK_XOFF,
__QUEUE_STATE_FROZEN,
};
# 542 "include/linux/netdevice.h"
struct netdev_queue {
struct net_device *dev;
struct Qdisc *qdisc;
struct Qdisc *qdisc_sleeping;
struct kobject kobj;
spinlock_t _xmit_lock __attribute__((__aligned__((1 << 5))));
int xmit_lock_owner;
unsigned long trans_start;
unsigned long trans_timeout;
unsigned long state;
struct dql dql;
} __attribute__((__aligned__((1 << 5))));
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int netdev_queue_numa_node_read(const struct netdev_queue *q)
{
return (-1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_queue_numa_node_write(struct netdev_queue *q, int node)
{
}
struct rps_map {
unsigned int len;
struct callback_head rcu;
u16 cpus[0];
};
struct rps_dev_flow {
u16 cpu;
u16 filter;
unsigned int last_qtail;
};
struct rps_dev_flow_table {
unsigned int mask;
struct callback_head rcu;
struct rps_dev_flow flows[0];
};
struct rps_sock_flow_table {
unsigned int mask;
u16 ents[0];
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rps_record_sock_flow(struct rps_sock_flow_table *table,
u32 hash)
{
if (table && hash) {
unsigned int cpu, index = hash & table->mask;
cpu = (current_thread_info()->cpu);
if (table->ents[index] != cpu)
table->ents[index] = cpu;
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void rps_reset_sock_flow(struct rps_sock_flow_table *table,
u32 hash)
{
if (table && hash)
table->ents[hash & table->mask] = 0xffff;
}
extern struct rps_sock_flow_table *rps_sock_flow_table;
bool rps_may_expire_flow(struct net_device *dev, u16 rxq_index, u32 flow_id,
u16 filter_id);
struct netdev_rx_queue {
struct rps_map *rps_map;
struct rps_dev_flow_table *rps_flow_table;
struct kobject kobj;
struct net_device *dev;
} __attribute__((__aligned__((1 << 5))));
struct rx_queue_attribute {
struct attribute attr;
ssize_t (*show)(struct netdev_rx_queue *queue,
struct rx_queue_attribute *attr, char *buf);
ssize_t (*store)(struct netdev_rx_queue *queue,
struct rx_queue_attribute *attr, const char *buf, size_t len);
};
struct xps_map {
unsigned int len;
unsigned int alloc_len;
struct callback_head rcu;
u16 queues[0];
};
struct xps_dev_maps {
struct callback_head rcu;
struct xps_map *cpu_map[0];
};
struct netdev_tc_txq {
u16 count;
u16 offset;
};
# 748 "include/linux/netdevice.h"
struct netdev_phys_port_id {
unsigned char id[32];
unsigned char id_len;
};
typedef u16 (*select_queue_fallback_t)(struct net_device *dev,
struct sk_buff *skb);
# 1011 "include/linux/netdevice.h"
struct net_device_ops {
int (*ndo_init)(struct net_device *dev);
void (*ndo_uninit)(struct net_device *dev);
int (*ndo_open)(struct net_device *dev);
int (*ndo_stop)(struct net_device *dev);
netdev_tx_t (*ndo_start_xmit) (struct sk_buff *skb,
struct net_device *dev);
u16 (*ndo_select_queue)(struct net_device *dev,
struct sk_buff *skb,
void *accel_priv,
select_queue_fallback_t fallback);
void (*ndo_change_rx_flags)(struct net_device *dev,
int flags);
void (*ndo_set_rx_mode)(struct net_device *dev);
int (*ndo_set_mac_address)(struct net_device *dev,
void *addr);
int (*ndo_validate_addr)(struct net_device *dev);
int (*ndo_do_ioctl)(struct net_device *dev,
struct ifreq *ifr, int cmd);
int (*ndo_set_config)(struct net_device *dev,
struct ifmap *map);
int (*ndo_change_mtu)(struct net_device *dev,
int new_mtu);
int (*ndo_neigh_setup)(struct net_device *dev,
struct neigh_parms *);
void (*ndo_tx_timeout) (struct net_device *dev);
struct rtnl_link_stats64* (*ndo_get_stats64)(struct net_device *dev,
struct rtnl_link_stats64 *storage);
struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);
int (*ndo_vlan_rx_add_vid)(struct net_device *dev,
__be16 proto, u16 vid);
int (*ndo_vlan_rx_kill_vid)(struct net_device *dev,
__be16 proto, u16 vid);
int (*ndo_busy_poll)(struct napi_struct *dev);
int (*ndo_set_vf_mac)(struct net_device *dev,
int queue, u8 *mac);
int (*ndo_set_vf_vlan)(struct net_device *dev,
int queue, u16 vlan, u8 qos);
int (*ndo_set_vf_rate)(struct net_device *dev,
int vf, int min_tx_rate,
int max_tx_rate);
int (*ndo_set_vf_spoofchk)(struct net_device *dev,
int vf, bool setting);
int (*ndo_get_vf_config)(struct net_device *dev,
int vf,
struct ifla_vf_info *ivf);
int (*ndo_set_vf_link_state)(struct net_device *dev,
int vf, int link_state);
int (*ndo_set_vf_port)(struct net_device *dev,
int vf,
struct nlattr *port[]);
int (*ndo_get_vf_port)(struct net_device *dev,
int vf, struct sk_buff *skb);
int (*ndo_setup_tc)(struct net_device *dev, u8 tc);
# 1100 "include/linux/netdevice.h"
int (*ndo_rx_flow_steer)(struct net_device *dev,
const struct sk_buff *skb,
u16 rxq_index,
u32 flow_id);
int (*ndo_add_slave)(struct net_device *dev,
struct net_device *slave_dev);
int (*ndo_del_slave)(struct net_device *dev,
struct net_device *slave_dev);
netdev_features_t (*ndo_fix_features)(struct net_device *dev,
netdev_features_t features);
int (*ndo_set_features)(struct net_device *dev,
netdev_features_t features);
int (*ndo_neigh_construct)(struct neighbour *n);
void (*ndo_neigh_destroy)(struct neighbour *n);
int (*ndo_fdb_add)(struct ndmsg *ndm,
struct nlattr *tb[],
struct net_device *dev,
const unsigned char *addr,
u16 flags);
int (*ndo_fdb_del)(struct ndmsg *ndm,
struct nlattr *tb[],
struct net_device *dev,
const unsigned char *addr);
int (*ndo_fdb_dump)(struct sk_buff *skb,
struct netlink_callback *cb,
struct net_device *dev,
struct net_device *filter_dev,
int idx);
int (*ndo_bridge_setlink)(struct net_device *dev,
struct nlmsghdr *nlh);
int (*ndo_bridge_getlink)(struct sk_buff *skb,
u32 pid, u32 seq,
struct net_device *dev,
u32 filter_mask);
int (*ndo_bridge_dellink)(struct net_device *dev,
struct nlmsghdr *nlh);
int (*ndo_change_carrier)(struct net_device *dev,
bool new_carrier);
int (*ndo_get_phys_port_id)(struct net_device *dev,
struct netdev_phys_port_id *ppid);
void (*ndo_add_vxlan_port)(struct net_device *dev,
sa_family_t sa_family,
__be16 port);
void (*ndo_del_vxlan_port)(struct net_device *dev,
sa_family_t sa_family,
__be16 port);
void* (*ndo_dfwd_add_station)(struct net_device *pdev,
struct net_device *dev);
void (*ndo_dfwd_del_station)(struct net_device *pdev,
void *priv);
netdev_tx_t (*ndo_dfwd_start_xmit) (struct sk_buff *skb,
struct net_device *dev,
void *priv);
int (*ndo_get_lock_subclass)(struct net_device *dev);
netdev_features_t (*ndo_features_check) (struct sk_buff *skb,
struct net_device *dev,
netdev_features_t features);
};
# 1199 "include/linux/netdevice.h"
enum netdev_priv_flags {
IFF_802_1Q_VLAN = 1<<0,
IFF_EBRIDGE = 1<<1,
IFF_SLAVE_INACTIVE = 1<<2,
IFF_MASTER_8023AD = 1<<3,
IFF_MASTER_ALB = 1<<4,
IFF_BONDING = 1<<5,
IFF_SLAVE_NEEDARP = 1<<6,
IFF_ISATAP = 1<<7,
IFF_MASTER_ARPMON = 1<<8,
IFF_WAN_HDLC = 1<<9,
IFF_XMIT_DST_RELEASE = 1<<10,
IFF_DONT_BRIDGE = 1<<11,
IFF_DISABLE_NETPOLL = 1<<12,
IFF_MACVLAN_PORT = 1<<13,
IFF_BRIDGE_PORT = 1<<14,
IFF_OVS_DATAPATH = 1<<15,
IFF_TX_SKB_SHARING = 1<<16,
IFF_UNICAST_FLT = 1<<17,
IFF_TEAM_PORT = 1<<18,
IFF_SUPP_NOFCS = 1<<19,
IFF_LIVE_ADDR_CHANGE = 1<<20,
IFF_MACVLAN = 1<<21,
IFF_XMIT_DST_RELEASE_PERM = 1<<22,
IFF_RSMUX = 1<<23,
IFF_OSMUX = 1<<24,
};
# 1461 "include/linux/netdevice.h"
struct net_device {
char name[16];
struct hlist_node name_hlist;
char *ifalias;
unsigned long mem_end;
unsigned long mem_start;
unsigned long base_addr;
int irq;
unsigned long state;
struct list_head dev_list;
struct list_head napi_list;
struct list_head unreg_list;
struct list_head close_list;
struct {
struct list_head upper;
struct list_head lower;
} adj_list;
struct {
struct list_head upper;
struct list_head lower;
} all_adj_list;
netdev_features_t features;
netdev_features_t hw_features;
netdev_features_t wanted_features;
netdev_features_t vlan_features;
netdev_features_t hw_enc_features;
netdev_features_t mpls_features;
int ifindex;
int iflink;
struct net_device_stats stats;
atomic_long_t rx_dropped;
atomic_long_t tx_dropped;
atomic_t carrier_changes;
const struct iw_handler_def * wireless_handlers;
struct iw_public_data * wireless_data;
const struct net_device_ops *netdev_ops;
const struct ethtool_ops *ethtool_ops;
const struct forwarding_accel_ops *fwd_ops;
const struct header_ops *header_ops;
unsigned int flags;
unsigned int priv_flags;
unsigned short gflags;
unsigned short padded;
unsigned char operstate;
unsigned char link_mode;
unsigned char if_port;
unsigned char dma;
unsigned int mtu;
unsigned short type;
unsigned short hard_header_len;
unsigned short needed_headroom;
unsigned short needed_tailroom;
unsigned char perm_addr[32];
unsigned char addr_assign_type;
unsigned char addr_len;
unsigned short neigh_priv_len;
unsigned short dev_id;
unsigned short dev_port;
spinlock_t addr_list_lock;
struct netdev_hw_addr_list uc;
struct netdev_hw_addr_list mc;
struct netdev_hw_addr_list dev_addrs;
struct kset *queues_kset;
unsigned char name_assign_type;
bool uc_promisc;
unsigned int promiscuity;
unsigned int allmulti;
struct vlan_info *vlan_info;
void *atalk_ptr;
struct in_device *ip_ptr;
struct dn_dev *dn_ptr;
struct inet6_dev *ip6_ptr;
void *ax25_ptr;
struct wireless_dev *ieee80211_ptr;
unsigned long last_rx;
unsigned char *dev_addr;
struct netdev_rx_queue *_rx;
unsigned int num_rx_queues;
unsigned int real_num_rx_queues;
rx_handler_func_t *rx_handler;
void *rx_handler_data;
struct netdev_queue *ingress_queue;
unsigned char broadcast[32];
struct netdev_queue *_tx __attribute__((__aligned__((1 << 5))));
unsigned int num_tx_queues;
unsigned int real_num_tx_queues;
struct Qdisc *qdisc;
unsigned long tx_queue_len;
spinlock_t tx_global_lock;
struct xps_dev_maps *xps_maps;
struct cpu_rmap *rx_cpu_rmap;
# 1631 "include/linux/netdevice.h"
unsigned long trans_start;
int watchdog_timeo;
struct timer_list watchdog_timer;
int *pcpu_refcnt;
struct list_head todo_list;
struct hlist_node index_hlist;
struct list_head link_watch_list;
enum { NETREG_UNINITIALIZED=0,
NETREG_REGISTERED,
NETREG_UNREGISTERING,
NETREG_UNREGISTERED,
NETREG_RELEASED,
NETREG_DUMMY,
} reg_state:8;
bool dismantle;
enum {
RTNL_LINK_INITIALIZED,
RTNL_LINK_INITIALIZING,
} rtnl_link_state:16;
void (*destructor)(struct net_device *dev);
# 1668 "include/linux/netdevice.h"
union {
void *ml_priv;
struct pcpu_lstats *lstats;
struct pcpu_sw_netstats *tstats;
struct pcpu_dstats *dstats;
struct pcpu_vstats *vstats;
};
struct garp_port *garp_port;
struct mrp_port *mrp_port;
struct device dev;
const struct attribute_group *sysfs_groups[4];
const struct attribute_group *sysfs_rx_queue_group;
const struct rtnl_link_ops *rtnl_link_ops;
unsigned int gso_max_size;
u16 gso_max_segs;
u16 gso_min_segs;
u8 num_tc;
struct netdev_tc_txq tc_to_txq[16];
u8 prio_tc_map[15 + 1];
struct phy_device *phydev;
struct lock_class_key *qdisc_tx_busylock;
int group;
struct pm_qos_request pm_qos_req;
u8 vlan_mode;
u16 tci;
u16 multicast_tci;
u8 ipversion;
struct list_head ext_mvlan_list;
u32 bind_group[2];
int bind_index;
# 1738 "include/linux/netdevice.h"
u8 bind_type;
# 1749 "include/linux/netdevice.h"
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
int netdev_get_prio_tc_map(const struct net_device *dev, u32 prio)
{
return dev->prio_tc_map[prio & 15];
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
int netdev_set_prio_tc_map(struct net_device *dev, u8 prio, u8 tc)
{
if (tc >= dev->num_tc)
return -22;
dev->prio_tc_map[prio & 15] = tc & 15;
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
void netdev_reset_tc(struct net_device *dev)
{
dev->num_tc = 0;
memset(dev->tc_to_txq, 0, sizeof(dev->tc_to_txq));
memset(dev->prio_tc_map, 0, sizeof(dev->prio_tc_map));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
int netdev_set_tc_queue(struct net_device *dev, u8 tc, u16 count, u16 offset)
{
if (tc >= dev->num_tc)
return -22;
dev->tc_to_txq[tc].count = count;
dev->tc_to_txq[tc].offset = offset;
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
int netdev_set_num_tc(struct net_device *dev, u8 num_tc)
{
if (num_tc > 16)
return -22;
dev->num_tc = num_tc;
return 0;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
int netdev_get_num_tc(struct net_device *dev)
{
return dev->num_tc;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev,
unsigned int index)
{
return &dev->_tx[index];
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct netdev_queue *skb_get_tx_queue(const struct net_device *dev,
const struct sk_buff *skb)
{
return netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_for_each_tx_queue(struct net_device *dev,
void (*f)(struct net_device *,
struct netdev_queue *,
void *),
void *arg)
{
unsigned int i;
for (i = 0; i < dev->num_tx_queues; i++)
f(dev, &dev->_tx[i], arg);
}
struct netdev_queue *netdev_pick_tx(struct net_device *dev,
struct sk_buff *skb,
void *accel_priv);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
struct net *dev_net(const struct net_device *dev)
{
return (&init_net);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
void dev_net_set(struct net_device *dev, struct net *net)
{
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netdev_uses_dsa(struct net_device *dev)
{
return false;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *netdev_priv(const struct net_device *dev)
{
return (char *)dev + ((((sizeof(struct net_device))) + ((typeof((sizeof(struct net_device))))((32)) - 1)) & ~((typeof((sizeof(struct net_device))))((32)) - 1));
}
# 1898 "include/linux/netdevice.h"
void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
int (*poll)(struct napi_struct *, int), int weight);
void netif_napi_del(struct napi_struct *napi);
struct napi_gro_cb {
void *frag0;
unsigned int frag0_len;
int data_offset;
u16 flush;
u16 flush_id;
u16 count;
u8 same_flow;
u8 free;
unsigned long age;
u16 proto;
u8 udp_mark:1;
u8 csum_valid:1;
u8 csum_cnt:3;
u8 is_ipv6:1;
__wsum csum;
struct sk_buff *last;
};
struct packet_type {
__be16 type;
struct net_device *dev;
int (*func) (struct sk_buff *,
struct net_device *,
struct packet_type *,
struct net_device *);
bool (*id_match)(struct packet_type *ptype,
struct sock *sk);
void *af_packet_priv;
struct list_head list;
};
struct offload_callbacks {
struct sk_buff *(*gso_segment)(struct sk_buff *skb,
netdev_features_t features);
struct sk_buff **(*gro_receive)(struct sk_buff **head,
struct sk_buff *skb);
int (*gro_complete)(struct sk_buff *skb, int nhoff);
};
struct packet_offload {
__be16 type;
struct offload_callbacks callbacks;
struct list_head list;
};
struct udp_offload {
__be16 port;
u8 ipproto;
struct offload_callbacks callbacks;
};
struct pcpu_sw_netstats {
u64 rx_packets;
u64 rx_bytes;
u64 tx_packets;
u64 tx_bytes;
struct u64_stats_sync syncp;
};
# 2053 "include/linux/netdevice.h"
int register_netdevice_notifier(struct notifier_block *nb);
int unregister_netdevice_notifier(struct notifier_block *nb);
struct netdev_notifier_info {
struct net_device *dev;
};
struct netdev_notifier_change_info {
struct netdev_notifier_info info;
unsigned int flags_changed;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_notifier_info_init(struct netdev_notifier_info *info,
struct net_device *dev)
{
info->dev = dev;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct net_device *
netdev_notifier_info_to_dev(const struct netdev_notifier_info *info)
{
return info->dev;
}
int call_netdevice_notifiers(unsigned long val, struct net_device *dev);
extern rwlock_t dev_base_lock;
# 2099 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct net_device *next_net_device(struct net_device *dev)
{
struct list_head *lh;
struct net *net;
net = dev_net(dev);
lh = dev->dev_list.next;
return lh == &net->dev_base_head ? ((void *)0) : ({ const typeof( ((struct net_device *)0)->dev_list ) *__mptr = (lh); (struct net_device *)( (char *)__mptr - __builtin_offsetof(struct net_device,dev_list) );});
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct net_device *next_net_device_rcu(struct net_device *dev)
{
struct list_head *lh;
struct net *net;
net = dev_net(dev);
lh = ({ typeof(*((*((struct list_head **)(&(&dev->dev_list)->next))))) *_________p1 = (typeof(*((*((struct list_head **)(&(&dev->dev_list)->next))))) *)(*(volatile typeof(((*((struct list_head **)(&(&dev->dev_list)->next))))) *)&(((*((struct list_head **)(&(&dev->dev_list)->next)))))); do { } while (0); ; do { } while(0); ((typeof(*((*((struct list_head **)(&(&dev->dev_list)->next))))) *)(_________p1)); });
return lh == &net->dev_base_head ? ((void *)0) : ({ const typeof( ((struct net_device *)0)->dev_list ) *__mptr = (lh); (struct net_device *)( (char *)__mptr - __builtin_offsetof(struct net_device,dev_list) );});
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct net_device *first_net_device(struct net *net)
{
return list_empty(&net->dev_base_head) ? ((void *)0) :
({ const typeof( ((struct net_device *)0)->dev_list ) *__mptr = (net->dev_base_head.next); (struct net_device *)( (char *)__mptr - __builtin_offsetof(struct net_device,dev_list) );});
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) struct net_device *first_net_device_rcu(struct net *net)
{
struct list_head *lh = ({ typeof(*((*((struct list_head **)(&(&net->dev_base_head)->next))))) *_________p1 = (typeof(*((*((struct list_head **)(&(&net->dev_base_head)->next))))) *)(*(volatile typeof(((*((struct list_head **)(&(&net->dev_base_head)->next))))) *)&(((*((struct list_head **)(&(&net->dev_base_head)->next)))))); do { } while (0); ; do { } while(0); ((typeof(*((*((struct list_head **)(&(&net->dev_base_head)->next))))) *)(_________p1)); });
return lh == &net->dev_base_head ? ((void *)0) : ({ const typeof( ((struct net_device *)0)->dev_list ) *__mptr = (lh); (struct net_device *)( (char *)__mptr - __builtin_offsetof(struct net_device,dev_list) );});
}
int netdev_boot_setup_check(struct net_device *dev);
unsigned long netdev_boot_base(const char *prefix, int unit);
struct net_device *dev_getbyhwaddr_rcu(struct net *net, unsigned short type,
const char *hwaddr);
struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type);
struct net_device *__dev_getfirstbyhwtype(struct net *net, unsigned short type);
void dev_add_pack(struct packet_type *pt);
void dev_remove_pack(struct packet_type *pt);
void __dev_remove_pack(struct packet_type *pt);
void dev_add_offload(struct packet_offload *po);
void dev_remove_offload(struct packet_offload *po);
struct net_device *__dev_get_by_flags(struct net *net, unsigned short flags,
unsigned short mask);
struct net_device *dev_get_by_name(struct net *net, const char *name);
struct net_device *dev_get_by_name_rcu(struct net *net, const char *name);
struct net_device *__dev_get_by_name(struct net *net, const char *name);
int dev_alloc_name(struct net_device *dev, const char *name);
int dev_open(struct net_device *dev);
int dev_close(struct net_device *dev);
void dev_disable_lro(struct net_device *dev);
int dev_loopback_xmit(struct sk_buff *newskb);
int dev_queue_xmit(struct sk_buff *skb);
int dev_queue_xmit_accel(struct sk_buff *skb, void *accel_priv);
int register_netdevice(struct net_device *dev);
void unregister_netdevice_queue(struct net_device *dev, struct list_head *head);
void unregister_netdevice_many(struct list_head *head);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void unregister_netdevice(struct net_device *dev)
{
unregister_netdevice_queue(dev, ((void *)0));
}
int netdev_refcnt_read(const struct net_device *dev);
void free_netdev(struct net_device *dev);
void netdev_freemem(struct net_device *dev);
void synchronize_net(void);
int init_dummy_netdev(struct net_device *dev);
extern __attribute__((section(".data..percpu" ""))) __typeof__(int) xmit_recursion;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_recursion_level(void)
{
return ({ typeof(xmit_recursion) pscr_ret__; do { const void *__vpp_verify = (typeof((&(xmit_recursion)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(xmit_recursion)) { case 1: pscr_ret__ = ({ typeof(xmit_recursion) __ret; __asm__ __volatile__("": : :"memory"); __ret = *({ do { const void *__vpp_verify = (typeof((&(xmit_recursion)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(xmit_recursion))) *)(&(xmit_recursion)))); (typeof((typeof(*(&(xmit_recursion))) *)(&(xmit_recursion)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }); __asm__ __volatile__("": : :"memory"); __ret; }); break; case 2: pscr_ret__ = ({ typeof(xmit_recursion) __ret; __asm__ __volatile__("": : :"memory"); __ret = *({ do { const void *__vpp_verify = (typeof((&(xmit_recursion)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(xmit_recursion))) *)(&(xmit_recursion)))); (typeof((typeof(*(&(xmit_recursion))) *)(&(xmit_recursion)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }); __asm__ __volatile__("": : :"memory"); __ret; }); break; case 4: pscr_ret__ = ({ typeof(xmit_recursion) __ret; __asm__ __volatile__("": : :"memory"); __ret = *({ do { const void *__vpp_verify = (typeof((&(xmit_recursion)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(xmit_recursion))) *)(&(xmit_recursion)))); (typeof((typeof(*(&(xmit_recursion))) *)(&(xmit_recursion)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }); __asm__ __volatile__("": : :"memory"); __ret; }); break; case 8: pscr_ret__ = ({ typeof(xmit_recursion) __ret; __asm__ __volatile__("": : :"memory"); __ret = *({ do { const void *__vpp_verify = (typeof((&(xmit_recursion)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(xmit_recursion))) *)(&(xmit_recursion)))); (typeof((typeof(*(&(xmit_recursion))) *)(&(xmit_recursion)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }); __asm__ __volatile__("": : :"memory"); __ret; }); break; default: __bad_size_call_parameter(); break; } pscr_ret__; });
}
struct net_device *dev_get_by_index(struct net *net, int ifindex);
struct net_device *__dev_get_by_index(struct net *net, int ifindex);
struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex);
int netdev_get_name(struct net *net, char *name, int ifindex);
int dev_restart(struct net_device *dev);
int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int skb_gro_offset(const struct sk_buff *skb)
{
return ((struct napi_gro_cb *)(skb)->cb)->data_offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int skb_gro_len(const struct sk_buff *skb)
{
return skb->len - ((struct napi_gro_cb *)(skb)->cb)->data_offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_gro_pull(struct sk_buff *skb, unsigned int len)
{
((struct napi_gro_cb *)(skb)->cb)->data_offset += len;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *skb_gro_header_fast(struct sk_buff *skb,
unsigned int offset)
{
return ((struct napi_gro_cb *)(skb)->cb)->frag0 + offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int skb_gro_header_hard(struct sk_buff *skb, unsigned int hlen)
{
return ((struct napi_gro_cb *)(skb)->cb)->frag0_len < hlen;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *skb_gro_header_slow(struct sk_buff *skb, unsigned int hlen,
unsigned int offset)
{
if (!pskb_may_pull(skb, hlen))
return ((void *)0);
((struct napi_gro_cb *)(skb)->cb)->frag0 = ((void *)0);
((struct napi_gro_cb *)(skb)->cb)->frag0_len = 0;
return skb->data + offset;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void *skb_gro_network_header(struct sk_buff *skb)
{
return (((struct napi_gro_cb *)(skb)->cb)->frag0 ?: skb->data) +
skb_network_offset(skb);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_gro_postpull_rcsum(struct sk_buff *skb,
const void *start, unsigned int len)
{
if (((struct napi_gro_cb *)(skb)->cb)->csum_valid)
((struct napi_gro_cb *)(skb)->cb)->csum = csum_sub(((struct napi_gro_cb *)(skb)->cb)->csum,
csum_partial(start, len, 0));
}
__sum16 __skb_gro_checksum_complete(struct sk_buff *skb);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __skb_gro_checksum_validate_needed(struct sk_buff *skb,
bool zero_okay,
__sum16 check)
{
return (skb->ip_summed != 3 &&
((struct napi_gro_cb *)(skb)->cb)->csum_cnt == 0 &&
(!zero_okay || check));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) __sum16 __skb_gro_checksum_validate_complete(struct sk_buff *skb,
__wsum psum)
{
if (((struct napi_gro_cb *)(skb)->cb)->csum_valid &&
!csum_fold(csum_add(psum, ((struct napi_gro_cb *)(skb)->cb)->csum)))
return 0;
((struct napi_gro_cb *)(skb)->cb)->csum = psum;
return __skb_gro_checksum_complete(skb);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_gro_incr_csum_unnecessary(struct sk_buff *skb)
{
if (((struct napi_gro_cb *)(skb)->cb)->csum_cnt > 0) {
((struct napi_gro_cb *)(skb)->cb)->csum_cnt--;
} else {
__skb_incr_checksum_unnecessary(skb);
}
}
# 2300 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __skb_gro_checksum_convert_check(struct sk_buff *skb)
{
return (((struct napi_gro_cb *)(skb)->cb)->csum_cnt == 0 &&
!((struct napi_gro_cb *)(skb)->cb)->csum_valid);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __skb_gro_checksum_convert(struct sk_buff *skb,
__sum16 check, __wsum pseudo)
{
((struct napi_gro_cb *)(skb)->cb)->csum = ~pseudo;
((struct napi_gro_cb *)(skb)->cb)->csum_valid = 1;
}
# 2320 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_hard_header(struct sk_buff *skb, struct net_device *dev,
unsigned short type,
const void *daddr, const void *saddr,
unsigned int len)
{
if (!dev->header_ops || !dev->header_ops->create)
return 0;
return dev->header_ops->create(skb, dev, type, daddr, saddr, len);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_parse_header(const struct sk_buff *skb,
unsigned char *haddr)
{
const struct net_device *dev = skb->dev;
if (!dev->header_ops || !dev->header_ops->parse)
return 0;
return dev->header_ops->parse(skb, haddr);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int dev_rebuild_header(struct sk_buff *skb)
{
const struct net_device *dev = skb->dev;
if (!dev->header_ops || !dev->header_ops->rebuild)
return 0;
return dev->header_ops->rebuild(skb);
}
typedef int gifconf_func_t(struct net_device * dev, char * bufptr, int len);
int register_gifconf(unsigned int family, gifconf_func_t *gifconf);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int unregister_gifconf(unsigned int family)
{
return register_gifconf(family, ((void *)0));
}
struct sd_flow_limit {
u64 count;
unsigned int num_buckets;
unsigned int history_head;
u16 history[(1 << 7)];
u8 buckets[];
};
extern int netdev_flow_limit_table_len;
struct softnet_data {
struct Qdisc *output_queue;
struct Qdisc **output_queue_tailp;
struct list_head poll_list;
struct sk_buff *completion_queue;
struct sk_buff_head process_queue;
unsigned int processed;
unsigned int time_squeeze;
unsigned int cpu_collision;
unsigned int received_rps;
struct softnet_data *rps_ipi_list;
struct call_single_data csd __attribute__((__aligned__((1 << 5))));
struct softnet_data *rps_ipi_next;
unsigned int cpu;
unsigned int input_queue_head;
unsigned int input_queue_tail;
unsigned int dropped;
struct sk_buff_head input_pkt_queue;
struct napi_struct backlog;
struct sd_flow_limit *flow_limit;
};
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void input_queue_head_incr(struct softnet_data *sd)
{
sd->input_queue_head++;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void input_queue_tail_incr_save(struct softnet_data *sd,
unsigned int *qtail)
{
*qtail = ++sd->input_queue_tail;
}
extern __attribute__((section(".data..percpu" ""))) __typeof__(struct softnet_data) softnet_data __attribute__((__aligned__((1 << 5))));
void __netif_schedule(struct Qdisc *q);
void netif_schedule_queue(struct netdev_queue *txq);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_schedule_all(struct net_device *dev)
{
unsigned int i;
for (i = 0; i < dev->num_tx_queues; i++)
netif_schedule_queue(netdev_get_tx_queue(dev, i));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_start_queue(struct netdev_queue *dev_queue)
{
clear_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_start_queue(struct net_device *dev)
{
netif_tx_start_queue(netdev_get_tx_queue(dev, 0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_start_all_queues(struct net_device *dev)
{
unsigned int i;
for (i = 0; i < dev->num_tx_queues; i++) {
struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
netif_tx_start_queue(txq);
}
}
void netif_tx_wake_queue(struct netdev_queue *dev_queue);
# 2468 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_wake_queue(struct net_device *dev)
{
netif_tx_wake_queue(netdev_get_tx_queue(dev, 0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_wake_all_queues(struct net_device *dev)
{
unsigned int i;
for (i = 0; i < dev->num_tx_queues; i++) {
struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
netif_tx_wake_queue(txq);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_stop_queue(struct netdev_queue *dev_queue)
{
if (({ int __ret_warn_on = !!(!dev_queue); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("include/linux/netdevice.h", 2485); __builtin_expect(!!(__ret_warn_on), 0); })) {
printk("\001" "6" "netif_stop_queue() cannot be called before register_netdev()\n");
return;
}
set_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state);
}
# 2499 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_stop_queue(struct net_device *dev)
{
netif_tx_stop_queue(netdev_get_tx_queue(dev, 0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_stop_all_queues(struct net_device *dev)
{
unsigned int i;
for (i = 0; i < dev->num_tx_queues; i++) {
struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
netif_tx_stop_queue(txq);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_tx_queue_stopped(const struct netdev_queue *dev_queue)
{
return test_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_queue_stopped(const struct net_device *dev)
{
return netif_tx_queue_stopped(netdev_get_tx_queue(dev, 0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_xmit_stopped(const struct netdev_queue *dev_queue)
{
return dev_queue->state & ((1 << __QUEUE_STATE_DRV_XOFF) | (1 << __QUEUE_STATE_STACK_XOFF));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool
netif_xmit_frozen_or_stopped(const struct netdev_queue *dev_queue)
{
return dev_queue->state & (((1 << __QUEUE_STATE_DRV_XOFF) | (1 << __QUEUE_STATE_STACK_XOFF)) | (1 << __QUEUE_STATE_FROZEN));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool
netif_xmit_frozen_or_drv_stopped(const struct netdev_queue *dev_queue)
{
return dev_queue->state & ((1 << __QUEUE_STATE_DRV_XOFF) | (1 << __QUEUE_STATE_FROZEN));
}
# 2554 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_txq_bql_enqueue_prefetchw(struct netdev_queue *dev_queue)
{
__builtin_prefetch((&dev_queue->dql.num_queued), 1, 1);
}
# 2568 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_txq_bql_complete_prefetchw(struct netdev_queue *dev_queue)
{
__builtin_prefetch((&dev_queue->dql.limit), 1, 1);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_tx_sent_queue(struct netdev_queue *dev_queue,
unsigned int bytes)
{
dql_queued(&dev_queue->dql, bytes);
if (__builtin_expect(!!(dql_avail(&dev_queue->dql) >= 0), 1))
return;
set_bit(__QUEUE_STATE_STACK_XOFF, &dev_queue->state);
__asm__ __volatile__("": : :"memory");
if (__builtin_expect(!!(dql_avail(&dev_queue->dql) >= 0), 0))
clear_bit(__QUEUE_STATE_STACK_XOFF, &dev_queue->state);
}
# 2608 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_sent_queue(struct net_device *dev, unsigned int bytes)
{
netdev_tx_sent_queue(netdev_get_tx_queue(dev, 0), bytes);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_tx_completed_queue(struct netdev_queue *dev_queue,
unsigned int pkts, unsigned int bytes)
{
if (__builtin_expect(!!(!bytes), 0))
return;
dql_completed(&dev_queue->dql, bytes);
__asm__ __volatile__("": : :"memory");
if (dql_avail(&dev_queue->dql) < 0)
return;
if (test_and_clear_bit(__QUEUE_STATE_STACK_XOFF, &dev_queue->state))
netif_schedule_queue(dev_queue);
}
# 2647 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_completed_queue(struct net_device *dev,
unsigned int pkts, unsigned int bytes)
{
netdev_tx_completed_queue(netdev_get_tx_queue(dev, 0), pkts, bytes);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_tx_reset_queue(struct netdev_queue *q)
{
clear_bit(__QUEUE_STATE_STACK_XOFF, &q->state);
dql_reset(&q->dql);
}
# 2668 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_reset_queue(struct net_device *dev_queue)
{
netdev_tx_reset_queue(netdev_get_tx_queue(dev_queue, 0));
}
# 2681 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 netdev_cap_txqueue(struct net_device *dev, u16 queue_index)
{
if (__builtin_expect(!!(queue_index >= dev->real_num_tx_queues), 0)) {
do { if (net_ratelimit()) printk("\001" "4" "%s selects TX queue %d, but real number of TX queues is %d\n", dev->name, queue_index, dev->real_num_tx_queues); } while (0)
;
return 0;
}
return queue_index;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_running(const struct net_device *dev)
{
return test_bit(__LINK_STATE_START, &dev->state);
}
# 2718 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_start_subqueue(struct net_device *dev, u16 queue_index)
{
struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index);
netif_tx_start_queue(txq);
}
# 2732 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_stop_subqueue(struct net_device *dev, u16 queue_index)
{
struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index);
netif_tx_stop_queue(txq);
}
# 2745 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __netif_subqueue_stopped(const struct net_device *dev,
u16 queue_index)
{
struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index);
return netif_tx_queue_stopped(txq);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_subqueue_stopped(const struct net_device *dev,
struct sk_buff *skb)
{
return __netif_subqueue_stopped(dev, skb_get_queue_mapping(skb));
}
void netif_wake_subqueue(struct net_device *dev, u16 queue_index);
int netif_set_xps_queue(struct net_device *dev, const struct cpumask *mask,
u16 index);
# 2777 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u16 skb_tx_hash(const struct net_device *dev,
struct sk_buff *skb)
{
return __skb_tx_hash(dev, skb, dev->real_num_tx_queues);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_is_multiqueue(const struct net_device *dev)
{
return dev->num_tx_queues > 1;
}
int netif_set_real_num_tx_queues(struct net_device *dev, unsigned int txq);
int netif_set_real_num_rx_queues(struct net_device *dev, unsigned int rxq);
# 2806 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int netif_copy_real_num_queues(struct net_device *to_dev,
const struct net_device *from_dev)
{
int err;
err = netif_set_real_num_tx_queues(to_dev,
from_dev->real_num_tx_queues);
if (err)
return err;
return netif_set_real_num_rx_queues(to_dev,
from_dev->real_num_rx_queues);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) unsigned int get_netdev_rx_queue_index(
struct netdev_rx_queue *queue)
{
struct net_device *dev = queue->dev;
int index = queue - dev->_rx;
__BUG_ON((unsigned long)(index >= dev->num_rx_queues));
return index;
}
int netif_get_num_default_rss_queues(void);
enum skb_free_reason {
SKB_REASON_CONSUMED,
SKB_REASON_DROPPED,
};
void __dev_kfree_skb_irq(struct sk_buff *skb, enum skb_free_reason reason);
void __dev_kfree_skb_any(struct sk_buff *skb, enum skb_free_reason reason);
# 2865 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_kfree_skb_irq(struct sk_buff *skb)
{
__dev_kfree_skb_irq(skb, SKB_REASON_DROPPED);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_consume_skb_irq(struct sk_buff *skb)
{
__dev_kfree_skb_irq(skb, SKB_REASON_CONSUMED);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_kfree_skb_any(struct sk_buff *skb)
{
__dev_kfree_skb_any(skb, SKB_REASON_DROPPED);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_consume_skb_any(struct sk_buff *skb)
{
__dev_kfree_skb_any(skb, SKB_REASON_CONSUMED);
}
int netif_rx(struct sk_buff *skb);
int netif_rx_ni(struct sk_buff *skb);
int netif_receive_skb(struct sk_buff *skb);
gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb);
void napi_gro_flush(struct napi_struct *napi, bool flush_old);
struct sk_buff *napi_get_frags(struct napi_struct *napi);
gro_result_t napi_gro_frags(struct napi_struct *napi);
struct packet_offload *gro_find_receive_by_type(__be16 type);
struct packet_offload *gro_find_complete_by_type(__be16 type);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void napi_free_frags(struct napi_struct *napi)
{
kfree_skb(napi->skb);
napi->skb = ((void *)0);
}
int netdev_rx_handler_register(struct net_device *dev,
rx_handler_func_t *rx_handler,
void *rx_handler_data);
void netdev_rx_handler_unregister(struct net_device *dev);
bool dev_valid_name(const char *name);
int dev_ioctl(struct net *net, unsigned int cmd, void *);
int dev_ethtool(struct net *net, struct ifreq *);
unsigned int dev_get_flags(const struct net_device *);
int __dev_change_flags(struct net_device *, unsigned int flags);
int dev_change_flags(struct net_device *, unsigned int);
void __dev_notify_flags(struct net_device *, unsigned int old_flags,
unsigned int gchanges);
int dev_change_name(struct net_device *, const char *);
int dev_set_alias(struct net_device *, const char *, size_t);
int dev_change_net_namespace(struct net_device *, struct net *, const char *);
int dev_set_mtu(struct net_device *, int);
void dev_set_group(struct net_device *, int);
int dev_set_mac_address(struct net_device *, struct sockaddr *);
int dev_change_carrier(struct net_device *, bool new_carrier);
int dev_get_phys_port_id(struct net_device *dev,
struct netdev_phys_port_id *ppid);
struct sk_buff *validate_xmit_skb_list(struct sk_buff *skb, struct net_device *dev);
struct sk_buff *dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
struct netdev_queue *txq, int *ret);
int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb);
int dev_forward_skb(struct net_device *dev, struct sk_buff *skb);
bool is_skb_forwardable(struct net_device *dev, struct sk_buff *skb);
extern int netdev_budget;
void netdev_run_todo(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_put(struct net_device *dev)
{
do { do { const void *__vpp_verify = (typeof((&(*dev->pcpu_refcnt)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(*dev->pcpu_refcnt)) { case 1: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*dev->pcpu_refcnt)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))); (typeof((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += -(typeof(*dev->pcpu_refcnt))(1); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 2: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*dev->pcpu_refcnt)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))); (typeof((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += -(typeof(*dev->pcpu_refcnt))(1); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 4: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*dev->pcpu_refcnt)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))); (typeof((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += -(typeof(*dev->pcpu_refcnt))(1); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 8: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*dev->pcpu_refcnt)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))); (typeof((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += -(typeof(*dev->pcpu_refcnt))(1); do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void dev_hold(struct net_device *dev)
{
do { do { const void *__vpp_verify = (typeof((&(*dev->pcpu_refcnt)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(*dev->pcpu_refcnt)) { case 1: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*dev->pcpu_refcnt)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))); (typeof((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 2: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*dev->pcpu_refcnt)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))); (typeof((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 4: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*dev->pcpu_refcnt)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))); (typeof((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; case 8: do { unsigned long __flags; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); __flags = arch_local_irq_save(); } while (0); *({ do { const void *__vpp_verify = (typeof((&(*dev->pcpu_refcnt)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))); (typeof((typeof(*(&(*dev->pcpu_refcnt))) *)(&(*dev->pcpu_refcnt)))) (__ptr + (((__per_cpu_offset[(current_thread_info()->cpu)])))); }); }) += 1; do { ({ unsigned long __dummy; typeof(__flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(__flags); } while (0); } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
}
# 2966 "include/linux/netdevice.h"
void linkwatch_init_dev(struct net_device *dev);
void linkwatch_fire_event(struct net_device *dev);
void linkwatch_forget_dev(struct net_device *dev);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_carrier_ok(const struct net_device *dev)
{
return !test_bit(__LINK_STATE_NOCARRIER, &dev->state);
}
unsigned long dev_trans_start(struct net_device *dev);
void __netdev_watchdog_up(struct net_device *dev);
void netif_carrier_on(struct net_device *dev);
void netif_carrier_off(struct net_device *dev);
# 3002 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_dormant_on(struct net_device *dev)
{
if (!test_and_set_bit(__LINK_STATE_DORMANT, &dev->state))
linkwatch_fire_event(dev);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_dormant_off(struct net_device *dev)
{
if (test_and_clear_bit(__LINK_STATE_DORMANT, &dev->state))
linkwatch_fire_event(dev);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_dormant(const struct net_device *dev)
{
return test_bit(__LINK_STATE_DORMANT, &dev->state);
}
# 3038 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_oper_up(const struct net_device *dev)
{
return (dev->operstate == IF_OPER_UP ||
dev->operstate == IF_OPER_UNKNOWN );
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_device_present(struct net_device *dev)
{
return test_bit(__LINK_STATE_PRESENT, &dev->state);
}
void netif_device_detach(struct net_device *dev);
void netif_device_attach(struct net_device *dev);
enum {
NETIF_MSG_DRV = 0x0001,
NETIF_MSG_PROBE = 0x0002,
NETIF_MSG_LINK = 0x0004,
NETIF_MSG_TIMER = 0x0008,
NETIF_MSG_IFDOWN = 0x0010,
NETIF_MSG_IFUP = 0x0020,
NETIF_MSG_RX_ERR = 0x0040,
NETIF_MSG_TX_ERR = 0x0080,
NETIF_MSG_TX_QUEUED = 0x0100,
NETIF_MSG_INTR = 0x0200,
NETIF_MSG_TX_DONE = 0x0400,
NETIF_MSG_RX_STATUS = 0x0800,
NETIF_MSG_PKTDATA = 0x1000,
NETIF_MSG_HW = 0x2000,
NETIF_MSG_WOL = 0x4000,
};
# 3097 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) u32 netif_msg_init(int debug_value, int default_msg_enable_bits)
{
if (debug_value < 0 || debug_value >= (sizeof(u32) * 8))
return default_msg_enable_bits;
if (debug_value == 0)
return 0;
return (1 << debug_value) - 1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __netif_tx_lock(struct netdev_queue *txq, int cpu)
{
spin_lock(&txq->_xmit_lock);
txq->xmit_lock_owner = cpu;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __netif_tx_lock_bh(struct netdev_queue *txq)
{
spin_lock_bh(&txq->_xmit_lock);
txq->xmit_lock_owner = (current_thread_info()->cpu);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool __netif_tx_trylock(struct netdev_queue *txq)
{
bool ok = spin_trylock(&txq->_xmit_lock);
if (__builtin_expect(!!(ok), 1))
txq->xmit_lock_owner = (current_thread_info()->cpu);
return ok;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __netif_tx_unlock(struct netdev_queue *txq)
{
txq->xmit_lock_owner = -1;
spin_unlock(&txq->_xmit_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __netif_tx_unlock_bh(struct netdev_queue *txq)
{
txq->xmit_lock_owner = -1;
spin_unlock_bh(&txq->_xmit_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void txq_trans_update(struct netdev_queue *txq)
{
if (txq->xmit_lock_owner != -1)
txq->trans_start = jiffies;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_lock(struct net_device *dev)
{
unsigned int i;
int cpu;
spin_lock(&dev->tx_global_lock);
cpu = (current_thread_info()->cpu);
for (i = 0; i < dev->num_tx_queues; i++) {
struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
__netif_tx_lock(txq, cpu);
set_bit(__QUEUE_STATE_FROZEN, &txq->state);
__netif_tx_unlock(txq);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_lock_bh(struct net_device *dev)
{
local_bh_disable();
netif_tx_lock(dev);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_unlock(struct net_device *dev)
{
unsigned int i;
for (i = 0; i < dev->num_tx_queues; i++) {
struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
clear_bit(__QUEUE_STATE_FROZEN, &txq->state);
netif_schedule_queue(txq);
}
spin_unlock(&dev->tx_global_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_unlock_bh(struct net_device *dev)
{
netif_tx_unlock(dev);
local_bh_enable();
}
# 3220 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_tx_disable(struct net_device *dev)
{
unsigned int i;
int cpu;
local_bh_disable();
cpu = (current_thread_info()->cpu);
for (i = 0; i < dev->num_tx_queues; i++) {
struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
__netif_tx_lock(txq, cpu);
netif_tx_stop_queue(txq);
__netif_tx_unlock(txq);
}
local_bh_enable();
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_addr_lock(struct net_device *dev)
{
spin_lock(&dev->addr_list_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_addr_lock_nested(struct net_device *dev)
{
int subclass = 1;
if (dev->netdev_ops->ndo_get_lock_subclass)
subclass = dev->netdev_ops->ndo_get_lock_subclass(dev);
do { _raw_spin_lock(((void)(subclass), (spinlock_check(&dev->addr_list_lock)))); } while (0);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_addr_lock_bh(struct net_device *dev)
{
spin_lock_bh(&dev->addr_list_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_addr_unlock(struct net_device *dev)
{
spin_unlock(&dev->addr_list_lock);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_addr_unlock_bh(struct net_device *dev)
{
spin_unlock_bh(&dev->addr_list_lock);
}
# 3276 "include/linux/netdevice.h"
void ether_setup(struct net_device *dev);
struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
unsigned char name_assign_type,
void (*setup)(struct net_device *),
unsigned int txqs, unsigned int rxqs);
int register_netdev(struct net_device *dev);
void unregister_netdev(struct net_device *dev);
int __hw_addr_sync(struct netdev_hw_addr_list *to_list,
struct netdev_hw_addr_list *from_list, int addr_len);
void __hw_addr_unsync(struct netdev_hw_addr_list *to_list,
struct netdev_hw_addr_list *from_list, int addr_len);
int __hw_addr_sync_dev(struct netdev_hw_addr_list *list,
struct net_device *dev,
int (*sync)(struct net_device *, const unsigned char *),
int (*unsync)(struct net_device *,
const unsigned char *));
void __hw_addr_unsync_dev(struct netdev_hw_addr_list *list,
struct net_device *dev,
int (*unsync)(struct net_device *,
const unsigned char *));
void __hw_addr_init(struct netdev_hw_addr_list *list);
int dev_addr_add(struct net_device *dev, const unsigned char *addr,
unsigned char addr_type);
int dev_addr_del(struct net_device *dev, const unsigned char *addr,
unsigned char addr_type);
void dev_addr_flush(struct net_device *dev);
int dev_addr_init(struct net_device *dev);
int dev_uc_add(struct net_device *dev, const unsigned char *addr);
int dev_uc_add_excl(struct net_device *dev, const unsigned char *addr);
int dev_uc_del(struct net_device *dev, const unsigned char *addr);
int dev_uc_sync(struct net_device *to, struct net_device *from);
int dev_uc_sync_multiple(struct net_device *to, struct net_device *from);
void dev_uc_unsync(struct net_device *to, struct net_device *from);
void dev_uc_flush(struct net_device *dev);
void dev_uc_init(struct net_device *dev);
# 3336 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __dev_uc_sync(struct net_device *dev,
int (*sync)(struct net_device *,
const unsigned char *),
int (*unsync)(struct net_device *,
const unsigned char *))
{
return __hw_addr_sync_dev(&dev->uc, dev, sync, unsync);
}
# 3352 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __dev_uc_unsync(struct net_device *dev,
int (*unsync)(struct net_device *,
const unsigned char *))
{
__hw_addr_unsync_dev(&dev->uc, dev, unsync);
}
int dev_mc_add(struct net_device *dev, const unsigned char *addr);
int dev_mc_add_global(struct net_device *dev, const unsigned char *addr);
int dev_mc_add_excl(struct net_device *dev, const unsigned char *addr);
int dev_mc_del(struct net_device *dev, const unsigned char *addr);
int dev_mc_del_global(struct net_device *dev, const unsigned char *addr);
int dev_mc_sync(struct net_device *to, struct net_device *from);
int dev_mc_sync_multiple(struct net_device *to, struct net_device *from);
void dev_mc_unsync(struct net_device *to, struct net_device *from);
void dev_mc_flush(struct net_device *dev);
void dev_mc_init(struct net_device *dev);
# 3380 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int __dev_mc_sync(struct net_device *dev,
int (*sync)(struct net_device *,
const unsigned char *),
int (*unsync)(struct net_device *,
const unsigned char *))
{
return __hw_addr_sync_dev(&dev->mc, dev, sync, unsync);
}
# 3396 "include/linux/netdevice.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void __dev_mc_unsync(struct net_device *dev,
int (*unsync)(struct net_device *,
const unsigned char *))
{
__hw_addr_unsync_dev(&dev->mc, dev, unsync);
}
void dev_set_rx_mode(struct net_device *dev);
void __dev_set_rx_mode(struct net_device *dev);
int dev_set_promiscuity(struct net_device *dev, int inc);
int dev_set_allmulti(struct net_device *dev, int inc);
void netdev_state_change(struct net_device *dev);
void netdev_notify_peers(struct net_device *dev);
void netdev_features_change(struct net_device *dev);
void dev_load(struct net *net, const char *name);
struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
struct rtnl_link_stats64 *storage);
void netdev_stats_to_stats64(struct rtnl_link_stats64 *stats64,
const struct net_device_stats *netdev_stats);
extern int netdev_max_backlog;
extern int netdev_tstamp_prequeue;
extern int weight_p;
extern int bpf_jit_enable;
bool netdev_has_upper_dev(struct net_device *dev, struct net_device *upper_dev);
struct net_device *netdev_upper_get_next_dev_rcu(struct net_device *dev,
struct list_head **iter);
struct net_device *netdev_all_upper_get_next_dev_rcu(struct net_device *dev,
struct list_head **iter);
# 3443 "include/linux/netdevice.h"
void *netdev_lower_get_next_private(struct net_device *dev,
struct list_head **iter);
void *netdev_lower_get_next_private_rcu(struct net_device *dev,
struct list_head **iter);
# 3460 "include/linux/netdevice.h"
void *netdev_lower_get_next(struct net_device *dev,
struct list_head **iter);
void *netdev_adjacent_get_private(struct list_head *adj_list);
void *netdev_lower_get_first_private_rcu(struct net_device *dev);
struct net_device *netdev_master_upper_dev_get(struct net_device *dev);
struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev);
int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev);
int netdev_master_upper_dev_link(struct net_device *dev,
struct net_device *upper_dev);
int netdev_master_upper_dev_link_private(struct net_device *dev,
struct net_device *upper_dev,
void *private);
void netdev_upper_dev_unlink(struct net_device *dev,
struct net_device *upper_dev);
void netdev_adjacent_rename_links(struct net_device *dev, char *oldname);
void *netdev_lower_dev_get_private(struct net_device *dev,
struct net_device *lower_dev);
int dev_get_nest_level(struct net_device *dev,
bool (*type_check)(struct net_device *dev));
int skb_checksum_help(struct sk_buff *skb);
struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
netdev_features_t features, bool tx_path);
struct sk_buff *skb_mac_gso_segment(struct sk_buff *skb,
netdev_features_t features);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function))
struct sk_buff *skb_gso_segment(struct sk_buff *skb, netdev_features_t features)
{
return __skb_gso_segment(skb, features, true);
}
__be16 skb_network_protocol(struct sk_buff *skb, int *depth);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool can_checksum_protocol(netdev_features_t features,
__be16 protocol)
{
return ((features & ((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT))) ||
((features & (((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)) | ((netdev_features_t)1 << (NETIF_F_IP_CSUM_BIT)))) &&
protocol == (( __be16)(__u16)(0x0800))) ||
((features & (((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)) | ((netdev_features_t)1 << (NETIF_F_IPV6_CSUM_BIT)))) &&
protocol == (( __be16)(__u16)(0x86DD))) ||
((features & ((netdev_features_t)1 << (NETIF_F_FCOE_CRC_BIT))) &&
protocol == (( __be16)(__u16)(0x8906))));
}
void netdev_rx_csum_fault(struct net_device *dev);
void net_enable_timestamp(void);
void net_disable_timestamp(void);
int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) dev_proc_init(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) netdev_tx_t __netdev_start_xmit(const struct net_device_ops *ops,
struct sk_buff *skb, struct net_device *dev,
bool more)
{
skb->xmit_more = more ? 1 : 0;
return ops->ndo_start_xmit(skb, dev);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) netdev_tx_t netdev_start_xmit(struct sk_buff *skb, struct net_device *dev,
struct netdev_queue *txq, bool more)
{
const struct net_device_ops *ops = dev->netdev_ops;
int rc;
rc = __netdev_start_xmit(ops, skb, dev, more);
if (rc == NETDEV_TX_OK)
txq_trans_update(txq);
return rc;
}
int netdev_class_create_file_ns(struct class_attribute *class_attr,
const void *ns);
void netdev_class_remove_file_ns(struct class_attribute *class_attr,
const void *ns);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int netdev_class_create_file(struct class_attribute *class_attr)
{
return netdev_class_create_file_ns(class_attr, ((void *)0));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netdev_class_remove_file(struct class_attribute *class_attr)
{
netdev_class_remove_file_ns(class_attr, ((void *)0));
}
extern struct kobj_ns_type_operations net_ns_type_operations;
const char *netdev_drivername(const struct net_device *dev);
void linkwatch_run_queue(void);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) netdev_features_t netdev_intersect_features(netdev_features_t f1,
netdev_features_t f2)
{
if (f1 & ((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)))
f1 |= (((((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)) | ((netdev_features_t)1 << (NETIF_F_IP_CSUM_BIT))) | (((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)) | ((netdev_features_t)1 << (NETIF_F_IPV6_CSUM_BIT)))) & ~((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)));
if (f2 & ((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)))
f2 |= (((((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)) | ((netdev_features_t)1 << (NETIF_F_IP_CSUM_BIT))) | (((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)) | ((netdev_features_t)1 << (NETIF_F_IPV6_CSUM_BIT)))) & ~((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)));
f1 &= f2;
if (f1 & ((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)))
f1 &= ~(((((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)) | ((netdev_features_t)1 << (NETIF_F_IP_CSUM_BIT))) | (((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)) | ((netdev_features_t)1 << (NETIF_F_IPV6_CSUM_BIT)))) & ~((netdev_features_t)1 << (NETIF_F_HW_CSUM_BIT)));
return f1;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) netdev_features_t netdev_get_wanted_features(
struct net_device *dev)
{
return (dev->features & ~dev->hw_features) | dev->wanted_features;
}
netdev_features_t netdev_increment_features(netdev_features_t all,
netdev_features_t one, netdev_features_t mask);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) netdev_features_t netdev_add_tso_features(netdev_features_t features,
netdev_features_t mask)
{
return netdev_increment_features(features, (((netdev_features_t)1 << (NETIF_F_TSO_BIT)) | ((netdev_features_t)1 << (NETIF_F_TSO6_BIT)) | ((netdev_features_t)1 << (NETIF_F_TSO_ECN_BIT))), mask);
}
int __netdev_update_features(struct net_device *dev);
void netdev_update_features(struct net_device *dev);
void netdev_change_features(struct net_device *dev);
void netif_stacked_transfer_operstate(const struct net_device *rootdev,
struct net_device *dev);
netdev_features_t netif_skb_features(struct sk_buff *skb);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool net_gso_ok(netdev_features_t features, int gso_type)
{
netdev_features_t feature = gso_type << NETIF_F_GSO_SHIFT;
((void)sizeof(char[1 - 2*!!(SKB_GSO_TCPV4 != (((netdev_features_t)1 << (NETIF_F_TSO_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_UDP != (((netdev_features_t)1 << (NETIF_F_UFO_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_DODGY != (((netdev_features_t)1 << (NETIF_F_GSO_ROBUST_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_TCP_ECN != (((netdev_features_t)1 << (NETIF_F_TSO_ECN_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_TCPV6 != (((netdev_features_t)1 << (NETIF_F_TSO6_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_FCOE != (((netdev_features_t)1 << (NETIF_F_FSO_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_GRE != (((netdev_features_t)1 << (NETIF_F_GSO_GRE_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_GRE_CSUM != (((netdev_features_t)1 << (NETIF_F_GSO_GRE_CSUM_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_IPIP != (((netdev_features_t)1 << (NETIF_F_GSO_IPIP_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_SIT != (((netdev_features_t)1 << (NETIF_F_GSO_SIT_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_UDP_TUNNEL != (((netdev_features_t)1 << (NETIF_F_GSO_UDP_TUNNEL_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_UDP_TUNNEL_CSUM != (((netdev_features_t)1 << (NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT)) >> NETIF_F_GSO_SHIFT))]));
((void)sizeof(char[1 - 2*!!(SKB_GSO_MPLS != (((netdev_features_t)1 << (NETIF_F_GSO_MPLS_BIT)) >> NETIF_F_GSO_SHIFT))]));
return (features & feature) == feature;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool skb_gso_ok(struct sk_buff *skb, netdev_features_t features)
{
return net_gso_ok(features, ((struct skb_shared_info *)(skb_end_pointer(skb)))->gso_type) &&
(!skb_has_frag_list(skb) || (features & ((netdev_features_t)1 << (NETIF_F_FRAGLIST_BIT))));
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_needs_gso(struct net_device *dev, struct sk_buff *skb,
netdev_features_t features)
{
return skb_is_gso(skb) && (!skb_gso_ok(skb, features) ||
__builtin_expect(!!((skb->ip_summed != 3) && (skb->ip_summed != 1)), 0)
);
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_set_gso_max_size(struct net_device *dev,
unsigned int size)
{
dev->gso_max_size = size;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void skb_gso_error_unwind(struct sk_buff *skb, __be16 protocol,
int pulled_hlen, u16 mac_offset,
int mac_len)
{
skb->protocol = protocol;
skb->encapsulation = 1;
skb_push(skb, pulled_hlen);
skb_reset_transport_header(skb);
skb->mac_header = mac_offset;
skb->network_header = skb->mac_header + mac_len;
skb->mac_len = mac_len;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_is_macvlan(struct net_device *dev)
{
return dev->priv_flags & IFF_MACVLAN;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_is_bond_master(struct net_device *dev)
{
return dev->flags & IFF_MASTER && dev->priv_flags & IFF_BONDING;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_is_bond_slave(struct net_device *dev)
{
return dev->flags & IFF_SLAVE && dev->priv_flags & IFF_BONDING;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) bool netif_supports_nofcs(struct net_device *dev)
{
return dev->priv_flags & IFF_SUPP_NOFCS;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void netif_keep_dst(struct net_device *dev)
{
dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_XMIT_DST_RELEASE_PERM);
}
extern struct pernet_operations __attribute__ ((__section__(".init.data"))) loopback_net_ops;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const char *netdev_name(const struct net_device *dev)
{
if (!dev->name[0] || strchr(dev->name, '%'))
return "(unnamed net_device)";
return dev->name;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) const char *netdev_reg_state(const struct net_device *dev)
{
switch (dev->reg_state) {
case NETREG_UNINITIALIZED: return " (uninitialized)";
case NETREG_REGISTERED: return "";
case NETREG_UNREGISTERING: return " (unregistering)";
case NETREG_UNREGISTERED: return " (unregistered)";
case NETREG_RELEASED: return " (released)";
case NETREG_DUMMY: return " (dummy)";
}
({ static bool __attribute__ ((__section__(".data.unlikely"))) __warned; int __ret_warn_once = !!(1); if (__builtin_expect(!!(__ret_warn_once), 0)) if (({ int __ret_warn_on = !!(!__warned); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_fmt("include/linux/netdevice.h", 3715, "%s: unknown reg_state %d\n", dev->name, dev->reg_state); __builtin_expect(!!(__ret_warn_on), 0); })) __warned = true; __builtin_expect(!!(__ret_warn_once), 0); });
return " (unknown)";
}
__attribute__((format(printf, 3, 4)))
void netdev_printk(const char *level, const struct net_device *dev,
const char *format, ...);
__attribute__((format(printf, 2, 3)))
void netdev_emerg(const struct net_device *dev, const char *format, ...);
__attribute__((format(printf, 2, 3)))
void netdev_alert(const struct net_device *dev, const char *format, ...);
__attribute__((format(printf, 2, 3)))
void netdev_crit(const struct net_device *dev, const char *format, ...);
__attribute__((format(printf, 2, 3)))
void netdev_err(const struct net_device *dev, const char *format, ...);
__attribute__((format(printf, 2, 3)))
void netdev_warn(const struct net_device *dev, const char *format, ...);
__attribute__((format(printf, 2, 3)))
void netdev_notice(const struct net_device *dev, const char *format, ...);
__attribute__((format(printf, 2, 3)))
void netdev_info(const struct net_device *dev, const char *format, ...);
# 7 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_global.h" 2
# 1 "include/linux/cdev.h" 1
struct file_operations;
struct inode;
struct module;
struct cdev {
struct kobject kobj;
struct module *owner;
const struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
};
void cdev_init(struct cdev *, const struct file_operations *);
struct cdev *cdev_alloc(void);
void cdev_put(struct cdev *p);
int cdev_add(struct cdev *, dev_t, unsigned);
void cdev_del(struct cdev *);
void cd_forget(struct inode *);
extern struct backing_dev_info directly_mappable_cdev_bdi;
# 8 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_global.h" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h" 1
# 45 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
# 1 "include/ecnt_hook/ecnt_hook_qdma.h" 1
# 45 "include/ecnt_hook/ecnt_hook_qdma.h"
# 1 "include/ecnt_hook/ecnt_hook.h" 1
# 77 "include/ecnt_hook/ecnt_hook.h"
typedef enum {
ECNT_HOOK_ERROR = -1,
ECNT_RETURN_DROP= 0,
ECNT_CONTINUE ,
ECNT_RETURN,
}ecnt_ret_val;
enum ecnt_maintype{
ECNT_NET_CORE_DEV,
ECNT_NET_VLAN_DEV,
ECNT_NET_BR_FDB,
ECNT_NET_BR_FORWARD,
ECNT_NET_BR_INPUT,
ECNT_NET_PPP_GENERIC,
ECNT_NET_UDP,
ECNT_NET_UDPV6,
ECNT_NET_AF,
ECNT_NET_SOCK,
ECNT_NF_BR,
ECNT_NF_ARP,
ECNT_NF_IPV4,
ECNT_NF_IPV6,
ECNT_NF_TRACK_CORE,
ECNT_QDMA_WAN,
ECNT_QDMA_LAN,
ECNT_FE,
ECNT_PPE,
ECNT_ATM,
ECNT_PTM,
ECNT_ETHER_SWITCH,
ECNT_ETHER_PHY,
ECNT_XPON_MAC,
ECNT_XPON_PHY,
ECNT_QDMA_7510_20,
ECNT_PCIE,
ECNT_MULTICAST,
ECNT_L2TP,
ECNT_TRAFFIC_CLASSIFY,
ECNT_SMUX,
ECNT_VOIP,
ECNT_NUM_MAINTYPE
};
struct ecnt_data;
typedef ecnt_ret_val ecnt_hookfn(struct ecnt_data *in_data);
struct net_info_s{
};
struct nf_info_s{
};
struct ecnt_ops_info{
unsigned int drop_num;
union{
struct nf_info_s nf_info;
struct net_info_s net_info;
};
};
struct ecnt_hook_ops {
struct list_head list;
unsigned int hook_id;
struct ecnt_ops_info info;
const char *name;
unsigned int is_execute;
ecnt_hookfn *hookfn;
unsigned int maintype;
unsigned int subtype;
int priority;
};
extern struct list_head ecnt_hooks[ECNT_NUM_MAINTYPE][8];
extern void ecnt_hook_init(void);
extern int __ECNT_HOOK(unsigned int maintype, unsigned int subtype,struct ecnt_data *in_data);
extern int ecnt_register_hook(struct ecnt_hook_ops *reg);
extern void ecnt_unregister_hook(struct ecnt_hook_ops *reg);
extern int show_all_ecnt_hookfn(void);
extern int set_ecnt_hookfn_execute_or_not(unsigned int maintype, unsigned int subtype, unsigned int hook_id, unsigned int is_execute);
extern int ecnt_ops_unregister(unsigned int maintype, unsigned int subtype, unsigned int hook_id);
extern int get_ecnt_hookfn(unsigned int maintype, unsigned int subtype);
extern int ecnt_register_hooks(struct ecnt_hook_ops *reg, unsigned int n);
extern void ecnt_unregister_hooks(struct ecnt_hook_ops *reg, unsigned int n);
# 46 "include/ecnt_hook/ecnt_hook_qdma.h" 2
# 1 "include/ecnt_hook/ecnt_hook_qdma_type.h" 1
# 113 "include/ecnt_hook/ecnt_hook_qdma_type.h"
struct port_info;
typedef enum {
DBG_ERR ,
DBG_ST ,
DBG_WARN ,
DBG_MSG ,
DBG_LEVEL_MAX
} QDMA_DebugLevel_t ;
typedef enum {
QDMA_CALLBACK_RX_PACKET,
QDMA_CALLBACK_EVENT_HANDLER,
QDMA_CALLBACK_RECYCLE_PACKET,
QDMA_CALLBACK_GPON_MAC_HANDLER,
QDMA_CALLBACK_EPON_MAC_HANDLER,
QDMA_CALLBACK_XPON_PHY_HANDLER,
} QDMA_CbType_t ;
typedef enum {
QDMA_EVENT_RECV_PKTS = 0 ,
QDMA_EVENT_NO_RX_BUFFER ,
QDMA_EVENT_TX_CROWDED
} QDMA_EventType_t ;
typedef enum {
QDMA_LOOPBACK_DISABLE = 0 ,
QDMA_LOOPBACK_QDMA ,
QDMA_LOOPBACK_UMAC
} QDMA_LoopbackMode_t ;
typedef enum {
QDMA_TX_POLLING = 0 ,
QDMA_TX_INTERRUPT ,
} QDMA_RecycleMode_t ;
typedef enum {
QDMA_RX_POLLING = 0 ,
QDMA_RX_INTERRUPT ,
QDMA_RX_NAPI
} QDMA_RecvMode_t ;
typedef enum {
QDMA_DISABLE = 0 ,
QDMA_ENABLE
} QDMA_Mode_t ;
typedef enum {
QDMA_WAN_TYPE_GPON = 0,
QDMA_WAN_TYPE_EPON,
QDMA_WAN_TYPE_PTM,
QDMA_WAN_TYPE_SAR
} QDMA_WanType_t ;
typedef enum {
QDMA_TXQOS_WEIGHT_BY_PACKET = 0,
QDMA_TXQOS_WEIGHT_BY_BYTE,
QDMA_TXQOS_WEIGHT_MAX,
} QDMA_TxQosWeightType_t ;
typedef enum {
QDMA_TXQOS_WEIGHT_SCALE_64B = 0,
QDMA_TXQOS_WEIGHT_SCALE_16B,
QDMA_TXQOS_WEIGHT_SCALE_MAX,
} QDMA_TxQosWeightScale_t ;
typedef enum {
QDMA_TXQOS_TYPE_WRR = 0,
QDMA_TXQOS_TYPE_SP,
QDMA_TXQOS_TYPE_SPWRR7,
QDMA_TXQOS_TYPE_SPWRR6,
QDMA_TXQOS_TYPE_SPWRR5,
QDMA_TXQOS_TYPE_SPWRR4,
QDMA_TXQOS_TYPE_SPWRR3,
QDMA_TXQOS_TYPE_SPWRR2,
QDMA_TXQOS_TYPE_NUMS
} QDMA_TxQosType_t ;
typedef enum {
QDMA_VCHNL_TXQOS_TYPE_WRR = 0,
QDMA_VCHNL_TXQOS_TYPE_SP,
QDMA_VCHNL_TXQOS_TYPE_SPWRR3,
QDMA_VCHNL_TXQOS_TYPE_SPWRR2,
QDMA_VCHNL_TXQOS_TYPE_NUMS
} QDMA_VirChnlQosType_t ;
typedef enum {
QDMA_TRTCM_SCALE_1BYTE = 0,
QDMA_TRTCM_SCALE_2BYTE,
QDMA_TRTCM_SCALE_4BYTE,
QDMA_TRTCM_SCALE_8BYTE,
QDMA_TRTCM_SCALE_16BYTE,
QDMA_TRTCM_SCALE_32BYTE,
QDMA_TRTCM_SCALE_64BYTE,
QDMA_TRTCM_SCALE_128BYTE,
QDMA_TRTCM_SCALE_256BYTE,
QDMA_TRTCM_SCALE_512BYTE,
QDMA_TRTCM_SCALE_1KBYTE,
QDMA_TRTCM_SCALE_2KBYTE,
QDMA_TRTCM_SCALE_4KBYTE,
QDMA_TRTCM_SCALE_8KBYTE,
QDMA_TRTCM_SCALE_16KBYTE,
QDMA_TRTCM_SCALE_32KBYTE,
QDMA_TRTCM_SCALE_MAX_ITEMS
} QDMA_TrtcmScale_t ;
typedef enum {
QDMA_TRTCM_PARAM_CIR = 0,
QDMA_TRTCM_PARAM_CBS,
QDMA_TRTCM_PARAM_PIR,
QDMA_TRTCM_PARAM_PBS
} QDMA_TrtcmParamType_t ;
typedef enum {
QDMA_EPON_REPORT_WO_THRESHOLD = 0,
QDMA_EPON_REPORT_ONE_THRESHOLD,
QDMA_EPON_REPORT_TWO_THRESHOLD,
QDMA_EPON_REPORT_THREE_THRESHOLD
} QDMA_EponReportMode_t ;
typedef enum {
QDMA_TXQUEUE_SCALE_2_DSCP = 0,
QDMA_TXQUEUE_SCALE_4_DSCP,
QDMA_TXQUEUE_SCALE_8_DSCP,
QDMA_TXQUEUE_SCALE_16_DSCP,
QDMA_TXQUEUE_SCALE_ITEMS
} QDMA_TxQueueThresholdScale_t ;
typedef enum {
PSE_PCP_TYPE_CDM_TX = 0,
PSE_PCP_TYPE_CDM_RX,
PSE_PCP_TYPE_GDM_RX
} PSE_PcpType_t ;
typedef enum {
PSE_PCP_MODE_DISABLE = 0,
PSE_PCP_MODE_8B0D = 1,
PSE_PCP_MODE_7B1D = 2,
PSE_PCP_MODE_6B2D = 4,
PSE_PCP_MODE_5B3D = 8
} PSE_PcpMode_t ;
typedef enum {
QDMA_RX_RATE_LIMIT_BY_BYTE = 0,
QDMA_RX_RATE_LIMIT_BY_PACKET,
} QDMA_RxPktMode_t ;
typedef enum {
QDMA_Rx_Rate_Limit_PIR = 0,
QDMA_Rx_Rate_Limit_PBS
} QDMA_RxRateLimitType_t ;
typedef enum {
QDMA_Tx_Rate_Limit_CIR = 0,
QDMA_Tx_Rate_Limit_CBS,
QDMA_Tx_Rate_Limit_PIR,
QDMA_Tx_Rate_Limit_PBS
} QDMA_TxRateLimitType_t ;
typedef enum {
QDMA_TX_RATE_METER_TIME_DIVISOR_1 = 0,
QDMA_TX_RATE_METER_TIME_DIVISOR_2,
QDMA_TX_RATE_METER_TIME_DIVISOR_4,
QDMA_TX_RATE_METER_TIME_DIVISOR_8,
QDMA_TX_RATE_METER_TIME_DIVISOR_ITEMS
} QDMA_TxRateMeterTimeDivisor_t ;
typedef enum {
QDMA_DYNCNGST_DEI_THRH_SCALE_1_2 = 0,
QDMA_DYNCNGST_DEI_THRH_SCALE_1_4,
QDMA_DYNCNGST_DEI_THRH_SCALE_1_8,
QDMA_DYNCNGST_DEI_THRH_SCALE_1_16,
QDMA_DYNCNGST_DEI_THRH_SCALE_ITEMS
} QDMA_TxDynCngstDeiThrhScale_t ;
typedef enum {
QDMA_QUEUE_NONBLOCKING = 0 ,
QDMA_QUEUE_NORMAL
} QDMA_TxQCngstQueueMode_t ;
typedef enum {
QDMA_CHANNEL_NONBLOCKING = 0 ,
QDMA_CHANNEL_NORMAL
} QDMA_TxQCngstChannelMode_t ;
typedef enum {
QDMA_DBG_CNTR_SRC_CPU_TX = 0,
QDMA_DBG_CNTR_SRC_FWD_TX,
QDMA_DBG_CNTR_SRC_CPU_RX,
QDMA_DBG_CNTR_SRC_FWD_RX,
QDMA_DBG_CNTR_SRC_ITEMS
} QDMA_DbgCntrSrc_t ;
typedef enum {
QDMA_TXCNGST_DYNAMIC_NORMAL = 0,
QDMA_TXCNGST_DYNAMIC_PEAKRATE_MARGIN,
QDMA_TXCNGST_STATIC,
} QDMA_TxCngstMode_t ;
typedef enum {
QDMA_TXCNGST_PEEKRATE_MARGIN_0 = 0,
QDMA_TXCNGST_PEEKRATE_MARGIN_25,
QDMA_TXCNGST_PEEKRATE_MARGIN_50,
QDMA_TXCNGST_PEEKRATE_MARGIN_100,
} QDMA_PeekRateMargin_t ;
typedef enum {
QDMA_DBG_MEM_XS_MEMSEL_LOCAL_DSCP_INFO = 0,
QDMA_DBG_MEM_XS_MEMSEL_LOCAL_QUEUE_INFO,
QDMA_DBG_MEM_XS_MEMSEL_QOS_WEIGHT_COUNTER,
QDMA_DBG_MEM_XS_MEMSEL_LOCAL_DMA_INDEX,
QDMA_DBG_MEM_XS_MEMSEL_BUFFER_MONITOR,
QDMA_DBG_MEM_XS_MEMSEL_RATELIMIT_PARAM,
QDMA_DBG_MEM_XS_MEMSEL_VCHNL_QOS_WEIGHT,
QDMA_DBG_MEM_XS_MEMSEL_MAX,
} QDMA_DbgMemXsMemSel_t ;
typedef enum {
MAC_TYPE_ETHER = 0,
MAC_TYPE_XPON,
MAC_TYPE_PTM,
MAC_TYPE_ATM,
} MAC_Type_t ;
typedef enum {
QDMA_VIRTUAL_CHANNEL_16Queue = 0,
QDMA_VIRTUAL_CHANNEL_32Queue,
} QDMA_VirChnlMapMode_t ;
typedef enum {
QDMA_DBG_CNTR_CHNL_TXCPU = 0,
QDMA_DBG_CNTR_CHNL_TXFWD1,
QDMA_DBG_CNTR_CHNL_TXFWD2,
QDMA_DBG_CNTR_QUEUE,
QDMA_DBG_CNTR_MAX,
} QDMA_DbgCntrChnlGroup_t ;
typedef enum {
QDMA_FUNCTION_INIT = 0,
QDMA_FUNCTION_DEINIT ,
QDMA_FUNCTION_TX_DMA_MODE ,
QDMA_FUNCTION_RX_DMA_MODE ,
QDMA_FUNCTION_LOOPBACK_MODE ,
QDMA_FUNCTION_REGISTER ,
QDMA_FUNCTION_UNREGISTER ,
QDMA_FUNCTION_ENABLE_RXPKT_INT ,
QDMA_FUNCTION_DISABLE_RXPKT_INT ,
QDMA_FUNCTION_RECEIVE_PACKETS ,
QDMA_FUNCTION_TRANSMIT_PACKETS ,
QDMA_FUNCTION_SET_TX_QOS_WEIGHT ,
QDMA_FUNCTION_GET_TX_QOS_WEIGHT ,
QDMA_FUNCTION_SET_TX_QOS ,
QDMA_FUNCTION_GET_TX_QOS ,
QDMA_FUNCTION_SET_MAC_LIMIT_THRESHOLD ,
QDMA_FUNCTION_GET_MAC_LIMIT_THRESHOLD ,
QDMA_FUNCTION_SET_TXBUF_THRESHOLD ,
QDMA_FUNCTION_GET_TXBUF_THRESHOLD ,
QDMA_FUNCTION_SET_PREFETCH_MODE ,
QDMA_FUNCTION_SET_PKTSIZE_OVERHEAD_EN ,
QDMA_FUNCTION_GET_PKTSIZE_OVERHEAD_EN ,
QDMA_FUNCTION_SET_PKTSIZE_OVERHEAD_VALUE ,
QDMA_FUNCTION_GET_PKTSIZE_OVERHEAD_VALUE ,
QDMA_FUNCTION_SET_LMGR_LOW_THRESHOLD ,
QDMA_FUNCTION_GET_LMGR_LOW_THRESHOLD ,
QDMA_FUNCTION_GET_LMGR_STATUS ,
QDMA_FUNCTION_SET_DEBUG_LEVEL,
QDMA_FUNCTION_DUMP_DMA_BUSY,
QDMA_FUNCTION_DUMP_REG_POLLING,
QDMA_FUNCTION_SET_FORCE_RX_RING1,
QDMA_FUNCTION_SET_TX_DROP_EN,
QDMA_FUNCTION_GET_TX_DROP_EN,
QDMA_FUNCTION_SET_TX_RATEMETER,
QDMA_FUNCTION_GET_TX_RATEMETER,
QDMA_FUNCTION_ENABLE_TX_RATELIMIT,
QDMA_FUNCTION_SET_TX_RATELIMIT_CFG,
QDMA_FUNCTION_GET_TX_RATELIMIT_CFG,
QDMA_FUNCTION_SET_TX_RATELIMIT,
QDMA_FUNCTION_GET_TX_RATELIMIT,
QDMA_FUNCTION_SET_TX_DBAREPORT,
QDMA_FUNCTION_GET_TX_DBAREPORT,
QDMA_FUNCTION_SET_RX_PROTECT_EN,
QDMA_FUNCTION_GET_RX_PROTECT_EN,
QDMA_FUNCTION_SET_RX_LOW_THRESHOLD,
QDMA_FUNCTION_GET_RX_LOW_THRESHOLD,
QDMA_FUNCTION_SET_RX_RATELIMIT_EN,
QDMA_FUNCTION_SET_RX_RATELIMIT_PKT_MODE,
QDMA_FUNCTION_GET_RX_RATELIMIT_CFG,
QDMA_FUNCTION_SET_RX_RATELIMIT,
QDMA_FUNCTION_GET_RX_RATELIMIT,
QDMA_FUNCTION_SET_TXQ_DEI_DROP_MODE,
QDMA_FUNCTION_GET_TXQ_DEI_DROP_MODE,
QDMA_FUNCTION_SET_TXQ_CNGST_MODE,
QDMA_FUNCTION_GET_TXQ_CNGST_MODE,
QDMA_FUNCTION_SET_TXQ_DEI_THRH_SCALE,
QDMA_FUNCTION_GET_TXQ_DEI_THRH_SCALE,
QDMA_FUNCTION_SET_TXQ_CNGST_AUTO_CONFIG,
QDMA_FUNCTION_GET_TXQ_CNGST_AUTO_CONFIG,
QDMA_FUNCTION_SET_TXQ_CNGST_DYNAMIC_THRESHOLD,
QDMA_FUNCTION_GET_TXQ_CNGST_DYNAMIC_THRESHOLD,
QDMA_FUNCTION_SET_TXQ_CNGST_TOTAL_THRESHOLD,
QDMA_FUNCTION_GET_TXQ_CNGST_TOTAL_THRESHOLD,
QDMA_FUNCTION_SET_TXQ_CNGST_CHANNEL_THRESHOLD,
QDMA_FUNCTION_GET_TXQ_CNGST_CHANNEL_THRESHOLD,
QDMA_FUNCTION_SET_TXQ_CNGST_QUEUE_THRESHOLD,
QDMA_FUNCTION_GET_TXQ_CNGST_QUEUE_THRESHOLD,
QDMA_FUNCTION_SET_PEEKRATE_PARAMS,
QDMA_FUNCTION_GET_PEEKRATE_PARAMS,
QDMA_FUNCTION_SET_TXQ_STATIC_QUEUE_NORMAL_THRESHOLD,
QDMA_FUNCTION_SET_TXQ_STATIC_QUEUE_DEI_THRESHOLD,
QDMA_FUNCTION_GET_TXQ_CNGST_DYNAMIC_INFO,
QDMA_FUNCTION_GET_TXQ_CNGST_STATIC_INFO,
QDMA_FUNCTION_SET_TXQ_CNGST_QUEUE_NONBLOCKING,
QDMA_FUNCTION_GET_TXQ_CNGST_QUEUE_NONBLOCKING,
QDMA_FUNCTION_SET_TXQ_CNGST_CHANNEL_NONBLOCKING,
QDMA_FUNCTION_GET_TXQ_CNGST_CHANNEL_NONBLOCKING,
QDMA_FUNCTION_SET_VIRTUAL_CHANNEL_MODE,
QDMA_FUNCTION_GET_VIRTUAL_CHANNEL_MODE,
QDMA_FUNCTION_SET_VIRTUAL_CHANNEL_QOS,
QDMA_FUNCTION_GET_VIRTUAL_CHANNEL_QOS,
QDMA_FUNCTION_SET_DBGCNTR_CHANNEL,
QDMA_FUNCTION_SET_DBGCNTR_QUEUE,
QDMA_FUNCTION_CLEAR_DBGCNTR,
QDMA_FUNCTION_DUMP_DBGCNTR,
QDMA_FUNCTION_DUMP_TX_QOS,
QDMA_FUNCTION_DUMP_VIRTUAL_CHANNEL_QOS,
QDMA_FUNCTION_DUMP_TX_RATELIMIT,
QDMA_FUNCTION_DUMP_RX_RATELIMIT,
QDMA_FUNCTION_DUMP_TX_DBA_REPORT,
QDMA_FUNCTION_DUMP_TXQ_CNGST,
QDMA_FUNCTION_CLEAR_CPU_COUNTER,
QDMA_FUNCTION_DUMP_CPU_COUNTER,
QDMA_FUNCTION_DUMP_REGISTER_INFO,
QDMA_FUNCTION_DUMP_DESCRIPTOR_INFO,
QDMA_FUNCTION_DUMP_IRQ_INFO,
QDMA_FUNCTION_DUMP_HWFWD_INFO,
QDMA_FUNCTION_DUMP_INFO_ALL,
QDMA_FUNCTION_READ_VIP_INFO,
QDMA_FUNCTION_MAX_NUM ,
} QDMA_HookFunction_t ;
typedef int (*qdma_callback_recv_packet_t)(void *, uint, struct sk_buff *, uint) ;
typedef int (*qdma_callback_event_handler_t)(QDMA_EventType_t) ;
typedef void (*qdma_callback_int_handler_t)(void) ;
typedef int (*qdma_callback_recycle_packet_t)(struct sk_buff *, uint) ;
typedef struct {
MAC_Type_t macType ;
unchar txRecycleThrh ;
qdma_callback_recv_packet_t cbRecvPkts ;
qdma_callback_event_handler_t cbEventHandler ;
qdma_callback_recycle_packet_t cbRecyclePkts ;
qdma_callback_int_handler_t cbGponMacHandler ;
qdma_callback_int_handler_t cbEponMacHandler ;
qdma_callback_int_handler_t cbXponPhyHandler ;
} QDMA_InitCfg_t ;
typedef struct {
QDMA_Mode_t mode ;
unchar chnThreshold ;
unchar totalThreshold ;
} QDMA_TxBufCtrl_T ;
typedef struct {
unchar channel ;
QDMA_TxQosType_t qosType ;
struct {
unchar weight ;
} queue[8] ;
} QDMA_TxQosScheduler_T ;
typedef struct {
unchar channel ;
ushort cir ;
ushort cbs ;
ushort pir ;
ushort pbs ;
} QDMA_TrtcmParam_T ;
typedef struct {
QDMA_TxQueueThresholdScale_t maxScale ;
QDMA_TxQueueThresholdScale_t minScale ;
} QDMA_TxQueueCongestScale_T ;
typedef struct {
unchar deiScale;
struct {
unchar staticDeiThreshold ;
unchar staticNormalThreshold ;
} queue[8] ;
} QDMA_TxQueueCongestCfg_T ;
typedef struct {
uint normalThrh[8] ;
} QDMA_TxQStaticNormalCfg_T ;
typedef struct {
uint deiThrh[8] ;
} QDMA_TxQStaticDeiCfg_T ;
typedef struct {
unchar cntrIdx ;
unchar cntrEn ;
QDMA_DbgCntrSrc_t cntrSrc ;
unchar isChnlAll ;
unchar isQueueAll ;
unchar isDscpRingAll ;
unchar chnlIdx ;
unchar queueIdx ;
unchar dscpRingIdx ;
uint cntrVal ;
} QDMA_DBG_CNTR_T ;
typedef struct {
ushort txRateMeterTimeSlice ;
QDMA_TxRateMeterTimeDivisor_t txRateMeterTimeDivisor ;
} QDMA_TxRateMeter_T ;
typedef struct {
ushort txRateLimitUnit ;
QDMA_TrtcmScale_t txRateLimitBucketScale ;
} QDMA_TxRateLimitCfg_T ;
typedef struct {
unchar chnlIdx ;
unchar chnlRateLimitEn ;
uint rateLimitValue ;
} QDMA_TxRateLimitSet_T ;
typedef struct {
unchar chnlIdx ;
unchar chnlRateLimitEn ;
uint rateLimitValue ;
uint pbsParamValue ;
} QDMA_TxRateLimitGet_T ;
typedef struct {
unchar tsid ;
ushort cirParamValue ;
ushort cbsParamValue ;
ushort pirParamValue ;
ushort pbsParamValue ;
} QDMA_TxQueueTrtcm_T ;
typedef struct {
unchar channel ;
unchar queue ;
unchar thrIdx ;
ushort value ;
} QDMA_EponQueueThreshold_T ;
typedef struct {
unchar channel ;
uint cirParamValue ;
uint cbsParamValue ;
uint pirParamValue ;
uint pbsParamValue ;
} QDMA_TxDbaReport_T ;
typedef struct {
uint rxRing0LowThrh ;
uint rxRing1LowThrh ;
} QDMA_RxLowThreshold_T ;
typedef struct {
unchar rxRateLimitEn ;
QDMA_RxPktMode_t rxRateLimitPktMode ;
ushort rxRateLimitUnit ;
QDMA_TrtcmScale_t rxRateLimitBucketScale ;
} QDMA_RxRateLimitCfg_T ;
typedef struct {
unchar ringIdx ;
uint rateLimitValue ;
} QDMA_RxRateLimitSet_T ;
typedef struct {
unchar ringIdx ;
uint rateLimitValue ;
uint pbsParamValue ;
} QDMA_RxRateLimitGet_T ;
typedef struct {
unchar cngstDropEn ;
unchar cngstDeiDropEn ;
unchar dynCngstEn ;
unchar dynCngstMaxThrhTx1En ;
unchar dynCngstMinThrhTx1En ;
unchar dynCngstMaxThrhTx0En ;
unchar dynCngstMinThrhTx0En ;
unchar dynCngstModeConfigTrigEn ;
unchar dynCngstModePacketTrigEn ;
unchar dynCngstModeTimeTrigEn ;
ushort dynCngstTicksel ;
QDMA_TxDynCngstDeiThrhScale_t dynCngstDeiThrhScale ;
} QDMA_TxQCngstCfg_T ;
typedef struct {
uint dynCngstTotalMaxThrh ;
uint dynCngstTotalMinThrh ;
} QDMA_TxQDynCngstTotalThrh_T ;
typedef struct {
uint dynCngstChnlMaxThrh ;
uint dynCngstChnlMinThrh ;
} QDMA_TxQDynCngstChnlThrh_T ;
typedef struct {
uint dynCngstQueueMaxThrh ;
uint dynCngstQueueMinThrh ;
} QDMA_TxQDynCngstQueueThrh_T ;
typedef struct {
ushort dynCngstTotalMaxThrh ;
ushort dynCngstTotalMinThrh ;
ushort dynCngstChnlMaxThrh ;
ushort dynCngstChnlMinThrh ;
ushort dynCngstQueueMaxThrh ;
ushort dynCngstQueueMinThrh ;
} QDMA_TxQDynCngstThrh_T ;
typedef struct {
unchar queueIdx ;
ushort staticDeiThrh ;
ushort staticNormalThrh ;
} QDMA_TxQStaticCngstThrh_T ;
typedef struct {
QDMA_TxCngstMode_t txCngstMode ;
QDMA_PeekRateMargin_t peekRateMargin ;
uint peekRateDuration ;
} QDMA_txCngstCfg_t ;
typedef struct {
QDMA_Mode_t peekRateEn ;
QDMA_PeekRateMargin_t peekRateMargin ;
uint peekRateDuration ;
} QDMA_PeekRateCfg_t ;
typedef struct {
QDMA_TxQDynCngstTotalThrh_T *totalThrhPtr;
QDMA_TxQDynCngstChnlThrh_T *chnlThrhPtr;
QDMA_TxQDynCngstQueueThrh_T *queueThrhPtr;
QDMA_PeekRateCfg_t *peekrateCfgPtr;
} QDMA_TxQDynamicCngstInfo_T ;
typedef struct {
QDMA_TxQDynCngstTotalThrh_T *totalThrhPtr;
QDMA_TxQStaticNormalCfg_T *normThrhPtr;
QDMA_TxQStaticDeiCfg_T *deiThrhPtr;
} QDMA_TxQStaticCngstInfo_T ;
typedef struct {
QDMA_TxQCngstQueueMode_t queueMode;
uint queue;
} QDMA_TxQCngstQueueCfg_T ;
typedef struct {
QDMA_TxQCngstChannelMode_t channelMode;
uint channel;
} QDMA_TxQCngstChannelCfg_T ;
typedef struct {
QDMA_Mode_t virChnlEn;
QDMA_VirChnlMapMode_t virChnlMode;
} QDMA_VirtualChannelMode_T ;
typedef struct {
unchar phyChnl ;
QDMA_VirChnlQosType_t qosType ;
struct {
unchar weight ;
} queue[4] ;
} QDMA_VirtualChannelQoS_T ;
typedef struct {
QDMA_CbType_t type;
void *pCbFun;
} QDMA_RegisterCallBack_T ;
typedef struct {
struct sk_buff *skb;
uint msg0;
uint msg1;
struct port_info *pMacInfo;
} QDMA_Transmit_T ;
typedef struct {
QDMA_TxQosWeightType_t weightBase;
QDMA_TxQosWeightScale_t weightScale;
QDMA_TxQosScheduler_T *pTxQos;
} QDMA_TxQos_T;
typedef struct {
QDMA_Mode_t prefecthMode;
QDMA_Mode_t overDragMode;
uint overDragCnt;
} QDMA_PrefetchMode_T;
typedef struct {
uint freeLmgr;
uint usedLmgr;
uint usedBuf;
} QDMA_LmgrStatus_T;
typedef struct {
uint dbgLevel;
uint busyDuration;
uint regOffset;
uint pollingDuration;
uint forceEn;
} QDMA_OldProc_T;
typedef struct {
uint chnlThrh;
uint queueThrh;
} QDMA_MacLimitThrh_T;
struct ECNT_QDMA_Data {
QDMA_HookFunction_t function_id;
int retValue;
union {
QDMA_InitCfg_t *pInitCfg;
QDMA_Mode_t mode;
QDMA_LoopbackMode_t lbMode;
QDMA_DbgCntrChnlGroup_t cntrSrc;
int cnt;
int channel;
uint threshold;
QDMA_RegisterCallBack_T qdma_reg_cb;
QDMA_Transmit_T qdma_transmit;
QDMA_TxQos_T qdma_tx_qos;
QDMA_TxBufCtrl_T *pQdmaTxBufCtrl;
QDMA_PrefetchMode_T *qdma_prefetch;
QDMA_LmgrStatus_T *qdma_lmgr_status;
QDMA_OldProc_T qdma_old_proc;
QDMA_MacLimitThrh_T *qdma_mac_limit_thrh;
QDMA_TxRateMeter_T *txRateMeterPtr;
QDMA_TxRateLimitCfg_T *txRateLimitCfgPtr;
QDMA_TxRateLimitSet_T *txRateLimitSetPtr;
QDMA_TxRateLimitGet_T *txRateLimitGetPtr;
QDMA_TxDbaReport_T *txDbaReportPtr;
QDMA_RxLowThreshold_T *rxLowThresholdPtr;
QDMA_RxPktMode_t pktMode;
QDMA_RxRateLimitCfg_T *rxRateLimitCfgPtr;
QDMA_RxRateLimitSet_T *rxRateLimitSetPtr;
QDMA_RxRateLimitGet_T *rxRateLimitGetPtr;
QDMA_txCngstCfg_t *pTxCngstCfg;
QDMA_TxQDynCngstThrh_T *dynCngstThrhPtr;
QDMA_TxQDynCngstTotalThrh_T *totalThrhPtr;
QDMA_TxQDynCngstChnlThrh_T *chnlThrhPtr;
QDMA_TxQDynCngstQueueThrh_T *queueThrhPtr;
QDMA_PeekRateCfg_t *peekrateCfgPtr;
QDMA_TxQStaticDeiCfg_T *deiThrhPtr;
QDMA_TxQStaticNormalCfg_T *normThrhPtr;
QDMA_TxQDynamicCngstInfo_T *dynCfgPtr;
QDMA_TxQStaticCngstInfo_T *staticCfgPtr;
QDMA_VirtualChannelMode_T *virChnlModePtr;
QDMA_VirtualChannelQoS_T *virChnlQoSPtr;
QDMA_TxQCngstQueueCfg_T *txqCngstQueueCfgPtr;
QDMA_TxQCngstChannelCfg_T *txqCngstChannelCfgPtr;
} qdma_private;
};
# 47 "include/ecnt_hook/ecnt_hook_qdma.h" 2
# 66 "include/ecnt_hook/ecnt_hook_qdma.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_INIT(unsigned int mainType, QDMA_InitCfg_t *pInitCfg) {
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_INIT;
in_data.qdma_private.pInitCfg = pInitCfg;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_DEINIT(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_DEINIT;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_TX_DMA_MODE(unsigned int mainType, QDMA_Mode_t txMode){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_TX_DMA_MODE;
in_data.qdma_private.mode = txMode ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_RX_DMA_MODE(unsigned int mainType, QDMA_Mode_t rxMode){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_RX_DMA_MODE;
in_data.qdma_private.mode = rxMode ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_LOOPBACK_MODE(unsigned int mainType, QDMA_LoopbackMode_t lbMode){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_LOOPBACK_MODE;
in_data.qdma_private.lbMode = lbMode ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_REGISTER_HOOKFUNC(unsigned int mainType, QDMA_CbType_t type, void *pCbFun){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_REGISTER;
in_data.qdma_private.qdma_reg_cb.type = type ;
in_data.qdma_private.qdma_reg_cb.pCbFun = pCbFun ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_UNREGISTER_HOOKFUNC(unsigned int mainType, QDMA_CbType_t type){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_UNREGISTER;
in_data.qdma_private.qdma_reg_cb.type = type ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_ENABLE_RXPKT_INT(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_ENABLE_RXPKT_INT;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_DISABLE_RXPKT_INT(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_DISABLE_RXPKT_INT;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_RECEIVE_PACKETS(unsigned int mainType, int maxPkts){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_RECEIVE_PACKETS;
in_data.qdma_private.cnt = maxPkts ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_TRANSMIT_PACKETS(unsigned int mainType, struct sk_buff *skb, uint msg0, uint msg1, struct port_info *pMacInfo){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_TRANSMIT_PACKETS;
in_data.qdma_private.qdma_transmit.skb = skb ;
in_data.qdma_private.qdma_transmit.msg0 = msg0 ;
in_data.qdma_private.qdma_transmit.msg1 = msg1 ;
in_data.qdma_private.qdma_transmit.pMacInfo = pMacInfo ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TX_QOS_WEIGHT(unsigned int mainType, QDMA_TxQosWeightType_t weightBase, QDMA_TxQosWeightScale_t weightScale){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TX_QOS_WEIGHT;
in_data.qdma_private.qdma_tx_qos.weightBase = weightBase ;
in_data.qdma_private.qdma_tx_qos.weightScale = weightScale ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TX_QOS_WEIGHT(unsigned int mainType, QDMA_TxQosWeightType_t *pWeightBase, QDMA_TxQosWeightScale_t *pWeightScale){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TX_QOS_WEIGHT;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
*pWeightBase = in_data.qdma_private.qdma_tx_qos.weightBase ;
*pWeightScale = in_data.qdma_private.qdma_tx_qos.weightScale ;
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TX_QOS(unsigned int mainType, QDMA_TxQosScheduler_T *pTxQos){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TX_QOS;
in_data.qdma_private.qdma_tx_qos.pTxQos = pTxQos ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TX_QOS(unsigned int mainType, QDMA_TxQosScheduler_T *pTxQos){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TX_QOS;
in_data.qdma_private.qdma_tx_qos.pTxQos = pTxQos ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_MAC_LIMIT_THRESHOLD(unsigned int mainType, uint chnlThrh, uint queueThrh){
struct ECNT_QDMA_Data in_data;
QDMA_MacLimitThrh_T mac_limit_thrh;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_MAC_LIMIT_THRESHOLD;
mac_limit_thrh.chnlThrh = chnlThrh ;
mac_limit_thrh.queueThrh = queueThrh ;
in_data.qdma_private.qdma_mac_limit_thrh = &mac_limit_thrh ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXBUF_THRESHOLD(unsigned int mainType, QDMA_TxBufCtrl_T *pTxBufCtrl){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXBUF_THRESHOLD;
in_data.qdma_private.pQdmaTxBufCtrl = pTxBufCtrl ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXBUF_THRESHOLD(unsigned int mainType, QDMA_TxBufCtrl_T *pTxBufCtrl){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXBUF_THRESHOLD;
in_data.qdma_private.pQdmaTxBufCtrl = pTxBufCtrl ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_PREFETCH_MODE(unsigned int mainType, QDMA_Mode_t prefecthMode, QDMA_Mode_t overDragMode, uint overDragCnt){
struct ECNT_QDMA_Data in_data;
QDMA_PrefetchMode_T qdma_prefetch;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_PREFETCH_MODE;
qdma_prefetch.prefecthMode = prefecthMode ;
qdma_prefetch.overDragMode = overDragMode ;
qdma_prefetch.overDragCnt = overDragCnt ;
in_data.qdma_private.qdma_prefetch = &qdma_prefetch ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_PKTSIZE_OVERHEAD_EN(unsigned int mainType, QDMA_Mode_t mode){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_PKTSIZE_OVERHEAD_EN;
in_data.qdma_private.mode = mode ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) QDMA_Mode_t QDMA_API_GET_PKTSIZE_OVERHEAD_EN(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_PKTSIZE_OVERHEAD_EN;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_PKTSIZE_OVERHEAD_VALUE(unsigned int mainType, int cnt){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_PKTSIZE_OVERHEAD_VALUE;
in_data.qdma_private.cnt = cnt ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) uint QDMA_API_GET_PKTSIZE_OVERHEAD_VALUE(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_PKTSIZE_OVERHEAD_VALUE;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_LMGR_LOW_THRESHOLD(unsigned int mainType, uint lowThrh){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_LMGR_LOW_THRESHOLD;
in_data.qdma_private.threshold = lowThrh ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) uint QDMA_API_GET_LMGR_LOW_THRESHOLD(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_LMGR_LOW_THRESHOLD;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TX_DROP_EN(unsigned int mainType, QDMA_Mode_t mode){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TX_DROP_EN;
in_data.qdma_private.mode = mode ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TX_DROP_EN(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TX_DROP_EN;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TX_RATEMETER(unsigned int mainType, QDMA_TxRateMeter_T *txRateMeterPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TX_RATEMETER;
in_data.qdma_private.txRateMeterPtr = txRateMeterPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TX_RATEMETER(unsigned int mainType, QDMA_TxRateMeter_T *txRateMeterPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TX_RATEMETER;
in_data.qdma_private.txRateMeterPtr = txRateMeterPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_ENABLE_TX_RATELIMIT(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_ENABLE_TX_RATELIMIT;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
# 489 "include/ecnt_hook/ecnt_hook_qdma.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TX_RATELIMIT(unsigned int mainType, QDMA_TxRateLimitSet_T *txRateLimitSetPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TX_RATELIMIT;
in_data.qdma_private.txRateLimitSetPtr = txRateLimitSetPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TX_RATELIMIT(unsigned int mainType, QDMA_TxRateLimitGet_T *txRateLimitGetPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TX_RATELIMIT;
in_data.qdma_private.txRateLimitGetPtr = txRateLimitGetPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TX_DBA_REPORT(unsigned int mainType, QDMA_TxDbaReport_T *txDbaReportPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TX_DBAREPORT;
in_data.qdma_private.txDbaReportPtr = txDbaReportPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TX_DBA_REPORT(unsigned int mainType, QDMA_TxDbaReport_T *txDbaReportPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TX_DBAREPORT;
in_data.qdma_private.txDbaReportPtr = txDbaReportPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_RX_PROTECT_EN(unsigned int mainType, QDMA_Mode_t mode){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_RX_PROTECT_EN;
in_data.qdma_private.mode = mode ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_RX_PROTECT_EN(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_RX_PROTECT_EN;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_RX_LOW_THRESHOLD(unsigned int mainType, QDMA_RxLowThreshold_T *rxLowThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_RX_LOW_THRESHOLD;
in_data.qdma_private.rxLowThresholdPtr = rxLowThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_RX_LOW_THRESHOLD(unsigned int mainType, QDMA_RxLowThreshold_T *rxLowThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_RX_LOW_THRESHOLD;
in_data.qdma_private.rxLowThresholdPtr = rxLowThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_RX_RATELIMIT_EN(unsigned int mainType, QDMA_Mode_t mode){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_RX_RATELIMIT_EN;
in_data.qdma_private.mode = mode ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_RX_RATELIMIT_PKT_MODE(unsigned int mainType, QDMA_RxPktMode_t pktMode )
{
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_RX_RATELIMIT_PKT_MODE;
in_data.qdma_private.pktMode = pktMode ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_RX_RATELIMIT_CFG(unsigned int mainType, QDMA_RxRateLimitCfg_T *rxRateLimitCfgPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_RX_RATELIMIT_CFG;
in_data.qdma_private.rxRateLimitCfgPtr = rxRateLimitCfgPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_RX_RATELIMIT(unsigned int mainType, QDMA_RxRateLimitSet_T *rxRateLimitSetPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_RX_RATELIMIT;
in_data.qdma_private.rxRateLimitSetPtr = rxRateLimitSetPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_RX_RATELIMIT(unsigned int mainType, QDMA_RxRateLimitGet_T *rxRateLimitGetPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_RX_RATELIMIT;
in_data.qdma_private.rxRateLimitGetPtr = rxRateLimitGetPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_DEI_DROP_MODE(unsigned int mainType, QDMA_Mode_t deiDropMode){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_DEI_DROP_MODE;
in_data.qdma_private.mode = deiDropMode ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) QDMA_Mode_t QDMA_API_GET_TXQ_DEI_DROP_MODE(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_DEI_DROP_MODE;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_CNGST_MODE(unsigned int mainType, QDMA_Mode_t dynCngstEn){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_CNGST_MODE;
in_data.qdma_private.mode = dynCngstEn ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) QDMA_Mode_t QDMA_API_GET_TXQ_CNGST_MODE(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_CNGST_MODE;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_DEI_THRESHOLD_SCALE(unsigned int mainType, QDMA_TxDynCngstDeiThrhScale_t deiThrhScale){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_DEI_THRH_SCALE;
in_data.qdma_private.threshold = deiThrhScale ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) QDMA_TxDynCngstDeiThrhScale_t QDMA_API_GET_TXQ_DEI_THRESHOLD_SCALE(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_DEI_THRH_SCALE;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_CNGST_AUTO_CONFIG(unsigned int mainType, QDMA_txCngstCfg_t *pTxCngstCfg){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_CNGST_AUTO_CONFIG;
in_data.qdma_private.pTxCngstCfg = pTxCngstCfg ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXQ_CNGST_AUTO_CONFIG(unsigned int mainType, QDMA_txCngstCfg_t *pTxCngstCfg){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_CNGST_AUTO_CONFIG;
in_data.qdma_private.pTxCngstCfg = pTxCngstCfg ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_CNGST_DYNAMIC_THRESHOLD(unsigned int mainType, QDMA_TxQDynCngstThrh_T *txqCngstThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_CNGST_DYNAMIC_THRESHOLD;
in_data.qdma_private.dynCngstThrhPtr = txqCngstThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXQ_CNGST_DYNAMIC_THRESHOLD(unsigned int mainType, QDMA_TxQDynCngstThrh_T *txqCngstThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_CNGST_DYNAMIC_THRESHOLD;
in_data.qdma_private.dynCngstThrhPtr = txqCngstThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_CNGST_TOTAL_THRESHOLD(unsigned int mainType, QDMA_TxQDynCngstTotalThrh_T *totalThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_CNGST_TOTAL_THRESHOLD;
in_data.qdma_private.totalThrhPtr = totalThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXQ_CNGST_TOTAL_THRESHOLD(unsigned int mainType, QDMA_TxQDynCngstTotalThrh_T *totalThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_CNGST_TOTAL_THRESHOLD;
in_data.qdma_private.totalThrhPtr = totalThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_CNGST_CHANNEL_THRESHOLD(unsigned int mainType, QDMA_TxQDynCngstChnlThrh_T *chnlThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_CNGST_CHANNEL_THRESHOLD;
in_data.qdma_private.chnlThrhPtr = chnlThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXQ_CNGST_CHANNEL_THRESHOLD(unsigned int mainType, QDMA_TxQDynCngstChnlThrh_T *chnlThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_CNGST_CHANNEL_THRESHOLD;
in_data.qdma_private.chnlThrhPtr = chnlThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_CNGST_QUEUE_THRESHOLD(unsigned int mainType, QDMA_TxQDynCngstQueueThrh_T *queueThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_CNGST_QUEUE_THRESHOLD;
in_data.qdma_private.queueThrhPtr = queueThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXQ_CNGST_QUEUE_THRESHOLD(unsigned int mainType, QDMA_TxQDynCngstQueueThrh_T *queueThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_CNGST_QUEUE_THRESHOLD;
in_data.qdma_private.queueThrhPtr = queueThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_CNGST_QUEUE_NONBLOCKING(unsigned int mainType, QDMA_TxQCngstQueueCfg_T *txqCngstQueueCfgPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_CNGST_QUEUE_NONBLOCKING;
in_data.qdma_private.txqCngstQueueCfgPtr = txqCngstQueueCfgPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXQ_CNGST_QUEUE_NONBLOCKING(unsigned int mainType, QDMA_TxQCngstQueueCfg_T *txqCngstQueueCfgPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_CNGST_QUEUE_NONBLOCKING;
in_data.qdma_private.txqCngstQueueCfgPtr = txqCngstQueueCfgPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_CNGST_CHANNEL_NONBLOCKING(unsigned int mainType, QDMA_TxQCngstChannelCfg_T *txqCngstChannelCfgPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_CNGST_CHANNEL_NONBLOCKING;
in_data.qdma_private.txqCngstChannelCfgPtr = txqCngstChannelCfgPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXQ_CNGST_CHANNEL_NONBLOCKING(unsigned int mainType, QDMA_TxQCngstChannelCfg_T *txqCngstChannelCfgPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_CNGST_CHANNEL_NONBLOCKING;
in_data.qdma_private.txqCngstChannelCfgPtr = txqCngstChannelCfgPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_PEEKRATE_PARAMS(unsigned int mainType, QDMA_PeekRateCfg_t *peekrateCfgPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_PEEKRATE_PARAMS;
in_data.qdma_private.peekrateCfgPtr = peekrateCfgPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXQ_PEEKRATE_PARAMS(unsigned int mainType, QDMA_PeekRateCfg_t *peekrateCfgPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_PEEKRATE_PARAMS;
in_data.qdma_private.peekrateCfgPtr = peekrateCfgPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_STATIC_QUEUE_NORMAL_THRESHOLD(unsigned int mainType, QDMA_TxQStaticNormalCfg_T *normThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_STATIC_QUEUE_NORMAL_THRESHOLD;
in_data.qdma_private.normThrhPtr = normThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_TXQ_STATIC_QUEUE_DEI_THRESHOLD(unsigned int mainType, QDMA_TxQStaticDeiCfg_T *deiThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_TXQ_STATIC_QUEUE_DEI_THRESHOLD;
in_data.qdma_private.deiThrhPtr = deiThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXQ_CNGST_DYNAMIC_INFO(unsigned int mainType, QDMA_TxQDynamicCngstInfo_T *allThrhPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_CNGST_DYNAMIC_INFO;
in_data.qdma_private.dynCfgPtr = allThrhPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_TXQ_CNGST_STATIC_INFO(unsigned int mainType, QDMA_TxQStaticCngstInfo_T *staticInfoPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_TXQ_CNGST_STATIC_INFO;
in_data.qdma_private.staticCfgPtr = staticInfoPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_VIRTUAL_CHANNEL_MODE(unsigned int mainType, QDMA_VirtualChannelMode_T *virChnlModePtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_VIRTUAL_CHANNEL_MODE;
in_data.qdma_private.virChnlModePtr = virChnlModePtr;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_VIRTUAL_CHANNEL_MODE(unsigned int mainType, QDMA_VirtualChannelMode_T *virChnlModePtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_VIRTUAL_CHANNEL_MODE;
in_data.qdma_private.virChnlModePtr = virChnlModePtr;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_SET_VIRTUAL_CHANNEL_QOS(unsigned int mainType, QDMA_VirtualChannelQoS_T *virChnlQoSPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_SET_VIRTUAL_CHANNEL_QOS;
in_data.qdma_private.virChnlQoSPtr = virChnlQoSPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_GET_VIRTUAL_CHANNEL_QOS(unsigned int mainType, QDMA_VirtualChannelQoS_T *virChnlQoSPtr){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_GET_VIRTUAL_CHANNEL_QOS;
in_data.qdma_private.virChnlQoSPtr = virChnlQoSPtr ;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int QDMA_API_READ_VIP_INFO(unsigned int mainType){
struct ECNT_QDMA_Data in_data;
int ret=0;
in_data.function_id = QDMA_FUNCTION_READ_VIP_INFO;
ret = __ECNT_HOOK(mainType, 0, (struct ecnt_data *)&in_data);
if(ret != ECNT_HOOK_ERROR)
return in_data.retValue;
else
return ECNT_HOOK_ERROR;
}
# 46 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h" 2
# 86 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_init(struct ECNT_QDMA_Data *qdma_data) ;
# 95 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_deinit(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_tx_dma_mode(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_rx_dma_mode(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_loopback_mode(struct ECNT_QDMA_Data *qdma_data) ;
# 126 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_register_callback_function(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_unregister_callback_function(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_enable_rxpkt_int(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_disable_rxpkt_int(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_receive_packets(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_transmit_packet(struct ECNT_QDMA_Data *qdma_data) ;
# 172 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_tx_qos_weight(struct ECNT_QDMA_Data *qdma_data) ;
# 182 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_get_tx_qos_weight(struct ECNT_QDMA_Data *qdma_data) ;
# 193 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_tx_qos(struct ECNT_QDMA_Data *qdma_data) ;
# 204 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_get_tx_qos(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_mac_limit_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_mac_limit_threshold(struct ECNT_QDMA_Data *qdma_data) ;
# 234 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_txbuf_threshold(struct ECNT_QDMA_Data *qdma_data) ;
# 244 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_get_txbuf_threshold(struct ECNT_QDMA_Data *qdma_data) ;
# 256 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_prefetch_mode(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_pktsize_overhead_en(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_pktsize_overhead_en(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_pktsize_overhead_value(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_pktsize_overhead_value(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_lmgr_low_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_lmgr_low_threshold(struct ECNT_QDMA_Data *qdma_data) ;
# 309 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_get_lmgr_status(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_clear_cpu_counters(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_cpu_counters(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_register_value(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_descriptor_info(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_irq_info(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_hwfwd_info(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_dbg_level(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_dma_busy(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_reg_polling(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_force_receive_rx_ring1(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_tx_drop_en(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_tx_drop_en(struct ECNT_QDMA_Data *qdma_data) ;
# 402 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_tx_ratemeter(struct ECNT_QDMA_Data *qdma_data) ;
# 412 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_get_tx_ratemeter(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_tx_channel_datarate(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_enable_tx_ratelimit(struct ECNT_QDMA_Data *qdma_data) ;
# 436 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_tx_ratelimit_cfg(struct ECNT_QDMA_Data *qdma_data) ;
# 445 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_get_tx_ratelimit_cfg(struct ECNT_QDMA_Data *qdma_data) ;
# 455 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_tx_ratelimit(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_tx_ratelimit(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_tx_dba_report(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_tx_dba_report(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_rx_protect_en(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_rx_protect_en(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_rx_low_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_rx_low_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_rx_ratelimit_en(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_rx_ratelimit_pkt_mode(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_rx_ratelimit_cfg(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_rx_ratelimit(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_rx_ratelimit(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_txq_dei_drop_mode(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_dei_drop_mode(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_txq_cngst_mode(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_cngst_mode(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_txq_dei_threshold_scale(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_dei_threshold_scale(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_txq_cngst_auto_config(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_cngst_auto_config(struct ECNT_QDMA_Data *qdma_data) ;
# 599 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_txq_cngst_dynamic_threshold(struct ECNT_QDMA_Data *qdma_data) ;
# 608 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_get_txq_cngst_dynamic_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_txq_cngst_total_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_cngst_total_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_txq_cngst_channel_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_cngst_channel_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_txq_cngst_queue_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_cngst_queue_threshold(struct ECNT_QDMA_Data *qdma_data) ;
# 660 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_txq_peekrate_params(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_peekrate_params(struct ECNT_QDMA_Data *qdma_data) ;
# 676 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_txq_cngst_static_queue_normal_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_txq_cngst_static_queue_dei_threshold(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_cngst_dynamic_info(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_cngst_static_info(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_txq_cngst_queue_nonblocking(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_cngst_queue_nonblocking(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_set_txq_cngst_channel_nonblocking(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_txq_cngst_channel_nonblocking(struct ECNT_QDMA_Data *qdma_data) ;
# 736 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_virtual_channel_mode(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_virtual_channel_mode(struct ECNT_QDMA_Data *qdma_data) ;
# 753 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_virtual_channel_qos(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_get_virtual_channel_qos(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_clear_dbg_cntr_value_all(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_clear_and_set_dbg_cntr_channel_group(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_clear_and_set_dbg_cntr_queue_group(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_dbg_cntr_value(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_tx_qos(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_virtual_channel_qos(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_tx_ratelimit(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_rx_ratelimit(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_tx_dba_report(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_txq_cngst(struct ECNT_QDMA_Data *qdma_data) ;
int qdma_dump_info_all(struct ECNT_QDMA_Data *qdma_data) ;
# 802 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_dbg_cntr_info(QDMA_DBG_CNTR_T *dbgCntrPtr) ;
int qdma_clear_and_enable_dbg_cntr_info(QDMA_DBG_CNTR_T *dbgCntrPtr) ;
# 820 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_get_dbg_cntr_info(QDMA_DBG_CNTR_T *dbgCntrPtr) ;
# 830 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_txq_cngst_cfg(QDMA_TxQCngstCfg_T *txqCngstCfgPtr) ;
# 840 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_get_txq_cngst_cfg(QDMA_TxQCngstCfg_T *txqCngstCfgPtr) ;
# 865 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
void qdma_set_txqueue_dei_mode(QDMA_Mode_t deiDropMode) ;
QDMA_Mode_t qdma_get_txqueue_dei_mode(void) ;
void qdma_set_txqueue_threshold_mode(QDMA_Mode_t thrsldDropMode) ;
QDMA_Mode_t qdma_get_txqueue_threshold_mode(void) ;
# 899 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/qdma/EN7512/qdma_api.h"
int qdma_set_congest_threshold(QDMA_TxQStaticCngstThrh_T *pThreshold) ;
int qdma_get_congest_config(QDMA_TxQueueCongestCfg_T *pCongest) ;
void qdmaSetDbgCntrCfg_init(void);
void qdmaGetDbgCntrCfg_Val(uint *cpuTxCnt, uint *cpuRxCnt, uint *fwdTxCnt, uint *fwdRxCnt);
int qdma_set_tx_cngst_mode(struct ECNT_QDMA_Data *qdma_data);
int qdma_get_tx_cngst_mode(struct ECNT_QDMA_Data *qdma_data);
int qdma_read_vip_info(void);
# 11 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_global.h" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy.h" 1
# 1 "include/ecnt_hook/ecnt_hook_pon_mac.h" 1
# 46 "include/ecnt_hook/ecnt_hook_pon_mac.h"
# 1 "include/ecnt_hook/ecnt_hook.h" 1
# 47 "include/ecnt_hook/ecnt_hook_pon_mac.h" 2
# 60 "include/ecnt_hook/ecnt_hook_pon_mac.h"
typedef enum Event_Src_Module_e{
XPON_PHY_MODULE,
XPON_SN_SET,
}Event_Src_Module_t;
typedef enum PHY_Event_Source_e{
PON_PHY_EVENT_SOURCE_HW_IRQ ,
PON_PHY_EVENT_SOURCE_SW_POLL ,
}PHY_Event_Source_t;
typedef enum PHY_Event_Type_e {
PHY_EVENT_TRANS_LOS_INT = 0x00 ,
PHY_EVENT_PHY_LOF_INT ,
PHY_EVENT_TF_INT ,
PHY_EVENT_TRANS_INT ,
PHY_EVENT_TRANS_SD_FAIL_INT ,
PHY_EVENT_PHYRDY_INT ,
PHY_EVENT_PHY_ILLG_INT ,
PHY_EVENT_I2CM_INT ,
PHY_EVENT_TRANS_LOS_ILLG_INT ,
PHY_EVENT_MAX_INT = 0x100 ,
PHY_EVENT_START_ROGUE_MODE ,
PHY_EVENT_STOP_ROGUE_MODE ,
PHY_EVENT_CALIBRATION_START ,
PHY_EVENT_CALIBRATION_STOP ,
PHY_EVENT_TX_POWER_ON ,
PHY_EVENT_TX_POWER_OFF ,
} PHY_Event_Type_t ;
typedef struct PON_PHY_Event_data_s{
PHY_Event_Source_t src;
PHY_Event_Type_t id;
} PON_PHY_Event_data_t;
enum ECNT_XPON_MAC_SUBTYPE {
ECNT_XPON_MAC_HOOK,
};
typedef struct xpon_mac_hook_data_s {
Event_Src_Module_t src_module;
union {
PON_PHY_Event_data_t * pEvent;
unsigned char sn[8];
};
}xpon_mac_hook_data_t;
# 132 "include/ecnt_hook/ecnt_hook_pon_mac.h"
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void ECNT_API_XPON_SN_SET(unsigned char sn[8])
{
struct xpon_mac_hook_data_s data = {0} ;
data.src_module = XPON_SN_SET;
memcpy(data.sn, sn, 8);
if(ECNT_HOOK_ERROR == __ECNT_HOOK(ECNT_XPON_MAC, ECNT_XPON_MAC_HOOK, (struct ecnt_data * )&data) ){
panic("ECNT_HOOK_ERROR occur. %s:%d\n", (__func__), 139);
}
}
# 5 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy.h" 2
# 1 "include/ecnt_hook/ecnt_hook_pon_phy.h" 1
# 140 "include/ecnt_hook/ecnt_hook_pon_phy.h"
enum {
XPON_PHY_API_TYPE_GET = 0,
XPON_PHY_API_TYPE_SET,
};
typedef enum XponPhy_Mode_e{
PHY_EPON_CONFIG,
PHY_GPON_CONFIG,
PHY_UNKNOWN_CONFIG,
} Xpon_Phy_Mode_t ;
typedef enum PHY_Los_Status_e{
PHY_LINK_STATUS_LOS,
PHY_LINK_STATUS_READY,
PHY_LINK_STATUS_UNKNOWN,
}PHY_Los_Status_t;
typedef enum {
PHY_CALLBACK_XPON_STATE_NOTIFY =8,
} PHY_CbType_t ;
typedef enum {
PHY_TRANS_NO_ALARM = 0x0,
PHY_TRANS_TX_HIGH_POWER_ALARM = 0x01,
PHY_TRANS_TX_LOW_POWER_ALARM = 0x02,
PHY_TRANS_TX_HIGH_CUR_ALARM = 0x04,
PHY_TRANS_TX_LOW_CUR_ALARM = 0x08,
PHY_TRANS_RX_HIGH_POWER_ALARM = 0x10,
PHY_TRANS_RX_LOW_POWER_ALARM = 0x20
} ENUM_PhyTransAlarm ;
typedef enum {
PHY_ERR_CNT_CLR = 0x01,
PHY_BIP_CNT_CLR = 0x02,
PHY_RXFRAME_CNT_CLR = 0x04,
PHY_TXFRAME_CNT_CLR = 0x08,
PHY_EPON_ERR_CNT_CLR = 0x10
} ENUM_PhyCounterClr;
typedef enum {
PHY_GUARD_BIT_NUM_EN = 0x01,
PHY_PRE_T1_NUM_EN = 0x02,
PHY_PRE_T2_NUM_EN = 0x04,
PHY_PRE_T3_PAT_EN = 0x08,
PHY_T3_O4_PRE_EN = 0x10,
PHY_T3_O5_PRE_EN = 0x20,
PHY_EXT_BUR_MODE_EN = 0x40,
PHY_OPER_RANG_EN = 0x80,
PHY_DIS_SCRAM_EN = 0x200,
PHY_EXTB_LENG_SEL_EN = 0x100
} ENUM_GponPreb_T ;
enum ECNT_XPON_PHY_SUBTYPE {
ECNT_XPON_PHY_API,
};
typedef struct
{
ushort temprature;
ushort supply_voltage;
ushort tx_current;
ushort tx_power;
ushort rx_power;
}PHY_TransParam_T, *PPHY_TransParam_T;
typedef struct{
PHY_TransParam_T params;
uint alarms;
} PHY_Trans_Status_t;
typedef struct{
Xpon_Phy_Mode_t mode ;
int txEnable;
} PHY_Mode_Cfg_t;
typedef struct
{
uint correct_bytes;
uint correct_codewords;
uint uncorrect_codewords;
uint total_rx_codewords;
uint fec_seconds;
}PHY_FecCount_T, *PPHY_FecCount_T;
typedef struct
{
uint frame_count_low;
uint frame_count_high;
uint lof_counter;
}PHY_FrameCount_T, *PPHY_FrameCount_T;
typedef struct{
uint delimiter ;
unchar guard_time ;
} PHY_GPON_Delimiter_Guard_t;
typedef struct
{
unchar trans_tx_sd_inv_status;
unchar trans_burst_en_inv_status;
unchar trans_tx_fault_inv_status;
}PHY_TransConfig_T, *PPHY_TransConfig_T;
typedef struct
{
unchar guard_bit_num;
unchar preamble_t1_num;
unchar preamble_t2_num;
unchar preamble_t3_pat;
unchar t3_O4_preamble;
unchar t3_O5_preamble;
unchar extend_burst_mode;
unchar oper_ranged_st;
unchar dis_scramble;
unchar extb_length_sel;
uint mask;
}PHY_GponPreb_T, *PPHY_GponPreb_T;
typedef struct xpon_phy_api_data_s {
int api_type ;
unsigned int cmd_id ;
int ret ;
union{
int * data ;
PHY_Mode_Cfg_t * phy_mode_cfg ;
PHY_Trans_Status_t * trasn_status ;
PHY_FecCount_T * rx_fec_cnt ;
PHY_FrameCount_T * rx_frame_cnt ;
PHY_GPON_Delimiter_Guard_t * delimiter_guard ;
PHY_TransConfig_T * tx_trans_cfg ;
PHY_GponPreb_T * gpon_preamble ;
PHY_GponPreb_T * gpon_ex_preamble;
void * raw ;
};
}xpon_phy_api_data_t;
# 6 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy.h" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_def.h" 1
# 8 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy.h" 2
typedef struct {
unchar t1 ;
unchar t2 ;
ushort intCounter ;
uint intTime ;
struct {
unchar txPowerEnFlag : 1 ;
unchar txLongFlag : 1 ;
unchar resv : 3 ;
Xpon_Phy_Mode_t mode : 2 ;
unchar rogue : 1 ;
} flags ;
} PHY_Config_T ;
typedef struct {
struct timer_list phy_timer ;
struct timer_list int_timer ;
struct timer_list mt7570_timer ;
struct timer_list APD_timer ;
struct task_struct *LDDLA_task_wait ;
ushort i2c_u2_clk_div;
void (*phyXponStateNotifyHandler)(int stateNotifyType) ;
PHY_Config_T phyCfg ;
ushort debugLevel ;
unchar is_phy_start ;
struct timer_list event_poll_timer ;
spinlock_t event_handle_lock;
PHY_Los_Status_t phy_status ;
uint phyGuardBitDelm;
uint phyPreamble ;
uint phyExtPreamble ;
struct work_struct EN7570_reset ;
struct work_struct EN7570_rouge_clear ;
} PHY_GlbPriv_T ;
ushort phy_I2C_read(unchar u1CHannelID, ushort u2ClkDiv, unchar u1DevAddr,
unchar u1WordAddrNum, uint u4WordAddr, unchar *pu1Buf,
ushort u2ByteCnt);
ushort phy_I2C_write(unchar u1CHannelID, ushort u2ClkDiv, unchar u1DevAddr,
unchar u1WordAddrNum, uint u4WordAddr, unchar *pu1Buf,
ushort u2ByteCnt);
int phy_debug_init(void) ;
int phy_debug_deinit(void) ;
unchar phy_gpon_mode(void) ;
void phy_tx_fault_reset(void);
void phy_tx_power_config(unchar enable);
int phy_trans_power_switch(unchar trans_switch);
int los_status_init(void);
int phy_ready_status(void);
int phy_los_status(void);
extern PHY_GlbPriv_T *gpPhyPriv;
void phy_event_handler(PON_PHY_Event_data_t * pEvent_data);
void phy_event_poll(ulong data);
int phy_mode_config(Xpon_Phy_Mode_t xpon_mode, int tx_enable);
int phy_int_config(uint int_type);
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void XPON_MAC_EVENT_HANDLER(PON_PHY_Event_data_t * pEvent)
{
struct xpon_mac_hook_data_s data = {0} ;
data.src_module = XPON_PHY_MODULE ;
data.pEvent = pEvent ;
if(ECNT_HOOK_ERROR == __ECNT_HOOK(ECNT_XPON_MAC, ECNT_XPON_MAC_HOOK, (struct ecnt_data * )&data) ){
panic("ECNT_HOOK_ERROR occur with event id:%d. %s:%d\n", pEvent->id, (__func__), 93);
}
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) void REPORT_EVENT_TO_MAC(PHY_Event_Type_t id)
{
PON_PHY_Event_data_t event = {0};
struct xpon_mac_hook_data_s data = {0} ;
event.id = id ;
data.src_module = XPON_PHY_MODULE ;
data.pEvent = &event ;
if(ECNT_HOOK_ERROR == __ECNT_HOOK(ECNT_XPON_MAC, ECNT_XPON_MAC_HOOK, (struct ecnt_data * )&data) ){
panic("ECNT_HOOK_ERROR occur with event id:%d. %s:%d\n", id, (__func__), 107);
}
}
# 12 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_global.h" 2
extern PHY_GlbPriv_T *gpPhyPriv ;
# 14 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_api.h" 1
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_types.h" 1
# 16 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_types.h"
typedef unsigned int UINT32 ;
typedef unsigned short UINT16 ;
typedef unsigned char UINT8 ;
typedef unsigned int FIELD;
# 7 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_api.h" 2
int phy_ber_alarm(void);
int phy_trans_power_switch(unchar trans_switch);
int phy_gpon_extend_preamble(PPHY_GponPreb_T pon_preb);
int phy_gpon_delimiter_guard(uint delimiter_pat, unchar guard_time_pat);
void phy_counter_clear(unchar counter_type);
void phy_rx_fec_counter(PPHY_FecCount_T fec_counter);
void phy_rx_frame_counter(PPHY_FrameCount_T frame_counter);
void phy_rx_sensitivity_test(void);
int phy_bip_counter(void);
int phy_tx_frame_counter(void);
int phy_tx_burst_counter(void);
int phy_epon_frame_err_cnt(void);
void phy_trans_model_setting(void);
int phy_tx_alarm(void);
int phy_rx_power_alarm(void);
void phy_trans_alarm_getting(PPHY_TransAlarm_T transceiver_alarm);
int phy_trans_rx_setting(unchar rx_sd_inv);
int phy_trans_rx_getting(void);
int phy_trans_tx_setting(PPHY_TransConfig_T trans_status);
void phy_trans_tx_getting(PPHY_TransConfig_T trans_status);
int phy_rogue_prbs_config(unchar rogue_mode);
int phy_tx_burst_config(unchar burst_mode);
int phy_tx_burst_getting(void);
int phy_tx_amp_setting(unchar amp_level);
int phy_rx_fec_setting(unchar fec_control);
int phy_rx_fec_getting(void);
int phy_rx_fec_status(void);
int eponMode_phy_reset(void);
int phy_int_getting(void);
int phy_lof_status(void);
int phy_cnt_enable(unchar errcnt_en, unchar bipcnt_en, unchar fmcnt_en);
int phy_reset_counter(void);
int phy_bit_delay(unchar delay_value);
int phy_gpon_tx_power(ushort tx_power);
void phy_tx_test_pattern(uint pattern);
int phy_fw_ready(unchar fwrdy_en);
int phy_freq_meter(unchar freq_en, unchar freq_sele);
int phy_byte_delay_manual(unchar byte_dly_en, unchar byte_dly);
int phy_tx_fec_manual(unchar tx_fec_en);
int phy_set_epon_ts_continue_mode(uint mode);
int mt7570_init(void);
void mt7570_TGEN(int xPON);
void mt7570_TxSD_level_set(void);
int mt7570_TxSD_level_calibration(void);
void mt7570_LOS_level_set(void);
void mt7570_ADC_calibration(void);
void mt7570_APD_initialization(void);
void mt7570_APD_control(void);
void mt7570_load_init_current(void);
void mt7570_load_MPDL_MPDH(void);
UINT16 mt7570_temperature_get_8472(void);
UINT16 mt7570_supply_voltage_get_8472(void);
UINT16 mt7570_bias_current_get_8472(void);
short mt7570_TxVoltage_get(void);
short mt7570_RxRSSI_get(void);
UINT16 mt7570_TxPower_get_8472(void);
UINT16 mt7570_RxPower_get_8472(void);
short mt7570_RxPower_get(void);
void mt7570_RougeONU_clear(void);
void mt7570_safe_circuit_reset(void);
void mt7570_trans_model_setting(void);
void mt7570_tx_power_alarm_get(void);
void mt7570_rx_power_alarm_get(void);
int save_flash_matrix(void);
void flash_dump(void);
void set_flash_register(uint reg, uint offset);
void set_flash_register_default(void);
int get_flash_matrix(void);
int get_flash_register(int address_offset);
int mt7570_information_output(uint select);
int mt7570_ADC_temperature_get(void);
int mt7570_ADC_voltage_get(void);
void mt7570_register_dump(int length);
int mt7570_MPD_current(void);
void mt7570_MPD_current_calibration(void);
int mt7570_RSSI_current(void);
int mt7570_dark_current(void);
void mt7570_RSSI_calibration(void);
void GPON_Tx_calibration(void);
void EPON_Tx_calibration(void);
void mt7570_restart_ERC(void);
int mt7570_EN7570_detection(void);
void mt7570_ERC_filter(void);
void mt7570_TIAGAIN_set(void);
void set_flash_register_BiasModCurrent(void);
void set_flash_register_P0P1(void);
void set_flash_register_APD(uint slope_up, uint slope_dn, uint VAPD25);
void set_flash_register_LOS(void);
void set_flash_register_DDMI_TxPower(uint TxPower, uint offset);
void set_flash_register_DDMI_RxPower(uint RxPower, uint offset);
void set_flash_register_temperature_offset(uint input, uint slope);
void mt7570_APD_I2C_write(unchar ptr[1]);
void DDMI_check_8472(void);
void set_flash_register_TIAGAIN(void);
int GPON_BER(int pattern);
int EPON_BER(int pattern);
void show_BoB_information(void);
void mt7570_temperature_get(void);
void mt7570_TxEyeCorrection(void);
void mt7570_calibration_pattern(int input);
void mt7570_disable_pattern(void);
void mt7570_CDR(int CDR_switch);
void mt7570_OpenLoopMode(void);
void mt7570_DualClosedLoopMode(void);
void mt7570_SingleClosedLoopMode(void);
void mt7570_Vtemp_ADC_get(void);
void mt7570_internal_clock(void);
void SOL_mt7570_ERTemperatureCompensation(void);
void mt7570_BiasTracking(void);
void mt7570_FiberPlug_Protect(void);
void mt7570_ERTemperatureCompensation(void);
void mt7570_restart_ERC_P0(void);
void mt7570_LUT_recover(void);
void mt7570_sw_reset(void);
void mt7570_RSSI_gain_init(void);
void set_flash_register_T0T1delay(void);
void set_flash_register_Tx_data(void);
void set_flash_register_T0CT1C(void);
void mt7570_OpenLoopControl(void);
void mt7570_LOS_init(void);
# 15 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_types.h" 1
# 16 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_debug.h" 1
typedef enum {
PHY_MSG_ERR = 0x0001,
PHY_MSG_INT = 0x0002,
PHY_MSG_ACT = 0x0004,
PHY_MSG_TRACE = 0x0008,
PHY_MSG_DBG = 0x0010
} xPON_PHY_DebugMsg_t ;
# 49 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_debug.h"
extern int xpon_phy_print_open;
# 17 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy.h" 1
# 18 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_init.h" 1
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_global.h" 1
# 6 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_init.h" 2
int phy_register_cb_handler(PHY_CbType_t type, void *pCbFun) ;
int phy_unregister_cb_handler(PHY_CbType_t type) ;
int xpon_phy_start(void) ;
int pon_phy_init(void) ;
void pon_phy_deinit(void) ;
void phy_los_handler(void) ;
void phy_ready_handler(void) ;
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int is_phy_sync(void)
{
return ((phy_ready_status() == (1)) && (phy_los_status() == (0x00)) );
}
static inline __attribute__((always_inline)) __attribute__((no_instrument_function)) int get_phy_mode(void)
{
return gpPhyPriv->phyCfg.flags.mode ;
}
extern struct workqueue_struct * i2c_access_queue;
# 19 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
# 1 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_tx.h" 1
# 47 "/opt/bba/BBA1.5_platform/build/../../EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/inc/phy_tx.h"
int phy_gpon_preamble(PPHY_GponPreb_T pon_preb);
int phy_tx_fec_status(void);
void mt7570_safe_circuit_reset_for_work_queue(struct work_struct * worker);
# 20 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c" 2
int mt7570_version = 107;
int internal_DDMI = 1;
int fast_DDMI = 0;
int TEC = 1;
int TEC_switch = 0;
int xPON_mode = -1;
int mt7570_select = 0;
int vEN7570 = 1;
int BG1V76 = 0;
int BG0V875 = 0;
int RSSI_Vref = 0;
int RSSI_V = 0;
int ETC = 0;
int FiberPlug = 0;
int PatternEnabled = 0;
float RSSI_factor = 0;
int delay_cnt = 0;
uint cnt7570 = 0;
int MPD_current_cnt = 0;
int T0C_extension = 0;
float IC_temperature = 25.0;
float BOSA_temperature = 20.0;
float Env_temperature = 25.0;
float APD_voltage = 35.0;
float ADC_slope = 0;
float ADC_offset = 0;
int global_temperature_code = 0;
int global_vcc_code = 0;
uint global_bias_current = 0;
uint global_MPDL = 0;
uint global_MPDH = 0;
uint global_modulation_current = 0;
int global_rssi_current = 0;
int global_mpd_current = 0;
int global_RSSI_current = 0;
int global_MPD_current = 0;
int global_MPD_current_var = 0;
int global_DDMI_rx_cal_flag =0;
UINT16 global_supply_voltage_8472 = 0;
UINT16 global_IC_temperature_8472 = 0;
UINT16 global_bias_current_8472 = 0;
UINT16 DDMI_voltage = 0;
UINT16 DDMI_current = 0;
UINT16 DDMI_temperature = 0;
UINT16 DDMI_tx_power = 0;
UINT16 DDMI_rx_power = 0;
int Ibias_outputlow_flag = 0;
uint MPD_current_offset = 0;
uint T_APD = 600;
uint flash_matrix[100];
uint mt7570_alarm = 0;
uint SCL =0 ;
uint DOL =0 ;
uint BiasTracking_switch = 0;
uint BOSA_Ith = 3000;
uint LUT_Ibias_Imod[64][2] =
{
{0x106, 0x3b2},
{0x10a, 0x3b2},
{0x10f, 0x3b6},
{0x118, 0x3bb},
{0x11d, 0x3bb},
{0x121, 0x3c0},
{0x12a, 0x3c4},
{0x12f, 0x3c4},
{0x133, 0x3c9},
{0x13c, 0x3cd},
{0x141, 0x3cd},
{0x146, 0x3d2},
{0x14e, 0x3d6},
{0x157, 0x3d8},
{0x164, 0x3e4},
{0x171, 0x3ed},
{0x17e, 0x3f6},
{0x18b, 0x3ff},
{0x198, 0x408},
{0x1a5, 0x411},
{0x1ad, 0x416},
{0x1ba, 0x41f},
{0x1c7, 0x428},
{0x1d4, 0x431},
{0x1e1, 0x43a},
{0x1ee, 0x444},
{0x1fb, 0x44d},
{0x214, 0x45a},
{0x223, 0x468},
{0x236, 0x476},
{0x245, 0x488},
{0x258, 0x495},
{0x268, 0x4a3},
{0x277, 0x4b1},
{0x28a, 0x4c3},
{0x299, 0x4d1},
{0x2ac, 0x4de},
{0x2bb, 0x4ec},
{0x2cf, 0x4fe},
{0x2fe, 0x510},
{0x332, 0x527},
{0x362, 0x53e},
{0x396, 0x555},
{0x3c6, 0x56b},
{0x3fa, 0x582},
{0x46b, 0x5b9},
{0x4dd, 0x5ef},
{0x54e, 0x626},
{0x5c4, 0x65c},
{0x635, 0x693},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce},
{0x666, 0x6ce}
};
atomic_t i2c_protect = { (0) };
int
i2c_access_protect(void){
int count = 10000;
while((*(volatile typeof((&i2c_protect)->counter) *)&((&i2c_protect)->counter)) == 1 ){
__udelay(1);
if(count==0) return -1;
count --;
}
return 0;
}
# 184 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_register_dump(int length)
{
int i = 0;
unchar ptr[4];
uint return_value = 0;
for(i = 0 ; i < length ; i++)
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (i<<2), ptr, 4);
return_value = ptr[0] | (ptr[1]<<8) | (ptr[2]<<16) | (ptr[3]<<24);
printk("EN7570 reg 0x%.3x", i*4);
printk("\t%.8x\n", return_value);
}
}
# 210 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int get_flash_register(int address_offset)
{
uint return_int = 0;
return_int = flash_matrix[(address_offset>>2)];
return return_int;
}
# 228 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int get_flash_matrix(void)
{
struct file *srcf = ((void *)0);
char *src = ((void *)0);
mm_segment_t orgfs;
src = "/tmp/7570_bob.conf";
orgfs = (current_thread_info()->addr_limit);
(current_thread_info()->addr_limit = (((mm_segment_t) { 0UL })));
if (src && *src)
{
srcf = filp_open(src, 00000000, 0);
if (IS_ERR(srcf))
{
printk("--> Error opening \n");
goto error;
}
else
{
srcf->f_op->read(srcf, flash_matrix, sizeof(flash_matrix), &srcf->f_pos);
filp_close(srcf,((void *)0));
}
}
(current_thread_info()->addr_limit = (orgfs));
return 0;
error:
(current_thread_info()->addr_limit = (orgfs));
return -1;
}
# 277 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register(uint reg, uint offset)
{
flash_matrix[offset>>2] = reg;
}
# 293 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_default(void)
{
int index = 0;
for(index = 0; index < 40; index++)
flash_matrix[index] = 0xffffffff;
}
# 312 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_BiasModCurrent(void)
{
uint ibias = mt7570_information_output(0x03);
uint imod = mt7570_information_output(0x04 );
set_flash_register(ibias, (0x000));
set_flash_register(imod , (0x004) );
printk("Ibias = 0x%x\n", ibias);
printk("Imod = 0x%x\n" , imod );
}
# 333 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_P0P1(void)
{
uint p0 = mt7570_information_output(0x05);
uint p1 = mt7570_information_output(0x06);
set_flash_register(p0, (0x008));
set_flash_register(p1, (0x00c));
printk("P0 = 0x%x\n", p0);
printk("P1 = 0x%x\n", p1);
}
# 354 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_APD(uint slope_up, uint slope_dn, uint VAPD)
{
set_flash_register(slope_up, (0x010));
set_flash_register(slope_dn, (0x014));
set_flash_register(VAPD , (0x018));
printk("slope up = 0x%x\n" , slope_up);
printk("slope down = 0x%x\n", slope_dn);
printk("VAPD@25C = 0x%x\n" , VAPD );
}
# 375 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_LOS(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x011C), ptr, 4);
ptr[3] = ptr[3] & 0x7f;
ptr[2] = ptr[2] & 0x7f;
set_flash_register(ptr[3], (0x024));
set_flash_register(ptr[2], (0x020));
printk("LOS low = 0x%x\n", ptr[3]);
printk("LOS high = 0x%x\n", ptr[2]);
}
# 398 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_DDMI_TxPower(uint TxPower, uint offset)
{
uint input = 0;
input = ( (TxPower<<16)&0xffff0000 ) | (mt7570_MPD_current()&0x0000ffff);
set_flash_register(input, offset);
if( vEN7570==0 && offset==(0x040) )
set_flash_register(input&0x0000ffff, (0x088));
printk("0x%08x\n", input);
}
# 421 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_DDMI_RxPower(uint RxPower, uint offset)
{
uint input = 0;
input = ( (RxPower<<16)&0xffff0000 ) | (mt7570_RSSI_current()&0x0000ffff);
set_flash_register(input, offset);
printk("0x%08x\n", input);
global_DDMI_rx_cal_flag = 0;
}
# 442 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_TIAGAIN(void)
{
unchar ptr[1];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000)+0x0001 , ptr, 1);
ptr[0] = ptr[0] >> 6;
set_flash_register(ptr[0], (0x028));
printk("TIAGAIN = 0x%x\n", ptr[0]);
}
# 464 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_EnvTemp(uint temperature_input)
{
uint write_data = 0;
uint Env_temperature_offset = 0;
set_flash_register(temperature_input, (0x060));
printk("Env_temperature = %d.%.1dC\n", temperature_input/10, temperature_input%10);
mt7570_temperature_get();
Env_temperature_offset = (uint)(IC_temperature*10) - temperature_input;
if( Env_temperature_offset < 0 )
printk("Not thermal balance\n");
else
{
printk("Env_temperature_offset = %d.%.1dC\n", Env_temperature_offset/10, Env_temperature_offset%10);
write_data = (Env_temperature_offset << 16) | (get_flash_register((0x084)) & 0x0000ffff);
set_flash_register(write_data, (0x084));
}
}
# 502 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_temperature_offset(uint temperature_input, uint slope)
{
uint tmp;
if ((temperature_input > 0x500) || (temperature_input < 0))
{
printk ("Please input temperature value in range : 0 ~ 0x500\n");
return;
}
if (slope == 0)
slope = 0xffff;
else
printk("Temperature slope = 0x%x\n",slope);
tmp = (slope << 16) | 0xffff;
set_flash_register(tmp, (0x080));
mt7570_temperature_get();
tmp = temperature_input - IC_temperature*10 + 495.8*10;
printk("Temperature offset = 0x%x\n",tmp);
tmp = (tmp & 0x0000ffff) | (slope << 16) ;
set_flash_register(tmp, (0x080));
}
# 545 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_T0T1delay(void)
{
unchar ptr[1];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 1);
set_flash_register(ptr[0], (0x098));
printk("T0/T1 delay = 0x%x\n", ptr[0]);
}
# 568 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_T0CT1C(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[1] = (ptr[1] & 0x7f);
ptr[2] = (ptr[2] & 0x7f);
set_flash_register( ( (ptr[1]<<16) | ptr[2] ), (0x09c));
printk("T0C = 0x%x\nT1C = 0x%x\n", ptr[2], ptr[1]);
}
# 593 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void set_flash_register_Tx_data(void)
{
set_flash_register_BiasModCurrent();
set_flash_register_P0P1();
set_flash_register_TIAGAIN();
set_flash_register_T0T1delay();
set_flash_register_T0CT1C();
}
# 614 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int save_flash_matrix(void)
{
struct file *srcf = ((void *)0);
char *src = ((void *)0);
mm_segment_t orgfs;
src = "/tmp/7570_bob.conf";
orgfs = (current_thread_info()->addr_limit);
(current_thread_info()->addr_limit = (((mm_segment_t) { 0UL })));
if (src && *src)
{
srcf = filp_open(src, 00000002|0x0100, 0);
if (IS_ERR(srcf))
{
printk("--> Error opening \n");
goto error;
}
else
{
srcf->f_pos = 0;
if(srcf->f_op->write(srcf, flash_matrix, sizeof(flash_matrix), &srcf->f_pos) >0)
{
}
else
{
printk("--> Error write \n");
filp_close(srcf,((void *)0));
goto error;
}
filp_close(srcf,((void *)0));
}
}
(current_thread_info()->addr_limit = (orgfs));
return 0;
error:
(current_thread_info()->addr_limit = (orgfs));
return -1;
}
# 671 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void flash_dump(void)
{
int i = 0;
int j = 0;
for(i=0; i<40; i++)
{
j = 4*i;
printk("FLASH address 0x%x", j);
printk("\t");
printk("0x%08x\n", get_flash_register(j));
}
}
# 696 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void DOL_flash_dump(void)
{
int i = 0;
int j = 0;
printk("FLASH");
printk("\t");
printk("temperature");
printk("\t");
printk("Value\n");
for(i=0; i<16; i++)
{
j = 0xa0+4*i;
printk("0x%x", j);
printk("\t");
printk("%d", -40+(10*i));
printk("\t");
printk("\t");
printk("0x%08x\n", get_flash_register(j));
}
}
# 732 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void GPON_Tx_calibration(void)
{
mt7570_ERC_filter();
mt7570_load_init_current();
phy_mode_config(PHY_GPON_CONFIG, (1));
mt7570_TGEN(PHY_GPON_CONFIG);
mt7570_calibration_pattern(PHY_GPON_CONFIG);
mt7570_safe_circuit_reset();
printk("GPON_Tx_calibration done\n");
}
# 767 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void EPON_Tx_calibration(void)
{
mt7570_ERC_filter();
mt7570_load_init_current();
phy_mode_config(PHY_EPON_CONFIG, (1));
mt7570_TGEN(PHY_EPON_CONFIG);
mt7570_calibration_pattern(PHY_EPON_CONFIG);
mt7570_safe_circuit_reset();
printk("EPON_Tx_calibration done\n");
}
# 802 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int GPON_BER(int pattern)
{
int read_data = 0;
mt7570_CDR(1);
REPORT_EVENT_TO_MAC(PHY_EVENT_CALIBRATION_START);
( (__builtin_constant_p(100) && (100)<=5) ? __udelay((100)*1000) : ({unsigned long __ms=(100); while (__ms--) __udelay(1000);}));
phy_mode_config(PHY_GPON_CONFIG, (1));
( (__builtin_constant_p(100) && (100)<=5) ? __udelay((100)*1000) : ({unsigned long __ms=(100); while (__ms--) __udelay(1000);}));
iowrite32(0x0, (void *)(0xbfaf0400 +0x00a0));
switch(pattern)
{
case 5:
iowrite32(0x81fd53, (void *)(0xbfaf0200 +0x00a0));
iowrite32(0xffffff, (void *)(0xbfaf0200 +0x00a4));
iowrite32(0x5, (void *)(0xbfaf0400 +0x00a0));
iowrite32(0x1, (void *)(0xbfaf0400 +0x00a4));
break;
case 6:
iowrite32(0x71fd53, (void *)(0xbfaf0200 +0x00a0));
iowrite32(0x7fffff, (void *)(0xbfaf0200 +0x00a4));
iowrite32(0x6, (void *)(0xbfaf0400 +0x00a0));
iowrite32(0x1, (void *)(0xbfaf0400 +0x00a4));
break;
case 7:
iowrite32(0xff1fd53, (void *)(0xbfaf0200 +0x00a0));
iowrite32(0x7ffffff, (void *)(0xbfaf0200 +0x00a4));
iowrite32(0x7, (void *)(0xbfaf0400 +0x00a0));
iowrite32(0x1, (void *)(0xbfaf0400 +0x00a4));
break;
default:
break;
}
( (__builtin_constant_p(250) && (250)<=5) ? __udelay((250)*1000) : ({unsigned long __ms=(250); while (__ms--) __udelay(1000);}));
read_data = regReadPhy32(0xbfaf0200 +0x00c4);
if( read_data == 5 )
printk("Pattern Aligned\n");
else
printk("Aligned Failed\n");
printk("%x\n", read_data);
return read_data;
}
# 881 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int EPON_BER(int pattern)
{
int read_data = 0;
mt7570_CDR(1);
REPORT_EVENT_TO_MAC(PHY_EVENT_CALIBRATION_START);
( (__builtin_constant_p(100) && (100)<=5) ? __udelay((100)*1000) : ({unsigned long __ms=(100); while (__ms--) __udelay(1000);}));
phy_mode_config(PHY_EPON_CONFIG, (1));
( (__builtin_constant_p(100) && (100)<=5) ? __udelay((100)*1000) : ({unsigned long __ms=(100); while (__ms--) __udelay(1000);}));
iowrite32(0x0, (void *)(0xbfaf0400 +0x00a0));
switch(pattern)
{
case 5:
iowrite32(0x81fd53, (void *)(0xbfaf0200 +0x00a0));
iowrite32(0xffffff, (void *)(0xbfaf0200 +0x00a4));
iowrite32(0x5, (void *)(0xbfaf0400 +0x00a0));
iowrite32(0x1, (void *)(0xbfaf0400 +0x00a4));
break;
case 6:
iowrite32(0x71fd53, (void *)(0xbfaf0200 +0x00a0));
iowrite32(0x7fffff, (void *)(0xbfaf0200 +0x00a4));
iowrite32(0x6, (void *)(0xbfaf0400 +0x00a0));
iowrite32(0x1, (void *)(0xbfaf0400 +0x00a4));
break;
case 7:
iowrite32(0xff1fd53, (void *)(0xbfaf0200 +0x00a0));
iowrite32(0x7ffffff, (void *)(0xbfaf0200 +0x00a4));
iowrite32(0x7, (void *)(0xbfaf0400 +0x00a0));
iowrite32(0x1, (void *)(0xbfaf0400 +0x00a4));
break;
default:
break;
}
( (__builtin_constant_p(250) && (250)<=5) ? __udelay((250)*1000) : ({unsigned long __ms=(250); while (__ms--) __udelay(1000);}));
read_data = regReadPhy32(0xbfaf0200 +0x00c4);
if( read_data == 5 )
printk("Pattern Aligned\n");
else
printk("Aligned Failed\n");
return read_data;
}
# 956 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_restart_ERC(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4);
ptr[0] = ptr[0] & 0xfe;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4 );
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 4);
ptr[0] = ptr[0] & 0xfe;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 4 );
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4);
ptr[0] = (ptr[0] & 0xfe) | (0x01);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4 );
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 4);
ptr[0] = (ptr[0] & 0xfe) | (0x01);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 4 );
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "ERC restarted\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 977) ; };
}
# 994 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_calibration_pattern(int input)
{
REPORT_EVENT_TO_MAC(PHY_EVENT_CALIBRATION_START);
mt7570_CDR(0);
if( input == PHY_GPON_CONFIG )
{
phy_tx_test_pattern(0x06);
phy_mode_config(PHY_GPON_CONFIG, (1));
printk("PRBS23 enabled\n");
}
else if( input == PHY_EPON_CONFIG )
{
phy_tx_test_pattern(0x0b);
phy_mode_config(PHY_EPON_CONFIG, (1));
printk("8B/10B pattern enabled\n");
}
PatternEnabled = 1;
}
# 1032 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_disable_pattern(void)
{
phy_tx_test_pattern(0x00);
phy_tx_test_pattern(0x0c);
mt7570_CDR(1);
REPORT_EVENT_TO_MAC(PHY_EVENT_CALIBRATION_STOP);
printk("Pattern disabled\n");
PatternEnabled = 0;
}
# 1061 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_CDR(int CDR_switch)
{
uint read_data = 0;
if( CDR_switch == 0 )
{
read_data = regReadPhy32((0xbfaf0100 +0x0000));
iowrite32((read_data | 0x1000000), (void *)((0xbfaf0100 +0x0000)));
printk("CDR disabled\n");
}
else if( CDR_switch == 1 )
{
read_data = regReadPhy32((0xbfaf0100 +0x0000));
iowrite32((read_data & 0xFEFFFFFF), (void *)((0xbfaf0100 +0x0000)));
printk("CDR enabled\n");
}
}
# 1090 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int mt7570_init(void)
{
uint read_data = 0;
i2c_access_queue = __alloc_workqueue_key(("%s"), (WQ_MEM_RECLAIM), (1), ((void *)0), ((void *)0), ("i2c_access_queue"));
do { do { __init_work(((&gpPhyPriv->EN7570_reset)), 0); ((&gpPhyPriv->EN7570_reset))->data = (atomic_long_t) { (WORK_STRUCT_NO_POOL) }; INIT_LIST_HEAD(&((&gpPhyPriv->EN7570_reset))->entry); ((&gpPhyPriv->EN7570_reset))->func = ((mt7570_safe_circuit_reset_for_work_queue)); } while (0); } while (0);
if(get_flash_matrix() == 0)
printk("FLASH matrix got\n");
else
set_flash_register_default();
mt7570_sw_reset();
mt7570_TIAGAIN_set();
mt7570_ERC_filter();
mt7570_MPD_current_calibration();
mt7570_ADC_calibration();
mt7570_RSSI_calibration();
read_data = get_flash_register((0x094));
if(read_data == 0x07050700)
{
printk("Start GPON Tx Calibration\n");
phy_mode_config(PHY_GPON_CONFIG, (1));
xPON_mode = PHY_GPON_CONFIG;
mt7570_RSSI_gain_init();
mt7570_LOS_level_set();
iowrite32(0x10f, (void *)((0xbfaf0100 +0x0038)));
mt7570_TGEN(PHY_GPON_CONFIG);
mt7570_load_init_current();
mt7570_load_MPDL_MPDH();
mt7570_TxSD_level_set();
mt7570_APD_initialization();
if( get_flash_register((0x01c)) != 0xffffffff )
{
T_APD = get_flash_register((0x01c));
if( T_APD < 10 )
{
printk("APD update period is too short, reset to 10s\n");
T_APD=10;
}
}
mt7570_APD_control();
}
else if(read_data == 0xe7050700)
{
printk("Start EPON Tx Calibration\n");
phy_mode_config(PHY_EPON_CONFIG, (1));
xPON_mode = PHY_EPON_CONFIG;
mt7570_RSSI_gain_init();
mt7570_LOS_level_set();
iowrite32(0x10f, (void *)((0xbfaf0100 +0x0038)));
mt7570_TGEN(PHY_EPON_CONFIG);
mt7570_load_init_current();
mt7570_load_MPDL_MPDH();
mt7570_TxSD_level_set();
}
else
{
internal_DDMI = 0;
printk("Internal DDMI Disabled\n");
return 0;
}
if( get_flash_register((0x070)) == 0x80000000)
{
SCL = 1;
mt7570_SingleClosedLoopMode();
}
else if( get_flash_register((0x070)) == 0xc0000000)
{
DOL = 1;
mt7570_LUT_recover();
mt7570_OpenLoopMode();
}
mt7570_RougeONU_clear();
mt7570_safe_circuit_reset();
if( get_flash_register((0x02c)) == 0 )
{
internal_DDMI = 0;
printk("Internal DDMI Disabled\n");
}
else
{
printk("Internal DDMI Enabled\n");
if( get_flash_register((0x02c)) == 2 )
fast_DDMI = 1;
}
if( get_flash_register((0x08c)) == 0 )
{
TEC = 0;
printk("TEC Disabled\n");
}
else if( get_flash_register((0x08c)) != 0xffffffff )
{
BOSA_Ith = get_flash_register((0x08c));
printk("TEC Enabled, BOSA's Ith = %duA\n", BOSA_Ith);
}
else
{
printk("TEC Enabled\n");
}
if( get_flash_register((0x07c)) == 1 )
{
ETC = 1;
printk("ETC = 1\n");
}
else if ( get_flash_register((0x07c)) == 2 )
{
ETC = 2;
printk("ETC = 2\n");
}
else if ( get_flash_register((0x07c)) == 3 )
{
ETC = 3;
mt7570_LUT_recover();
mt7570_temperature_get();
mt7570_BiasTracking();
printk("ETC = 3\n");
printk("BiasTracking Enabled\n");
}
else
{
printk("ETC Disabled\n");
}
printk("EN7570 Initialization Done!\n");
return 0 ;
}
# 1302 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_sw_reset(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0300), ptr, 4);
ptr[0] = (ptr[0] & 0xf8) | (0x01);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0300), ptr, 4);
}
# 1325 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_RSSI_gain_init(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 4);
ptr[2] = (ptr[2] & 0xf8) | (0x05);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 4);
}
# 1350 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_TGEN(int xPON)
{
unchar ptr[4];
uint RGS_T0C = 0;
uint RGS_T1C = 0;
int i = 0;
mt7570_CDR(0);
phy_tx_test_pattern(0x06);
( (__builtin_constant_p(10) && (10)<=5) ? __udelay((10)*1000) : ({unsigned long __ms=(10); while (__ms--) __udelay(1000);}));
for( i=0; i<32; i++ )
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[3] = (ptr[3] & 0xf7);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
__udelay(2);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[0] = (ptr[0] & 0x00) | (0x66);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
__udelay(2);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[1] = (ptr[1] & 0x00) | (0x7f);
ptr[2] = (ptr[2] & 0x00) | (0x7f);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
__udelay(2);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[3] = (ptr[3] & 0xdf) | (0x20);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
__udelay(2);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[3] = (ptr[3] & 0xdf);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
__udelay(2);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[3] = (ptr[3] & 0xfe) | (0x01);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
__udelay(2);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[3] = (ptr[3] & 0xfe);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0010), ptr, 4);
if( ptr[0] > RGS_T0C )
RGS_T0C = ptr[0];
if( ptr[1] > RGS_T1C )
RGS_T1C = ptr[1];
}
( (__builtin_constant_p(10) && (10)<=5) ? __udelay((10)*1000) : ({unsigned long __ms=(10); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
if( get_flash_register((0x098)) != 0xffffffff )
{
ptr[0] = (ptr[0] & 0x00) | (get_flash_register((0x098)) & 0xff);
printk("T0/T1 delay = 0x%02x\n", get_flash_register((0x098)) & 0xff);
}
else if( xPON == PHY_GPON_CONFIG )
{
ptr[0] = (ptr[0] & 0x00) | 0x9a;
printk("T0/T1 delay = 0x9a\n");
}
else if( xPON == PHY_EPON_CONFIG )
{
ptr[0] = (ptr[0] & 0x00) | 0x47;
printk("T0/T1 delay = 0x47\n");
}
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
( (__builtin_constant_p(10) && (10)<=5) ? __udelay((10)*1000) : ({unsigned long __ms=(10); while (__ms--) __udelay(1000);}));
if( get_flash_register((0x09c)) != 0xffffffff )
{
RGS_T0C = get_flash_register((0x09c)) & 0x0000ffff;
RGS_T1C = (get_flash_register((0x09c)) & 0xffff0000)>>16;
}
printk("RGS_T0C = 0x%x\nRGS_T1C = 0x%x\n", RGS_T0C, RGS_T1C);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[1] = (ptr[1] & 0x00) | RGS_T1C;
ptr[2] = (ptr[2] & 0x00) | RGS_T0C;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
( (__builtin_constant_p(10) && (10)<=5) ? __udelay((10)*1000) : ({unsigned long __ms=(10); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[3] = (ptr[3] & 0xdf) | (0x20);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
( (__builtin_constant_p(10) && (10)<=5) ? __udelay((10)*1000) : ({unsigned long __ms=(10); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[3] = (ptr[3] & 0xdf);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
( (__builtin_constant_p(10) && (10)<=5) ? __udelay((10)*1000) : ({unsigned long __ms=(10); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4);
ptr[3] = (ptr[3] & 0xf7) | (0x08);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0008), ptr, 4 );
mt7570_CDR(1);
phy_tx_test_pattern(0x00);
printk("TGEN done\n");
}
# 1490 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_LOS_level_set(void)
{
unchar ptr[4];
mt7570_LOS_init();
# 1513 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
if((get_flash_register((0x020)) != 0xffffffff) && (get_flash_register((0x024)) != 0xffffffff))
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x011C), ptr, 4);
ptr[3] = (ptr[3] & (0x80)) | (get_flash_register((0x024)));
ptr[2] = (ptr[2] & (0x80)) | (get_flash_register((0x020)));
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x011C), ptr, 4);
}
else
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x011C), ptr, 4);
ptr[3] = (ptr[3] & (0x80)) | (0x20);
ptr[2] = (ptr[2] & (0x80)) | (0x30);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x011C), ptr, 4);
}
printk("Rx LOS is set\n");
}
# 1541 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_TxSD_level_set(void)
{
int delta = 0;
uint tia_sd = 0;
uint MPDH = 0;
uint MPDL = 0;
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004), ptr, 4);
MPDH = ((ptr[1]<<8) | ptr[0]) & (0x3ff);
MPDL = ((ptr[3]<<8) | ptr[2]) & (0x3ff);
delta = mt7570_TxSD_level_calibration();
if ( delta >= 0 )
{
tia_sd = (0.1/2)*(MPDH + (MPDL>>2)) + (1.4/0.6)*delta;
ptr[0] = tia_sd & (0xff);
ptr[1] = (tia_sd >> 8) & (0x01);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x000C), ptr, 2 );
printk("Tx SD set\n");
}
else
{
printk("Tx SD error\n");
}
}
# 1581 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int mt7570_TxSD_level_calibration(void)
{
unchar ptr[2];
int tiaflt = 0;
int TIASD_0 = 0;
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
ptr[0] = (ptr[0] & 0xf1) | 0x08;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024)+0x02, ptr, 1);
ptr[0] = (ptr[0] & 0xef) | (0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024)+0x02, ptr, 1);
( (__builtin_constant_p(1) && (1)<=5) ? __udelay((1)*1000) : ({unsigned long __ms=(1); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
ptr[0] = (ptr[0] & 0xe1) | (0x04);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
( (__builtin_constant_p(1) && (1)<=5) ? __udelay((1)*1000) : ({unsigned long __ms=(1); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
( (__builtin_constant_p(1) && (1)<=5) ? __udelay((1)*1000) : ({unsigned long __ms=(1); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
tiaflt = (ptr[0] | (ptr[1]<<8));
( (__builtin_constant_p(10) && (10)<=5) ? __udelay((10)*1000) : ({unsigned long __ms=(10); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
ptr[0] = (ptr[0] & 0xf1) | (0x02);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
( (__builtin_constant_p(1) && (1)<=5) ? __udelay((1)*1000) : ({unsigned long __ms=(1); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x000C), ptr, 2);
ptr[0] = (ptr[0] & 0x00);
ptr[1] = (ptr[1] & 0xfe);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x000C), ptr, 2);
( (__builtin_constant_p(1) && (1)<=5) ? __udelay((1)*1000) : ({unsigned long __ms=(1); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
( (__builtin_constant_p(1) && (1)<=5) ? __udelay((1)*1000) : ({unsigned long __ms=(1); while (__ms--) __udelay(1000);}));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
TIASD_0 = (ptr[0] | (ptr[1]<<8));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024)+0x02, ptr, 1);
ptr[0] = (ptr[0] & 0xef);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024)+0x02, ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
ptr[0] = (ptr[0] & 0xe1);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
ptr[0] = (ptr[0] & 0xf1) | 0x08;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
return (tiaflt - TIASD_0);
}
# 1670 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_ADC_calibration(void)
{
unchar ptr[2];
uint read_data = 0;
uint cnt = 8;
uint i = 0;
uint temp = 0;
if( i2c_access_protect() == -1 )
{
printk("\r\n atomic, [%s : %d]\r\n", (__func__) , 1680);
}
else
{
((&i2c_protect)->counter = (1));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024) , ptr, 1);
read_data = ptr[0];
ptr[0] = (ptr[0] & 0xe1) | 0x06;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
for(i=0;i<cnt;i++)
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0]&0xef) | 0x10;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
temp += (ptr[0] | (ptr[1]<<8));
}
ptr[0] = read_data;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
BG1V76 = ((temp>>2)+1)>>1;
temp = 0;
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0024) + 0x01) , ptr, 1);
read_data = ptr[0];
ptr[0] = (ptr[0] & (0xb3))|(0x4C);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0024) + 0x01), ptr, 1);
for(i=0;i<cnt;i++)
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
temp += (ptr[0] | (ptr[1]<<8));
}
ptr[0] = read_data;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0024) + 0x01), ptr, 1);
((&i2c_protect)->counter = (0));
BG0V875 = ((temp>>2)+1)>>1;
temp = 0;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "BG 1V76 = 0x%x\nBG 0V875 =0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1731, BG1V76, BG0V875) ; };
if( (BG1V76-BG0V875) <= 0 )
{
printk("ADC calibration fail\n");
return;
}
ADC_slope = (1.76-0.875)/(float)(BG1V76-BG0V875);
ADC_offset = 1.76 - ADC_slope*(float)BG1V76;
}
}
# 1756 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_APD_initialization(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0030), ptr, 4);
ptr[2] = ptr[2]|(0x20);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0030), ptr, 4);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0030), ptr, 4);
ptr[1] = ptr[1]|(0x01);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0030), ptr, 4);
printk("APD initialization done\n");
}
# 1780 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_APD_control(void)
{
if( get_flash_register(0x030)>0x0000ffff && get_flash_register(0x034)>0x0000ffff )
{
unchar ptr[1];
int a = 0;
int b = 0;
float APD_slope_up = 0.10;
float APD_slope_dn = 0.07;
float APD_voltage_NT = 35.0;
float APD_voltage_step = 0.09375;
float APD_voltage_0x00 = 30.0;
float APD_voltage_0x40 = 36.0;
float APD_voltage_0x80 = 42.0;
float APD_voltage_0xC0 = 45.6;
if(get_flash_register((0x010))!=0xffffffff)
APD_slope_up = ( (float) get_flash_register((0x010)) )/100;
if(get_flash_register((0x014))!=0xffffffff)
APD_slope_dn = ( (float) get_flash_register((0x014)) )/100;
if(get_flash_register((0x018))!=0xffffffff)
APD_voltage_NT = ( (float) get_flash_register((0x018)) )/100;
if( ( get_flash_register((0x030))|get_flash_register((0x034)) ) != 0xffffffff)
{
APD_voltage_0x00 = ( (float)( (get_flash_register((0x030))&0xffff0000)>>16) )/10;
APD_voltage_0x40 = ( (float)( get_flash_register((0x030))&0x0000ffff) )/10;
APD_voltage_0x80 = ( (float)( (get_flash_register((0x034))&0xffff0000)>>16) )/10;
APD_voltage_0xC0 = ( (float)( get_flash_register((0x034))&0x0000ffff) )/10;
if( (APD_voltage_0x40 <= APD_voltage_0x00) || (APD_voltage_0x80 <= APD_voltage_0x40) || (APD_voltage_0xC0 <= APD_voltage_0x80) )
{
printk("APD slope error\n");
return;
}
}
if( BOSA_temperature > 25 )
APD_voltage = APD_voltage_NT + APD_slope_up*( BOSA_temperature - 25 );
else
APD_voltage = APD_voltage_NT - APD_slope_dn*( 25 - BOSA_temperature );
a = (int)BOSA_temperature;
b = ({ long ret; if (sizeof((int)(BOSA_temperature*10)%10) == sizeof(long)) { long __x = ((int)(BOSA_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } else { int __x = ((int)(BOSA_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } ret; });
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "BOSA temperature = %d.%dC\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1833, a, b) ; };
a = (int)APD_voltage;
b = (int)(APD_voltage*10)%10;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "APD Voltage = %d.%dV\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1837, a, b) ; };
if( APD_voltage < APD_voltage_0x80 )
{
if( APD_voltage < APD_voltage_0x40 )
{
APD_voltage_step = (APD_voltage_0x40 - APD_voltage_0x00)/64;
ptr[0] = 0x00 + (int)( (APD_voltage - APD_voltage_0x00)/APD_voltage_step );
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "APD slope 1\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1846) ; };
}
else
{
APD_voltage_step = (APD_voltage_0x80 - APD_voltage_0x40)/64;
ptr[0] = 0x40 + (int)( (APD_voltage - APD_voltage_0x40)/APD_voltage_step );
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "APD slope 2\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1852) ; };
}
}
else
{
APD_voltage_step = (APD_voltage_0xC0 - APD_voltage_0x80)/64;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "APD slope 3\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1859) ; };
if( APD_voltage < APD_voltage_0xC0 )
ptr[0] = 0x80 + (int)( (APD_voltage - APD_voltage_0x80)/APD_voltage_step );
else
{
ptr[0] = 0xC0 + (int)( (APD_voltage - APD_voltage_0xC0)/APD_voltage_step );
if( ptr[0] > 0xff )
ptr[0] = 0xff;
}
}
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "APD = 0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1871, ptr[0]) ; };
mt7570_APD_I2C_write( ptr );
}
else
{
unchar ptr[1];
int a = 0;
int b = 0;
float APD_slope_up = 0.10;
float APD_slope_dn = 0.07;
float APD_voltage_NT = 35.0;
float APD_zero_code_voltage = 30.0;
float APD_voltage_step = 0.09375;
if(get_flash_register((0x010))!=0xffffffff)
APD_slope_up = ( (float) get_flash_register((0x010)) )/100;
if(get_flash_register((0x014))!=0xffffffff)
APD_slope_dn = ( (float) get_flash_register((0x014)) )/100;
if(get_flash_register((0x018))!=0xffffffff)
APD_voltage_NT = ( (float) get_flash_register((0x018)) )/100;
if(get_flash_register((0x034))!=0xffffffff)
APD_zero_code_voltage = ( (float) get_flash_register((0x034)) )/100;
if(get_flash_register((0x030))!=0xffffffff)
APD_voltage_step = ( (float) get_flash_register((0x030)) )/1000;
if( BOSA_temperature > 25 )
APD_voltage = APD_voltage_NT + APD_slope_up*( BOSA_temperature - 25 );
else
APD_voltage = APD_voltage_NT - APD_slope_dn*( 25 - BOSA_temperature );
a = (int)BOSA_temperature;
b = ({ long ret; if (sizeof((int)(BOSA_temperature*10)%10) == sizeof(long)) { long __x = ((int)(BOSA_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } else { int __x = ((int)(BOSA_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } ret; });
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "BOSA temperature = %d.%dC\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1910, a, b) ; };
a = (int)APD_voltage;
b = (int)(APD_voltage*10)%10;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "APD Voltage = %d.%dV\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1914, a, b) ; };
ptr[0] = (int)( (APD_voltage - APD_zero_code_voltage)/APD_voltage_step );
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "APD = 0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1918, ptr[0]) ; };
mt7570_APD_I2C_write( ptr );
}
}
# 1939 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_APD_I2C_write(unchar ptr[1])
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "APD in mt7570_APD_I2C_write = 0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 1941, ptr[0]) ; };
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0030), ptr, 1);
}
# 1956 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int mt7570_information_output(uint select)
{
uint output = 0;
unchar ptr[4];
if(select == 0x03)
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4);
output = (ptr[2] | ((ptr[3] & 0x0f) << 8 ));
global_bias_current = output;
}
else if(select == 0x04)
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 4);
output = (ptr[2] | ((ptr[3] & 0x0f) << 8 ));
global_modulation_current = output;
}
else if(select == 0x05)
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004), ptr, 4);
output = (ptr[2] | ((ptr[3] & 0x03) << 8 ));
global_MPDL = output;
}
else if(select == 0x06)
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004), ptr, 4);
output = (ptr[0] | ((ptr[1] & 0x03) << 8 ));
global_MPDH = output;
}
return output;
}
# 1999 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int mt7570_ADC_temperature_get(void)
{
unchar ptr[4];
uint cnt = 8;
uint i = 0;
uint temp = 0;
if( i2c_access_protect() == -1 )
{
printk("\r\n atomic, [%s : %d]\r\n", (__func__) , 2008);
return global_temperature_code;
}
else
{
((&i2c_protect)->counter = (1));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024) , ptr, 1);
ptr[0] = (ptr[0] & (0xe1))|(0x08);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
for(i=0;i<cnt;i++)
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
temp += (ptr[0] | (ptr[1]<<8));
}
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024) , ptr, 1);
ptr[0] = ptr[0] & (0xe1);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
((&i2c_protect)->counter = (0));
global_temperature_code = ((temp>>2)+1)>>1;
temp = 0;
return global_temperature_code;
}
}
# 2054 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int mt7570_ADC_voltage_get(void)
{
unchar ptr[4];
uint read_data = 0;
if( i2c_access_protect() == -1 )
{
printk("\r\n atomic, [%s : %d]\r\n", (__func__) , 2061);
return global_vcc_code;
}
else
{
((&i2c_protect)->counter = (1));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014) , ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024) , ptr, 1);
read_data = ptr[0];
ptr[0] = ptr[0] & (0xe1);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
global_vcc_code = (ptr[0] | (ptr[1]<<8));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014) , ptr, 1);
ptr[0] = (ptr[0] & (0xef));
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 1);
ptr[0] = read_data;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
# 2115 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
((&i2c_protect)->counter = (0));
return global_vcc_code;
}
}
# 2134 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_load_init_current(void)
{
unchar ptr[4];
uint read_data = 0;
int temperature_index = 0;
if( (get_flash_register((0x000))!=0xffffffff) && (get_flash_register((0x004))!=0xffffffff) )
{
read_data = get_flash_register((0x000));
read_data = read_data & (0xfff);
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0138), ptr, 2 );
read_data = get_flash_register((0x004));
read_data = read_data & (0xfff);
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0148), ptr, 2 );
printk("Initial bias/mod current loaded from FLASH\n");
}
else
{
mt7570_temperature_get();
temperature_index = (int)( (BOSA_temperature+40)/2.5 );
if( temperature_index < 0 )
temperature_index = 0;
read_data = LUT_Ibias_Imod[temperature_index][0];
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0138), ptr, 2 );
read_data = LUT_Ibias_Imod[temperature_index][1];
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0148), ptr, 2 );
printk("Initial bias/mod current loaded from LUT\n");
}
}
# 2196 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_temperature_get(void)
{
uint read_data = 0;
float BOSA_temperature_offset = 5;
float Env_temperature_offset = 10;
float T_V_slope = 327.5;
float T_V_offset = 495.8;
float sensor_voltage;
if( (get_flash_register((0x080))& 0xffff0000) != 0xffff0000 )
{
read_data = get_flash_register((0x080));
T_V_slope = (float)((read_data & 0xffff0000) >> 16)/10;
}
if( (get_flash_register((0x080))& 0x0000ffff) != 0xffff )
{
read_data = get_flash_register((0x080));
T_V_offset = (float)(read_data & 0x0000ffff)/10;
}
mt7570_ADC_temperature_get();
sensor_voltage = ADC_slope*((float)global_temperature_code)+ADC_offset;
IC_temperature = T_V_offset - ( T_V_slope * sensor_voltage );
read_data = get_flash_register((0x084));
if( (read_data & 0x0000ffff) != 0xffff )
BOSA_temperature_offset = read_data & 0x0000ffff;
if( (read_data & 0xffff0000)>>16 != 0xffff )
Env_temperature_offset = (float)((read_data & 0xffff0000)>>16)/10;
BOSA_temperature = IC_temperature - (float)BOSA_temperature_offset;
Env_temperature = IC_temperature - Env_temperature_offset;
# 2240 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
}
# 2254 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_load_MPDL_MPDH(void)
{
unchar ptr[4];
uint read_data = 0;
if( (get_flash_register((0x00c)) != 0xffffffff) && (get_flash_register((0x008)) != 0xffffffff))
{
read_data = (get_flash_register((0x00c)) & (0x3ff)) | ((get_flash_register((0x008)) & (0x3ff)) << 16);
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
ptr[2] = (read_data >> 16);
ptr[3] = (read_data >> 24);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004), ptr, 4 );
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4);
ptr[0] = (ptr[0] & 0xfe) | (0x01);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4 );
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 4);
ptr[0] = (ptr[0] & 0xfe) | (0x01);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 4 );
printk("MPDL/MPDH loaded\n");
}
}
# 2292 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
UINT16 mt7570_temperature_get_8472(void)
{
int a = 0;
int b = 0;
mt7570_temperature_get();
if( IC_temperature > 0)
global_IC_temperature_8472 = (UINT16)(IC_temperature*256);
else
global_IC_temperature_8472 = 65536 - (UINT16)( (-1)*IC_temperature*256 );
a = (int)IC_temperature;
b = ({ long ret; if (sizeof((int)(IC_temperature*10)%10) == sizeof(long)) { long __x = ((int)(IC_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } else { int __x = ((int)(IC_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } ret; });
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "IC temperature = %d.%dC\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2305, a, b) ; };
return global_IC_temperature_8472;
}
# 2320 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
UINT16 mt7570_supply_voltage_get_8472(void)
{
global_supply_voltage_8472 = 2*(ADC_slope*mt7570_ADC_voltage_get()+ADC_offset)/0.0001;
return global_supply_voltage_8472;
# 2375 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
}
# 2387 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
UINT16 mt7570_bias_current_get_8472(void)
{
UINT16 bias_current_8472 = 0;
bias_current_8472 = mt7570_information_output(0x03)*0.02442*1000/2;
if( FiberPlug == 1 && bias_current_8472 < 500 )
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Fiber isn't recovered\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2395) ; };
}
else
{
if( global_bias_current_8472 - bias_current_8472 > 500 )
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Fiber plugged\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2401) ; };
FiberPlug = 1;
}
else
FiberPlug = 0;
}
global_bias_current_8472 = bias_current_8472;
return global_bias_current_8472;
}
# 2422 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_RSSI_calibration(void)
{
unchar ptr[4];
uint read_data = 0;
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 2);
ptr[1] = (ptr[1]&0xef) | 0x10;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 2);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 2);
ptr[1] = (ptr[1]&0xbf) | 0x40;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 2);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
read_data = ptr[0];
ptr[0] = (ptr[0] & 0xe1) | 0x02;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
RSSI_Vref = ptr[0] | (ptr[1]<<8);
printk("RSSI_Vref = 0x%x\n", RSSI_Vref);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 2);
ptr[1] = ptr[1] & 0xbf;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 2);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
RSSI_V = ptr[0] | (ptr[1]<<8);
printk("RSSI_V = 0x%x\n", RSSI_V);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 2);
ptr[1] = ptr[1] & 0xef;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 2);
ptr[0] = read_data;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
if( RSSI_V > RSSI_Vref )
RSSI_factor = ( ADC_slope*(RSSI_V- RSSI_Vref)+ADC_offset )/0.35;
else
printk("RSSI calibration fail\n");
}
# 2492 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int mt7570_RSSI_current(void)
{
unchar ptr[4];
uint read_data = 0;
uint RSSI_voltage = 0;
uint RSSI_GAIN = 0;
uint RSSI_GAIN_factor = 0;
uint cnt = 4;
uint temp = 0;
uint i = 0;
int search_cnt = 0;
if( i2c_access_protect() == -1 )
{
printk("\r\n atomic, [%s : %d]\r\n", (__func__) , 2506);
return global_RSSI_current;
}
else
{
((&i2c_protect)->counter = (1));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
read_data = ptr[0];
ptr[0] = (ptr[0] & 0xe1) | 0x02;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
for( search_cnt = 0; search_cnt < 6; search_cnt++ )
{
RSSI_GAIN = 5 - search_cnt;
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 4);
ptr[2] = (ptr[2] & 0xf8) | RSSI_GAIN;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 4);
temp = 0;
for(i=0;i<cnt;i++)
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
temp += ptr[0] | (ptr[1]<<8);
}
RSSI_voltage = ((temp>>1)+1)>>1;
if(RSSI_voltage < RSSI_Vref - 0x32)
break;
}
if (0xB7> RSSI_voltage)
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "RSSI ADC code lower than 0.5V, not precise!\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2542) ; };
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "RSSI GAIN = %d, RSSI_voltage = %x, \n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2544, RSSI_GAIN,RSSI_voltage) ; };
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 4);
ptr[2] = (ptr[2] & 0xf8) | (0x05);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 4);
ptr[0] = read_data;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
((&i2c_protect)->counter = (0));
switch(RSSI_GAIN)
{
case 0:
RSSI_GAIN_factor = 1;
break;
case 1 :
RSSI_GAIN_factor = 4;
break;
case 2 :
RSSI_GAIN_factor = 16;
break;
case 3 :
RSSI_GAIN_factor = 64;
break;
case 4 :
RSSI_GAIN_factor = 128;
break;
case 5 :
RSSI_GAIN_factor = 256;
break;
}
if ( RSSI_Vref >= RSSI_voltage )
{
global_RSSI_current = (RSSI_Vref - RSSI_voltage)*RSSI_GAIN_factor;
return global_RSSI_current;
}
else
{
global_RSSI_current = 0;
return global_RSSI_current;
}
}
}
# 2604 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int mt7570_dark_current(void)
{
unchar ptr[4];
uint read_data = 0;
uint RSSI_voltage = 0;
uint RSSI_GAIN = 0;
uint cnt = 64;
uint i = 0;
if( i2c_access_protect() == -1 )
printk("\r\n atomic, [%s : %d]\r\n", (__func__) , 2614);
else
{
((&i2c_protect)->counter = (1));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
read_data = ptr[0];
ptr[0] = (ptr[0] & 0xe1) | 0x02;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
RSSI_GAIN = 0;
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 4);
ptr[2] = (ptr[2] & 0xf8) | RSSI_GAIN;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 4);
for(i=0;i<cnt;i++)
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
RSSI_voltage += ptr[0] | (ptr[1]<<8);
}
printk("RSSI voltage = %x\n", RSSI_voltage);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 4);
ptr[2] = (ptr[2] & 0xf8) | (0x05);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0014), ptr, 4);
ptr[0] = read_data;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
((&i2c_protect)->counter = (0));
}
return 0;
}
# 2672 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_RougeONU_clear(void)
{
unchar ptr[1];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0168) + 0x01, ptr, 1);
ptr[0] = (ptr[0] & 0xfe) | 0x1;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0168) + 0x01, ptr, 1);
printk("Rogue ONU clear\n");
}
# 2693 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_MPD_current_calibration(void)
{
unchar ptr[2];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
ptr[0] = (ptr[0] & 0xf1) | 0x08;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
ptr[0] = (ptr[0] & 0xe1) | 0x04;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
MPD_current_offset = (ptr[0] | (ptr[1]<<8));
global_MPD_current = MPD_current_offset;
printk("MPD Current Offset = 0x%x\n", MPD_current_offset);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
ptr[0] = (ptr[0] & 0xf1) | 0x08;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
ptr[0] = (ptr[0] & 0xe1);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
}
# 2743 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int mt7570_MPD_current(void)
{
unchar ptr[2];
uint MPD_current = 0;
uint temp = 0;
int i = 0;
int cnt = 0;
if( vEN7570 == 0 && TEC_switch )
cnt = 10;
else
cnt = 1;
if( i2c_access_protect() == -1 )
{
printk("\r\n atomic, [%s : %d]\r\n", (__func__) , 2758);
return global_MPD_current;
}
else
{
((&i2c_protect)->counter = (1));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
ptr[0] = (ptr[0] & 0xf1);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
ptr[0] = (ptr[0] & 0xe1) | 0x04;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
for( i=0; i<cnt; i++ )
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)), ptr, 1);
ptr[0] = (ptr[0] & (0xef))|(0x10);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, ((0x0158)+(0x01)) , ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0154), ptr, 2);
MPD_current = (ptr[0] | (ptr[1]<<8));
if(temp == 0)
temp = MPD_current;
else if(temp < MPD_current)
temp = MPD_current;
}
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
ptr[0] = (ptr[0] & 0xe1);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
ptr[0] = (ptr[0] & 0xf1) | 0x08;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000), ptr, 1);
((&i2c_protect)->counter = (0));
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "MPD temp = 0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2804, temp) ; };
if( temp < MPD_current_offset )
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "No Tx power, return %x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2807, MPD_current_offset) ; };
global_MPD_current = MPD_current_offset;
return global_MPD_current;
}
if( vEN7570 == 0 && TEC_switch )
{
int div = 0;
int MPD_current_up = get_flash_register((0x088));
int MPD_current_dn = MPD_current_offset;
float slope = 0;
float tx_power = 0;
int tx_power_up = 0;
int tx_power_dn = 0;
UINT16 tx_power_8472 = 0;
int TX_POWER_THRESHOLD_up = 0;
int TX_POWER_THRESHOLD_dn = 0;
div = MPD_current_up - MPD_current_dn;
if( div == 0 )
{
printk("Invalid content of FLASH 0x88\n");
global_MPD_current = temp;
return global_MPD_current;
}
else
{
if( xPON_mode == PHY_GPON_CONFIG )
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "GPON mode\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2836) ; };
tx_power_up = 0xb1;
TX_POWER_THRESHOLD_up = 25118;
TX_POWER_THRESHOLD_dn = 12589;
}
else if( xPON_mode == PHY_EPON_CONFIG )
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "EPON mode\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2843) ; };
tx_power_up = 0x9e;
TX_POWER_THRESHOLD_up = 22387;
TX_POWER_THRESHOLD_dn = 11220;
}
slope = (float)(tx_power_up-tx_power_dn)/(float)(MPD_current_up-MPD_current_dn);
tx_power = (float)(temp-MPD_current_dn)*slope + tx_power_dn;
tx_power_8472 = (int)(10*tx_power)/0.1;
if( global_MPD_current_var==0 && tx_power_8472>TX_POWER_THRESHOLD_up)
{
MPD_current_cnt += 1;
if( MPD_current_cnt == 2)
global_MPD_current_var = temp - get_flash_register((0x088));
}
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "MPD current var = 0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2859, global_MPD_current_var) ; };
if( tx_power_8472>TX_POWER_THRESHOLD_up && global_MPD_current_var!=0 )
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "MPD in zone 1, Tx_power_8472 = %d\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2863, tx_power_8472) ; };
temp -= global_MPD_current_var;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "temp(var) = 0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2865, temp) ; };
tx_power = (float)(temp-MPD_current_dn)*slope + tx_power_dn;
tx_power_8472 = (int)(10*tx_power)/0.1;
if( tx_power_8472>TX_POWER_THRESHOLD_up || tx_power_8472<TX_POWER_THRESHOLD_dn)
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "MPD in zone 1a, Tx_power_8472 = %d, return %x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2870, tx_power_8472, global_MPD_current) ; };
global_MPD_current_var = 0;
MPD_current_cnt = 1;
return global_MPD_current;
}
else
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "MPD in zone 1b, Tx_power_8472 = %d, return %x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2877, tx_power_8472, temp) ; };
global_MPD_current = temp;
return global_MPD_current;
}
}
else if( tx_power_8472>TX_POWER_THRESHOLD_up && global_MPD_current_var==0 )
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "MPD in zone 2, Tx_power_8472 = %d, return %x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2884, tx_power_8472, MPD_current_up) ; };
global_MPD_current = MPD_current_up;
return global_MPD_current;
}
else
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "MPD in zone 3, Tx_power_8472 = %d, return %x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2890, tx_power_8472, temp) ; };
global_MPD_current = temp;
return global_MPD_current;
}
}
}
else
{
global_MPD_current = temp;
return global_MPD_current;
}
}
}
# 2916 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
UINT16 mt7570_RxPower_get_8472(void)
{
int read_data = 0;
int RSSI_current = 0;
int rx_power = 0;
UINT16 rx_power_8472 = 0;
float div = 0;
float slope = 0;
int RSSI_current_up = 0;
int RSSI_current_md = 0;
int RSSI_current_dn = 0;
int rx_power_up = 0;
int rx_power_md = 0;
int rx_power_dn = 0;
float RSSI_current_1, RSSI_current_2, RSSI_current_3, Rx_power_K1, Rx_power_K2, Rx_power_K3;
static float d, e, f, g, x, y, z;
if( (get_flash_register((0x05c))&0x0000000f) == 1 )
{
if (global_DDMI_rx_cal_flag == 0)
{
read_data = get_flash_register((0x050));
RSSI_current_1 = read_data & 0x0000ffff;
Rx_power_K1 = (read_data & 0xffff0000) >> 16;
read_data = get_flash_register((0x054));
RSSI_current_2 = read_data & 0x0000ffff;
Rx_power_K2 = (read_data & 0xffff0000) >> 16;
read_data = get_flash_register((0x058));
RSSI_current_3 = read_data & 0x0000ffff;
Rx_power_K3 = (read_data & 0xffff0000) >> 16;
d= RSSI_current_1 * RSSI_current_1 * RSSI_current_2 + RSSI_current_1 * RSSI_current_3 * RSSI_current_3 + RSSI_current_2 * RSSI_current_2 * RSSI_current_3 - RSSI_current_2 * RSSI_current_3 * RSSI_current_3 - RSSI_current_1 * RSSI_current_2 * RSSI_current_2 - RSSI_current_1 * RSSI_current_1 * RSSI_current_3 ;
e= Rx_power_K1 * RSSI_current_2 + RSSI_current_1 * Rx_power_K3 + Rx_power_K2 * RSSI_current_3 - RSSI_current_2 * Rx_power_K3 - RSSI_current_1 * Rx_power_K2 - Rx_power_K1 * RSSI_current_3 ;
f= RSSI_current_1 * RSSI_current_1 * Rx_power_K2 + Rx_power_K1 * RSSI_current_3 * RSSI_current_3 + RSSI_current_2 * RSSI_current_2 * Rx_power_K3 - Rx_power_K2 * RSSI_current_3 * RSSI_current_3 - Rx_power_K1 * RSSI_current_2 * RSSI_current_2 - RSSI_current_1 * RSSI_current_1 * Rx_power_K3 ;
g= RSSI_current_1 * RSSI_current_1 * RSSI_current_2 * Rx_power_K3 + RSSI_current_1 * Rx_power_K2 * RSSI_current_3 * RSSI_current_3 + Rx_power_K1 * RSSI_current_2 * RSSI_current_2 * RSSI_current_3 - Rx_power_K1 * RSSI_current_2 * RSSI_current_3 * RSSI_current_3 - RSSI_current_1 * RSSI_current_2 * RSSI_current_2 * Rx_power_K3 - RSSI_current_1 * RSSI_current_1 * Rx_power_K2 * RSSI_current_3 ;
if(d==0)
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Invalid DDMI Rx power-RSSI mapping curve \n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2962) ; };
}
else
{
x=e/d;
y=f/d;
z=g/d;
}
global_DDMI_rx_cal_flag = 1;
}
RSSI_current = mt7570_RSSI_current();
rx_power = (float) RSSI_current*RSSI_current*x + (float)RSSI_current*y + z;
if(rx_power < 0)
rx_power = 0;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "x *10^12 = %d, y*10^6 = %d, z*10 = %d\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 2979,(int)(x*1000000000000),(int)(y*1000000),(int)(z*10)) ; };
}
else
{
RSSI_current = mt7570_RSSI_current();
if( get_flash_register((0x050)) != 0xffffffff )
{
read_data = get_flash_register((0x050));
RSSI_current_up = read_data & 0x0000ffff;
rx_power_up = (read_data & 0xffff0000) >> 16;
}
if( get_flash_register((0x054)) != 0xffffffff )
{
read_data = get_flash_register((0x054));
RSSI_current_md = read_data & 0x0000ffff;
rx_power_md = (read_data & 0xffff0000) >> 16;
}
if( get_flash_register((0x058)) != 0xffffffff )
{
read_data = get_flash_register((0x058));
RSSI_current_dn = read_data & 0x0000ffff;
rx_power_dn = (read_data & 0xffff0000) >> 16;
}
if( RSSI_current <= RSSI_current_dn )
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Rx power in zone 1\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3006) ; };
div = RSSI_current_dn;
if(div != 0)
{
slope = (float)rx_power_dn/(float)RSSI_current_dn;
rx_power = RSSI_current*slope;
}
else
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Invalid Rx power point\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3014) ; };
}
else if( (RSSI_current_dn < RSSI_current) && (RSSI_current < RSSI_current_md) )
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Rx power in zone 2\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3018) ; };
div = RSSI_current_md-RSSI_current_dn;
if(div != 0)
{
slope = (float)(rx_power_md-rx_power_dn)/(float)(RSSI_current_md-RSSI_current_dn);
rx_power = (RSSI_current-RSSI_current_dn)*slope + rx_power_dn;
}
else
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Invalid Rx power point\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3026) ; };
}
else if( RSSI_current_md <= RSSI_current )
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Rx power in zone 3\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3030) ; };
div = RSSI_current_up-RSSI_current_md;
if(div != 0)
{
slope = (float)(rx_power_up-rx_power_md)/(float)(RSSI_current_up-RSSI_current_md);
rx_power = (RSSI_current-RSSI_current_md)*slope + rx_power_md;
}
else
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Invalid Rx power point\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3038) ; };
}
}
rx_power_8472 = rx_power/10;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Rx_power_8472 = %d\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3044, rx_power_8472) ; };
return rx_power_8472;
}
# 3062 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_safe_circuit_reset(void)
{
unchar ptr[4];
if( i2c_access_protect() == -1 )
{
printk("\r\n atomic, [%s : %d]\r\n", (__func__) , 3068);
return;
}
((&i2c_protect)->counter = (1));
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0100), ptr, 4);
ptr[1] = (ptr[1] & 0xbf) | (0x40);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0100), ptr, 4);
((&i2c_protect)->counter = (0));
}
# 3096 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
UINT16 mt7570_TxPower_get_8472(void)
{
int div = 0;
int read_data = 0;
int MPD_current = 0;
int MPD_current_up = 0;
int MPD_current_dn = MPD_current_offset;
float slope = 0;
float tx_power = 0;
int tx_power_up = 0;
int tx_power_dn = 0;
UINT16 tx_power_8472 = 0;
MPD_current = mt7570_MPD_current();
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "MPD_current = 0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3110, MPD_current) ; };
if( get_flash_register((0x040)) != 0xffffffff )
{
read_data = get_flash_register((0x040));
MPD_current_up = read_data & 0x0000ffff;
tx_power_up = (read_data & 0xffff0000)>>16;
}
if( get_flash_register((0x044)) != 0xffffffff )
{
read_data = get_flash_register((0x044));
MPD_current_dn = read_data & 0x0000ffff;
tx_power_dn = (read_data & (0xffff0000))>>16;
}
div = MPD_current_up - MPD_current_dn;
if( div != 0 )
{
slope = (float)(tx_power_up-tx_power_dn)/(float)(MPD_current_up-MPD_current_dn);
tx_power = (float)(MPD_current-MPD_current_dn)*slope + tx_power_dn;
}
else
{
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Invalid Tx power point\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3131) ; };
}
tx_power_8472 = (int)(10*tx_power)/0.1;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Tx_power_8472 = %d\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3135, tx_power_8472) ; };
return tx_power_8472;
}
# 3149 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_internal_clock(void)
{
if( internal_DDMI == 1 )
{
if(cnt7570%T_APD == T_APD-1)
{
if( xPON_mode == PHY_GPON_CONFIG )
mt7570_APD_control();
}
if(cnt7570%10 == 0 || fast_DDMI)
DDMI_voltage = mt7570_supply_voltage_get_8472();
DDMI_current = mt7570_bias_current_get_8472();
if(cnt7570%10 == 4 || fast_DDMI)
DDMI_temperature = mt7570_temperature_get_8472();
if(cnt7570%10 == 6 || fast_DDMI)
{
DDMI_tx_power = mt7570_TxPower_get_8472();
mt7570_tx_power_alarm_get();
}
if(cnt7570%10 == 8 || fast_DDMI)
{
DDMI_rx_power = mt7570_RxPower_get_8472();
mt7570_rx_power_alarm_get();
}
}
if ( SCL == 1 )
{
if( cnt7570%29 == 0 )
{
if ( ETC == 3 )
{
mt7570_BiasTracking();
}
}
}
else if ( DOL == 1 )
{
if( cnt7570%5 == 0 )
mt7570_OpenLoopControl();
}
else
{
if( xPON_mode != -1 && FiberPlug == 1 && PatternEnabled == 1 )
mt7570_FiberPlug_Protect();
if( cnt7570%30 == 29 )
{
if ( ETC == 1 )
{
mt7570_ERTemperatureCompensation();
}
else if ( ETC == 2 )
{
}
else if ( ETC == 3 )
{
if( PatternEnabled || BiasTracking_switch )
mt7570_BiasTracking();
}
}
if( TEC != 0 && TEC_switch == 1 )
mt7570_TxEyeCorrection();
}
if( cnt7570%120 == 119 )
{
if( xPON_mode != -1 )
mt7570_ADC_calibration();
}
cnt7570 ++;
}
# 3259 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_param_status_real(PPHY_TransParam_T transceiver_param)
{
transceiver_param->temprature = DDMI_temperature;
transceiver_param->supply_voltage = DDMI_voltage;
transceiver_param->tx_current = DDMI_current;
transceiver_param->tx_power = DDMI_tx_power;
transceiver_param->rx_power = DDMI_rx_power;
}
# 3280 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void DDMI_check_8472(void)
{
DDMI_voltage = mt7570_supply_voltage_get_8472();
DDMI_current = mt7570_bias_current_get_8472();
DDMI_temperature = mt7570_temperature_get_8472();
DDMI_tx_power = mt7570_TxPower_get_8472();
DDMI_rx_power = mt7570_RxPower_get_8472();
printk("Supply Voltage = %05d\n" , DDMI_voltage );
printk("Tx Bias Current = %05d\n", DDMI_current );
printk("Temperature = %05d\n" , DDMI_temperature);
printk("Tx power = %05d\n" , DDMI_tx_power );
printk("Rx Power = %05d\n" , DDMI_rx_power );
}
# 3306 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
extern struct work_struct work_mt7570_safe_circuit_reset;
void mt7570_trans_model_setting(void)
{
iowrite32(0x10f, (void *)((0xbfaf0100 +0x0038)));
if(((void *)0) != i2c_access_queue){
queue_work(i2c_access_queue, &work_mt7570_safe_circuit_reset);
}
}
# 3335 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_trans_alarm_getting(PPHY_TransAlarm_T transceiver_alarm)
{
transceiver_alarm->rx_power_high_alarm_thod = 0;
transceiver_alarm->rx_power_low_alarm_thod = 0;
transceiver_alarm->tx_power_high_alarm_thod = 0;
transceiver_alarm->tx_power_low_alarm_thod = 0;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "rx power high alarm threshold: %.8x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3342, transceiver_alarm->rx_power_high_alarm_thod) ; };
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "rx power low alarm threshold: %.8x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3343, transceiver_alarm->rx_power_low_alarm_thod) ; };
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "tx power high alarm threshold: %.8x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3344, transceiver_alarm->tx_power_high_alarm_thod) ; };
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "rx power low alarm threshold: %.8x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 3345, transceiver_alarm->tx_power_low_alarm_thod) ; };
}
# 3359 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_tx_power_alarm_get(void)
{
if(DDMI_tx_power < 0x2710)
mt7570_alarm |= PHY_TRANS_TX_LOW_POWER_ALARM;
else
mt7570_alarm &= ~PHY_TRANS_TX_LOW_POWER_ALARM;
if(DDMI_tx_power > 0x8a99)
mt7570_alarm |= PHY_TRANS_TX_HIGH_POWER_ALARM;
else
mt7570_alarm &= ~PHY_TRANS_TX_HIGH_POWER_ALARM;
if(DDMI_current < 0x1f4)
mt7570_alarm |= PHY_TRANS_TX_LOW_CUR_ALARM;
else
mt7570_alarm &= ~PHY_TRANS_TX_LOW_CUR_ALARM;
if(DDMI_current > 0xc350)
mt7570_alarm |= PHY_TRANS_TX_HIGH_CUR_ALARM;
else
mt7570_alarm &= ~PHY_TRANS_TX_HIGH_CUR_ALARM;
}
# 3398 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_rx_power_alarm_get(void)
{
if(DDMI_rx_power < 0xa)
mt7570_alarm |= PHY_TRANS_RX_LOW_POWER_ALARM;
else
mt7570_alarm &= ~PHY_TRANS_RX_LOW_POWER_ALARM;
if(DDMI_rx_power > 0x9cf)
mt7570_alarm |= PHY_TRANS_RX_HIGH_POWER_ALARM;
else
mt7570_alarm &= ~PHY_TRANS_RX_HIGH_POWER_ALARM;
}
# 3426 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
int mt7570_EN7570_detection(void)
{
unchar ptr[1];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0170), ptr, 1);
if( ptr[0] == 0x03 )
{
mt7570_select = 1;
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x015C), ptr, 1);
vEN7570 = ptr[0];
return 1;
}
else
{
mt7570_select = 0;
return 0;
}
}
# 3456 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void LOS_calibration(int LOS_thld_H, int LOS_thld_L)
{
unchar ptr[4];
mt7570_LOS_init();
# 3479 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x011C), ptr, 4);
ptr[3] = (ptr[3] & (0x80)) | LOS_thld_L;
ptr[2] = (ptr[2] & (0x80)) | LOS_thld_H;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x011C), ptr, 4);
printk("%s done\n", (__func__));
}
# 3498 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_ERC_filter(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x016C), ptr, 4);
ptr[2] = 0x58;
ptr[1] = 0xa7;
ptr[0] = 0xff;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x016C), ptr, 4);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x016C), ptr, 4);
ptr[3] = (ptr[3] & 0xfe) | (0x01);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x016C), ptr, 4);
printk("ERC filter set\n");
}
# 3526 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_TIAGAIN_set(void)
{
unchar ptr[1];
uint read_data = 0;
if( get_flash_register((0x028)) != 0xffffffff )
{
read_data = get_flash_register((0x028)) & 0x3;
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000)+0x0001 , ptr, 1);
ptr[0] = (ptr[0] & 0x3f) | (read_data<<6);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0000)+0x0001, ptr, 1);
printk("TIAGAIN set 0x%x\n", read_data);
}
}
# 3555 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void show_BoB_information(void)
{
unchar ptr[4];
float temp = 0;
int a = 0;
int b = 0;
int i ;
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0130), ptr, 4);
ptr[3] = ptr[3] & 0x1;
printk("LOS status = %d\n", ptr[3]);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0168), ptr, 2);
ptr[1] = (ptr[1]>>2 & 0x1);
printk("Rouge ONU status = %d\n", ptr[1]);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0168), ptr, 2);
ptr[1] = (ptr[1]>>3 & 0x1);
printk("Tx SD status = %d\n", ptr[1]);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0100), ptr, 2);
ptr[1] = (ptr[1]>>7 & 0x1);
printk("Tx fault status = %d\n", ptr[1]);
temp = (float)mt7570_information_output(0x03)*0.02442;
a = (int)temp;
b = (int)(temp*100)%100;
printk("I bias = %d.%.2dmA\n", a, b);
temp = (float)mt7570_information_output(0x04)*0.02198;
a = (int)temp;
b = (int)(temp*100)%100;
printk("I mod = %d.%.2dmA\n", a, b);
a = (int)IC_temperature;
b = ({ long ret; if (sizeof((int)(IC_temperature*10)%10) == sizeof(long)) { long __x = ((int)(IC_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } else { int __x = ((int)(IC_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } ret; });
printk("IC temperature = %d.%dC\n", a, b);
a = (int)BOSA_temperature;
printk("BOSA temperature = %d.%dC\n", a, b);
a = (int)Env_temperature;
b = ({ long ret; if (sizeof((int)(Env_temperature*10)%10) == sizeof(long)) { long __x = ((int)(Env_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } else { int __x = ((int)(Env_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } ret; });
printk("Enviroment temperature = %d.%dC\n", a, b);
a = (int)APD_voltage;
b = (int)(APD_voltage*10)%10;
printk("APD Voltage = %d.%dV\n", a, b);
a = (int)global_supply_voltage_8472/10000;
b = (int)global_supply_voltage_8472%10000;
printk("VCC = %d.%.4dV\n", a, b);
temp = (float)DDMI_tx_power/1000/10;
if( temp == 0 )
printk("Tx power = -40 dBm\n");
else
{
temp = (temp-1)/temp;
temp = temp + (temp*temp)/2 + (temp*temp*temp)/3 + (temp*temp*temp*temp)/4 + (temp*temp*temp*temp*temp)/5 + (temp*temp*temp*temp*temp*temp)/6;
temp = temp/2.302585093;
temp *= 10;
a = (int)temp;
b = ({ long ret; if (sizeof((int)(temp*100)%100) == sizeof(long)) { long __x = ((int)(temp*100)%100); ret = (__x < 0) ? -__x : __x; } else { int __x = ((int)(temp*100)%100); ret = (__x < 0) ? -__x : __x; } ret; });
printk("Tx power = %d.%.2d dBm\n", a, b);
}
temp = (float)DDMI_rx_power;
for ( i=0; i<7 ; i++)
{
if ( temp >= 5)
temp = temp/10;
else
break;
}
if( temp == 0 )
printk("Rx power = -40 dBm\n");
else
{
temp = (temp-1)/temp;
temp = temp + (temp*temp)/2 + (temp*temp*temp)/3 + (temp*temp*temp*temp)/4 + (temp*temp*temp*temp*temp)/5 + (temp*temp*temp*temp*temp*temp)/6 + (temp*temp*temp*temp*temp*temp*temp)/7 +(temp*temp*temp*temp*temp*temp*temp*temp)/8 ;
temp = temp/2.302585093;
temp -= 4-i;
temp *= 10;
a = (int)temp;
b = ({ long ret; if (sizeof((int)(temp*100)%100) == sizeof(long)) { long __x = ((int)(temp*100)%100); ret = (__x < 0) ? -__x : __x; } else { int __x = ((int)(temp*100)%100); ret = (__x < 0) ? -__x : __x; } ret; });
printk("Rx power = %d.%.2d dBm\n", a, b);
}
}
# 3669 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_TxEyeCorrection(void)
{
uint MPDL = 0;
unchar ptr[4];
static int TEC_cnt = 0;
if( TEC_cnt > 7 )
return;
if ( (global_bias_current_8472<<1) < BOSA_Ith )
{
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 1);
if( (ptr[0]&0x0f) == 0x5 )
{
MPDL = mt7570_information_output(0x05) + 0x4;
ptr[0] = MPDL;
ptr[1] = MPDL >> 8;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) + 0x2, ptr, 2);
mt7570_restart_ERC_P0();
printk("TEC done\n");
TEC_cnt++;
}
}
}
# 3715 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_OpenLoopMode(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 1);
ptr[0] = (ptr[0] & 0xfc) | 0x02;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 1);
ptr[0] = (ptr[0] & 0xfc) | 0x02;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 1);
printk("Switch to Open-Loop Mode\n");
}
# 3743 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void Ibias_temperature_set(void)
{
int a = 0;
int b = 0;
int read_data = 0;
unchar ptr[4];
float temp = 0;
mt7570_temperature_get();
a = (int)IC_temperature;
read_data = get_flash_register((0x060));
read_data = (read_data & 0xffff0000 ) | a;
set_flash_register(read_data ,(0x060));
printk("tempature %d degree save done\n",a);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0138), ptr, 2);
read_data = get_flash_register((0x060));
read_data = ((read_data & 0x0000ffff )|( ptr[0] << 16 ) |( ptr[1] << 24 ));
set_flash_register(read_data ,(0x060));
temp = (float)mt7570_information_output(0x03)*0.02442;
a = (int)temp;
b = (int)(temp*100)%100;
printk("Ibias current = %d.%.2dmA \n", a, b);
}
# 3788 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_DualClosedLoopMode(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 1);
ptr[0] = (ptr[0] & 0xfc) | 0x01;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 1);
ptr[0] = (ptr[0] & 0xfc) | 0x01;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 1);
printk("Switch to Dual Closed-Loop Mode\n");
}
# 3817 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_Vtemp_ADC_get(void)
{
float sensor_voltage;
mt7570_ADC_temperature_get();
sensor_voltage = ADC_slope*((float)global_temperature_code)+ADC_offset;
printk("V_ADC = 0x%x\n", (uint)(sensor_voltage*10000));
}
# 3838 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_ERTemperatureCompensation(void)
{
unchar ptr[4];
uint read_data = 0;
int norm_temp =40;
int Power_comp = 0;
uint Power_comp_P0_Hi = 0;
uint Power_comp_P1_Hi = 0;
uint Power_comp_P0_Lo = 0;
uint Power_comp_P1_Lo = 0;
if((SCL ==1) || (DOL==1))
return;
if( (TEC != 0) && (TEC_switch == 1) )
{
if (Ibias_outputlow_flag ==1)
{
printk("Ibias output lower\n");
return;
}
}
else
{
Ibias_outputlow_flag = 0;
}
printk("ETC\n");
if( (get_flash_register((0x060)) != 0xffffffff))
{
norm_temp = (get_flash_register((0x060)) & 0xff) ;
}
if( (get_flash_register((0x064))&0xff) != 0xff)
{
Power_comp_P0_Hi = (get_flash_register((0x064)) & 0xff) ;
}
if( ((get_flash_register((0x064))>>8)&0xff) != 0xff)
{
Power_comp_P1_Hi = ((get_flash_register((0x064))>>8)&0xff) ;
}
if( ((get_flash_register((0x064))>>16)&0xff) != 0xff)
{
Power_comp_P0_Lo = ((get_flash_register((0x064))>>16)&0xff) ;
}
if( ((get_flash_register((0x064))>>24)&0xff) != 0xff)
{
Power_comp_P1_Lo = ((get_flash_register((0x064))>>24)&0xff) ;
}
if ( (int)(IC_temperature ) > norm_temp && ((Power_comp_P0_Hi+Power_comp_P1_Hi)!=0))
{
if((int)IC_temperature > (norm_temp+25))
Power_comp = Power_comp_P0_Hi;
else
Power_comp = (int)(((int)IC_temperature - norm_temp)*((float)Power_comp_P0_Hi/25.0)) ;
read_data = (get_flash_register((0x008)) & (0x3ff));
read_data = read_data + Power_comp ;
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) + 0x2, ptr, 2);
if((int)IC_temperature > (norm_temp+25))
Power_comp = Power_comp_P1_Hi;
else
Power_comp = (int)(((int)IC_temperature - norm_temp)*((float)Power_comp_P1_Hi/25.0)) ;
read_data = (get_flash_register((0x00c)) & (0x3ff));
read_data = read_data + Power_comp ;
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) , ptr, 2);
mt7570_TxSD_level_set();
}
else if ( (int)(IC_temperature ) < (norm_temp-20) && ((Power_comp_P0_Lo+Power_comp_P1_Lo)!=0))
{
if((int)IC_temperature < (norm_temp-30))
Power_comp = Power_comp_P0_Lo*(-1);
else
Power_comp = (int)(((int)IC_temperature - (norm_temp-20))*((float)Power_comp_P0_Lo/10.0)) ;
read_data = (get_flash_register((0x008)) & (0x3ff));
read_data = read_data + Power_comp ;
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) + 0x2, ptr, 2);
if((int)IC_temperature < (norm_temp-30))
Power_comp = Power_comp_P1_Lo*(-1);
else
Power_comp = (int)(((int)IC_temperature - (norm_temp-20))*((float)Power_comp_P1_Lo/10.0)) ;
read_data = (get_flash_register((0x00c)) & (0x3ff));
read_data = read_data + Power_comp ;
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) , ptr, 2);
mt7570_TxSD_level_set();
}
else
{
read_data = (get_flash_register((0x00c)) & (0x3ff)) | ((get_flash_register((0x008)) & (0x3ff)) << 16);
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) + 0x2 , ptr, 2);
ptr[2] = (read_data >> 16);
ptr[3] = (read_data >> 24);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) , ptr, 4);
mt7570_TxSD_level_set();
}
}
# 3992 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void SOL_mt7570_ERTemperatureCompensation(void)
{
unchar ptr[4];
uint read_data = 0;
int norm_temp =40;
int Power_comp = 0;
float temp = 0;
int LT_turnning_point = 0;
int NT_turnning_point = 0;
int HT_turnning_point = 0;
int LT_turnning_point_ibias = 0;
int NT_turnning_point_ibias = 0;
int HT_turnning_point_ibias = 0;
uint Ibias_init_tmp = 0;
uint Ibias_slop1 = 0;
uint Ibias_slop2 = 0;
uint Ibias_slop3 = 0;
uint Ibias_slop4 = 0;
uint Power_comp_P1_Hi = 0;
uint Power_comp_P1_Lo = 0;
int a = 0;
int b = 0;
int Ibias_set = 0;
if((get_flash_register((0x060)) | get_flash_register((0x070)) | get_flash_register((0x074)) | get_flash_register((0x00c)) )== 0xffffffff )
{
printk("SOL wrong flash setting \n");
}
else
{
if( (get_flash_register((0x060)) != 0xffffffff))
{
norm_temp = (get_flash_register((0x060)) & 0xff) ;
}
if( (get_flash_register((0x070))&0xff) != 0xff)
{
LT_turnning_point = (get_flash_register((0x070)) & 0xff) ;
}
if( ((get_flash_register((0x070))>>8 )&0xff) != 0xff)
{
NT_turnning_point = ((get_flash_register((0x070))>>8) & 0xff) ;
}
if( ((get_flash_register((0x070))>>16 )&0xff) != 0xff)
{
HT_turnning_point = ((get_flash_register((0x070)) >>16) & 0xff) ;
}
if( (get_flash_register((0x074))&0xff) != 0xff)
{
Ibias_slop1 = (get_flash_register((0x074)) & 0xff) ;
}
if( ((get_flash_register((0x074)) >>8 )&0xff) != 0xff)
{
Ibias_slop2 = ((get_flash_register((0x074)) >> 8) & 0xff) ;
}
if( ((get_flash_register((0x074)) >>16 )&0xff) != 0xff)
{
Ibias_slop3 = ((get_flash_register((0x074)) >> 16) & 0xff) ;
}
if( ((get_flash_register((0x074)) >>24 )&0xff) != 0xff)
{
Ibias_slop4 = ((get_flash_register((0x074)) >> 24) & 0xff) ;
}
if( ((get_flash_register((0x060)) >> 16)&0xfff) != 0xfff)
{
Ibias_init_tmp = ((get_flash_register((0x060)) >> 16) & 0xfff) ;
}
else
{
printk("SOL Ibias equal to 0 , not correct \n");
return;
}
if( (get_flash_register((0x078))&0xff) != 0xff)
{
Power_comp_P1_Lo = (get_flash_register((0x078)) & 0xff) ;
}
if( ((get_flash_register((0x078)) >>16 )&0xff) != 0xff)
{
Power_comp_P1_Hi = ((get_flash_register((0x078)) >> 16) & 0xff) ;
}
# 4108 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
if ( (int)(IC_temperature ) > norm_temp )
{
if((int)IC_temperature > 60)
{
Power_comp = Power_comp_P1_Hi;
}
else
{
Power_comp = (int)(((int)IC_temperature -norm_temp)*((float)Power_comp_P1_Hi/(60 - norm_temp ))) ;
}
read_data = (get_flash_register((0x00c)) & (0x3ff));
read_data = read_data + Power_comp ;
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) , ptr, 2);
mt7570_TxSD_level_set();
}
else if ( (int)(IC_temperature ) < (norm_temp) )
{
read_data = (get_flash_register((0x00c)) & (0x3ff));
if((int)IC_temperature < -10)
{
Power_comp = Power_comp_P1_Lo;
read_data = read_data - Power_comp ;
}
else
{
if((int)IC_temperature < 0)
{
Power_comp = (int)(((({ long ret; if (sizeof((int)IC_temperature) == sizeof(long)) { long __x = ((int)IC_temperature); ret = (__x < 0) ? -__x : __x; } else { int __x = ((int)IC_temperature); ret = (__x < 0) ? -__x : __x; } ret; }))+ norm_temp)*((float)Power_comp_P1_Lo/(norm_temp + 10))) ;
read_data = read_data - Power_comp ;
}
else
{
Power_comp = (int)(((int)IC_temperature-norm_temp)*((float)Power_comp_P1_Lo/(norm_temp + 10))) ;
read_data = read_data + Power_comp ;
}
}
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) , ptr, 2);
mt7570_TxSD_level_set();
}
else
{
read_data = (get_flash_register((0x00c)) & (0x3ff));
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) , ptr, 2);
mt7570_TxSD_level_set();
}
if((NT_turnning_point < LT_turnning_point ) || ( NT_turnning_point > HT_turnning_point ))
{
printk("turning point range error\n");
return;
}
if(( norm_temp > NT_turnning_point) &&( norm_temp < HT_turnning_point))
{
NT_turnning_point_ibias = Ibias_init_tmp - Ibias_slop3*(norm_temp - NT_turnning_point);
HT_turnning_point_ibias = Ibias_init_tmp + Ibias_slop3*(HT_turnning_point -norm_temp);
LT_turnning_point_ibias = NT_turnning_point_ibias - Ibias_slop2*(NT_turnning_point - LT_turnning_point);
}
else if (( NT_turnning_point > norm_temp) && ( norm_temp > LT_turnning_point))
{
NT_turnning_point_ibias = Ibias_init_tmp + Ibias_slop2*(NT_turnning_point - norm_temp);
LT_turnning_point_ibias = Ibias_init_tmp - Ibias_slop2*(norm_temp-LT_turnning_point);
HT_turnning_point_ibias = NT_turnning_point_ibias + Ibias_slop3*(HT_turnning_point - NT_turnning_point);
}
else if ( NT_turnning_point == norm_temp)
{
NT_turnning_point_ibias = Ibias_init_tmp ;
LT_turnning_point_ibias = NT_turnning_point_ibias - Ibias_slop2*(NT_turnning_point - LT_turnning_point);
HT_turnning_point_ibias = NT_turnning_point_ibias + Ibias_slop3*(HT_turnning_point - NT_turnning_point);
}
else if ( HT_turnning_point == norm_temp)
{
HT_turnning_point_ibias = Ibias_init_tmp;
NT_turnning_point_ibias = Ibias_init_tmp - Ibias_slop3*(HT_turnning_point - NT_turnning_point);
LT_turnning_point_ibias = NT_turnning_point_ibias - Ibias_slop2*(NT_turnning_point-LT_turnning_point);
}
else if ( norm_temp > HT_turnning_point)
{
HT_turnning_point_ibias = Ibias_init_tmp - Ibias_slop4*(norm_temp - HT_turnning_point);
NT_turnning_point_ibias = Ibias_init_tmp - Ibias_slop3*(HT_turnning_point - NT_turnning_point);
LT_turnning_point_ibias = NT_turnning_point_ibias - Ibias_slop2*(NT_turnning_point-LT_turnning_point);
}
else if ( norm_temp <= LT_turnning_point)
{
printk("Calibration tempature too lower , Wrong setting \n");
return;
}
if((int)IC_temperature >= HT_turnning_point )
{
Ibias_set = HT_turnning_point_ibias + Ibias_slop4*(int)((int)IC_temperature - HT_turnning_point);
}
else if(((int)IC_temperature >= NT_turnning_point ) & ((int)IC_temperature < HT_turnning_point))
{
Ibias_set = NT_turnning_point_ibias + Ibias_slop3*(int)((int)IC_temperature - NT_turnning_point);
}
else if(((int)IC_temperature < NT_turnning_point ) & ((int)IC_temperature >= LT_turnning_point))
{
Ibias_set = LT_turnning_point_ibias + Ibias_slop2*(int)((int)IC_temperature - LT_turnning_point);
}
else if ((int)IC_temperature < LT_turnning_point )
{
if((int)IC_temperature <0 )
{
Ibias_set = LT_turnning_point_ibias - Ibias_slop1 * ((({ long ret; if (sizeof((int)IC_temperature) == sizeof(long)) { long __x = ((int)IC_temperature); ret = (__x < 0) ? -__x : __x; } else { int __x = ((int)IC_temperature); ret = (__x < 0) ? -__x : __x; } ret; })) + LT_turnning_point);
}
else
{
Ibias_set = LT_turnning_point_ibias + Ibias_slop1 * ((int)IC_temperature - LT_turnning_point);
}
}
# 4268 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4);
ptr[0] = (ptr[0] & 0xfc) | 0x02;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C) , ptr, 4);
if (Ibias_set < 0x25)
Ibias_set = 0x25;
read_data = Ibias_set;
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0138) , ptr, 2);
temp = (float)global_bias_current*0.02442;
a = (int)temp;
b = (int)(temp*100)%100;
printk("SOL mode, Ibias = %d.%.2dmA", a, b);
printk("\t");
a = (int)IC_temperature;
b = ({ long ret; if (sizeof((int)(IC_temperature*10)%10) == sizeof(long)) { long __x = ((int)(IC_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } else { int __x = ((int)(IC_temperature*10)%10); ret = (__x < 0) ? -__x : __x; } ret; });
printk("IC temperature = %d.%dC\n", a, b);
}
}
# 4309 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_FiberPlug_Protect(void)
{
mt7570_restart_ERC();
}
# 4328 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_restart_ERC_P0(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4);
ptr[0] = ptr[0] & 0xfe;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4 );
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4);
ptr[0] = (ptr[0] & 0xfe) | (0x01);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 4 );
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "P0 ERC restarted\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 4340) ; };
}
# 4356 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_BiasTracking(void)
{
unchar ptr[4];
uint read_data = 0;
uint MPDL = 0;
uint Ibias_now = 0;
int temperature_index = 0;
int a = 0;
int b = 0;
float temp = 0;
temperature_index = (int)( (Env_temperature+40)/2.5 );
if( temperature_index < 0 )
temperature_index = 0;
read_data = LUT_Ibias_Imod[temperature_index][0];
if( read_data == 0xfff )
return;
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0138), ptr, 2 );
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Target bias loaded, 0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 4385, read_data) ; };
temp = (float)read_data*0.02442;
a = (int)temp;
b = (int)(temp*100)%100;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Target Ibias = %d.%.2dmA\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 4389, a, b) ; };
Ibias_now = global_bias_current;
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 1);
if( (ptr[0]&0x0f) == 0x5 )
{
if ( read_data > Ibias_now )
{
if ( read_data - Ibias_now > 0x14 )
{
MPDL = mt7570_information_output(0x05) + 0x4;
ptr[0] = MPDL;
ptr[1] = MPDL >> 8;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) + 0x2, ptr, 2);
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Bias tracking done\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 4406) ; };
}
}
else if ( read_data < Ibias_now )
{
if( Ibias_now - read_data > 0x14 )
{
MPDL = mt7570_information_output(0x05) - 0x4;
ptr[0] = MPDL;
ptr[1] = MPDL >> 8;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0004) + 0x2, ptr, 2);
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Bias tracking done\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 4417) ; };
}
}
}
}
# 4443 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_LUT_recover(void)
{
uint Init_Ibias = 0;
uint FLASH_Ibias = 0;
uint FLASH_Ibias_up = 0;
uint FLASH_Imod = 0;
uint FLASH_Imod_up = 0;
uint Ibias_offset = 0;
uint Ibias_recover = 0;
uint Imod_recover = 0;
uint Ibias_cal = 0;
int FLASH_index = 0;
int index = 0;
float temperature_cal = 25.0;
float temperature = 0;
if( DOL == 1 )
{
for( index = 0; index < 64; index ++ )
{
temperature = (float)index*2.5 - 40;
FLASH_index = (int)( (temperature+40)/10 );
if( FLASH_index < 0 )
FLASH_index = 0;
else if( FLASH_index >15 )
FLASH_index = 15;
FLASH_Ibias =(get_flash_register(0xa0+ FLASH_index*4 ) & 0x0fff0000) >> 16;
FLASH_Ibias_up =(get_flash_register(0xa0+(FLASH_index+1)*4) & 0x0fff0000) >> 16;
FLASH_Imod =(get_flash_register(0xa0+ FLASH_index*4 ) & 0x00000fff);
FLASH_Imod_up =(get_flash_register(0xa0+(FLASH_index+1)*4) & 0x00000fff);
if( FLASH_Ibias == 0xfff || FLASH_Ibias_up == 0xfff )
{
LUT_Ibias_Imod[index][0] = 0xfff;
}
else
{
if(FLASH_index < 4)
Ibias_recover = FLASH_Ibias + ((temperature +40) - (FLASH_index*10))*(FLASH_Ibias_up - FLASH_Ibias)/10;
else
Ibias_recover = FLASH_Ibias + (temperature - ((10*FLASH_index) -40))*(FLASH_Ibias_up - FLASH_Ibias)/10;
LUT_Ibias_Imod[index][0] = Ibias_recover;
}
if( FLASH_Imod == 0xfff || FLASH_Imod_up == 0xfff )
{
LUT_Ibias_Imod[index][1] = 0xfff;
}
else
{
if(FLASH_index < 4)
Imod_recover = FLASH_Imod + ((temperature +40) - (FLASH_index*10))*(FLASH_Imod_up - FLASH_Imod)/10;
else
Imod_recover = FLASH_Imod + (temperature - ((10*FLASH_index) -40))*(FLASH_Imod_up - FLASH_Imod)/10;
LUT_Ibias_Imod[index][1] = Imod_recover;
}
}
for( FLASH_index=0; FLASH_index<=15; FLASH_index++ )
{
index = 4*FLASH_index;
if( ((get_flash_register( 0xa0 + FLASH_index*4 ) & 0x0fff0000) >> 16 ) != 0xfff )
{
LUT_Ibias_Imod[index][0] = ( (get_flash_register( 0xa0 + FLASH_index*4 ) & 0x0fff0000) >> 16 );
}
if( (get_flash_register( 0xa0 + FLASH_index*4 ) & 0x00000fff) != 0xfff )
{
LUT_Ibias_Imod[index][1] = ( get_flash_register( 0xa0 + FLASH_index*4 ) & 0x00000fff );
}
}
}
else
{
if( get_flash_register((0x060)) != 0xffffffff )
temperature_cal = (float)get_flash_register((0x060))/10;
FLASH_index = (int)( (temperature_cal+40)/10 );
if (get_flash_register(0xa0+FLASH_index*4) == 0xffffffff)
{
printk("Lack of bias-current table\n");
return;
}
FLASH_Ibias =(get_flash_register(0xa0+FLASH_index*4) & 0x0fff0000) >> 16;
FLASH_Ibias_up =(get_flash_register(0xa0+(FLASH_index+1)*4) & 0x0fff0000) >> 16;
Ibias_cal = FLASH_Ibias + (temperature_cal - ((10*FLASH_index) -40))*(FLASH_Ibias_up - FLASH_Ibias)/10;
Init_Ibias = get_flash_register((0x000));
Ibias_offset = Init_Ibias - Ibias_cal;
printk("Bias offset = 0x%x\n", Ibias_offset);
for( index = 0; index < 64; index ++ )
{
temperature = (float)index*2.5 - 40;
FLASH_index = (int)( (temperature+40)/10 );
if( FLASH_index < 0 )
FLASH_index = 0;
else if( FLASH_index >15 )
FLASH_index = 15;
FLASH_Ibias =(get_flash_register(0xa0+ FLASH_index*4 ) & 0x0fff0000) >> 16;
FLASH_Ibias_up =(get_flash_register(0xa0+(FLASH_index+1)*4) & 0x0fff0000) >> 16;
if( FLASH_Ibias == 0xfff || FLASH_Ibias_up == 0xfff )
{
LUT_Ibias_Imod[index][0] = 0xfff;
}
else
{
if(FLASH_index < 4)
Ibias_recover = FLASH_Ibias + ((temperature +40) - (FLASH_index*10))*(FLASH_Ibias_up - FLASH_Ibias)/10;
else
Ibias_recover = FLASH_Ibias + (temperature - ((10*FLASH_index) -40))*(FLASH_Ibias_up - FLASH_Ibias)/10;
LUT_Ibias_Imod[index][0] = Ibias_recover + Ibias_offset;
}
if( LUT_Ibias_Imod[index][0] <= 0x0 )
{
printk("LUT recover failed\n");
return;
}
}
for( FLASH_index=0; FLASH_index<=15; FLASH_index++ )
{
index = 4*FLASH_index;
if( ((get_flash_register( 0xa0 + FLASH_index*4 ) & 0x0fff0000) >> 16 ) != 0xfff )
{
LUT_Ibias_Imod[index][0] = ( (get_flash_register( 0xa0 + FLASH_index*4 ) & 0x0fff0000) >> 16 ) + Ibias_offset;
}
}
}
}
# 4614 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_show_LUT(void)
{
int index = 0;
printk("Temperature");
printk("\t");
printk("Ibias");
printk("\t");
printk("Imod\n");
for( index = 0; index < 64; index ++ )
{
printk("%03d.%01d\t\t0x%03x\t0x%03x\n", (index*25-400)/10, ({ long ret; if (sizeof(index*25-400) == sizeof(long)) { long __x = (index*25-400); ret = (__x < 0) ? -__x : __x; } else { int __x = (index*25-400); ret = (__x < 0) ? -__x : __x; } ret; })%10, LUT_Ibias_Imod[index][0], LUT_Ibias_Imod[index][1] );
}
}
# 4645 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_SingleClosedLoopMode(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 1);
ptr[0] = (ptr[0] & 0xfc) | 0x02;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x013C), ptr, 1);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 1);
ptr[0] = (ptr[0] & 0xfc) | 0x01;
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x014C), ptr, 1);
printk("Switch to Single-closed Loop Mode\n");
}
# 4675 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_OpenLoopControl(void)
{
unchar ptr[4];
uint read_data = 0;
int temperature_index = 0;
int a = 0;
int b = 0;
float temp = 0;
temperature_index = (int)( (Env_temperature+40)/2.5 );
if( temperature_index < 0 )
temperature_index = 0;
read_data = LUT_Ibias_Imod[temperature_index][0];
if( read_data == 0xfff )
return;
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0138), ptr, 2 );
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Target bias loaded, 0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 4702, read_data) ; };
temp = (float)read_data*0.02442;
a = (int)temp;
b = (int)(temp*100)%100;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Target Ibias = %d.%.2dmA\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 4706, a, b) ; };
read_data = LUT_Ibias_Imod[temperature_index][1];
if( read_data == 0xfff )
return;
ptr[0] = read_data;
ptr[1] = (read_data >> 8);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0148), ptr, 2 );
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Target mod loaded, 0x%x\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 4719, read_data) ; };
temp = (float)read_data*0.02198;
a = (int)temp;
b = (int)(temp*100)%100;
{ if(gpPhyPriv->debugLevel & PHY_MSG_DBG) printk("[%lu]" "0ms" "[%s:%d]\n " "Target Imod = %d.%.2dmA\n" , jiffies, strrchr("/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c", '/') + 1, 4723, a, b) ; };
}
# 4740 "/opt/bba/EN7526G_3.18Kernel_SDK/modules/private/xpon_phy/src/mt7570.c"
void mt7570_LOS_init(void)
{
unchar ptr[4];
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x011C), ptr, 4);
ptr[0] = (ptr[0] & (0xfe)) | (0x01);
ptr[1] = (ptr[1] & (0xe0)) | (0x1f);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x011C), ptr, 4);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 4);
ptr[3] = (ptr[3] & (0xfb)) | (0x04);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 4);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 4);
ptr[2] = (ptr[2] & (0xbf)) | (0x40);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0024), ptr, 4);
phy_I2C_read(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0120), ptr, 4);
ptr[1] = (ptr[1] & (0xe0)) | (0x1f);
ptr[0] = (ptr[0] & (0x80)) | (0x05);
phy_I2C_write(0, gpPhyPriv->i2c_u2_clk_div, 0x70, 2, (0x0120), ptr, 4);
}