mirror of
https://github.com/GaloisInc/macaw.git
synced 2024-12-02 10:54:04 +03:00
37486 lines
1.3 MiB
37486 lines
1.3 MiB
# 1 "source/include/linux/syscalls.h"
|
|
# 1 "/home/sjw/linux-build//"
|
|
# 1 "<built-in>"
|
|
# 1 "<command-line>"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kconfig.h" 1
|
|
|
|
|
|
|
|
# 1 "include/generated/autoconf.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kconfig.h" 2
|
|
# 1 "<command-line>" 2
|
|
# 1 "source/include/linux/syscalls.h"
|
|
# 14 "source/include/linux/syscalls.h"
|
|
struct epoll_event;
|
|
struct iattr;
|
|
struct inode;
|
|
struct iocb;
|
|
struct io_event;
|
|
struct iovec;
|
|
struct itimerspec;
|
|
struct itimerval;
|
|
struct kexec_segment;
|
|
struct linux_dirent;
|
|
struct linux_dirent64;
|
|
struct list_head;
|
|
struct mmap_arg_struct;
|
|
struct msgbuf;
|
|
struct user_msghdr;
|
|
struct mmsghdr;
|
|
struct msqid_ds;
|
|
struct new_utsname;
|
|
struct nfsctl_arg;
|
|
struct __old_kernel_stat;
|
|
struct oldold_utsname;
|
|
struct old_utsname;
|
|
struct pollfd;
|
|
struct rlimit;
|
|
struct rlimit64;
|
|
struct rusage;
|
|
struct sched_param;
|
|
struct sched_attr;
|
|
struct sel_arg_struct;
|
|
struct semaphore;
|
|
struct sembuf;
|
|
struct shmid_ds;
|
|
struct sockaddr;
|
|
struct stat;
|
|
struct stat64;
|
|
struct statfs;
|
|
struct statfs64;
|
|
struct __sysctl_args;
|
|
struct sysinfo;
|
|
struct timespec;
|
|
struct timeval;
|
|
struct timex;
|
|
struct timezone;
|
|
struct tms;
|
|
struct utimbuf;
|
|
struct mq_attr;
|
|
struct compat_stat;
|
|
struct compat_timeval;
|
|
struct robust_list_head;
|
|
struct getcpu_cache;
|
|
struct old_linux_dirent;
|
|
struct perf_event_attr;
|
|
struct file_handle;
|
|
struct sigaltstack;
|
|
union bpf_attr;
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/types.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/types.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/types.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/types.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/int-ll64.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/int-ll64.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/int-ll64.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/int-ll64.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bitsperlong.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bitsperlong.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitsperlong.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/bitsperlong.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitsperlong.h" 2
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bitsperlong.h" 2
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/types.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/types.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/types.h" 2
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/types.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/posix_types.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/stddef.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/stddef.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/compiler.h" 1
|
|
# 54 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/compiler.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/compiler-gcc.h" 1
|
|
# 106 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/compiler-gcc.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/compiler-gcc4.h" 1
|
|
# 107 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/compiler-gcc.h" 2
|
|
# 55 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/compiler.h" 2
|
|
# 79 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/compiler.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/types.h" 1
|
|
# 190 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/compiler.h" 2
|
|
|
|
static 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__((no_instrument_function)) __attribute__((always_inline)) void data_access_exceeds_word_size(void)
|
|
{
|
|
}
|
|
|
|
static 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;
|
|
|
|
case 8: *(__u64 *)res = *(volatile __u64 *)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__((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;
|
|
|
|
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
|
|
|
|
default:
|
|
__asm__ __volatile__("": : :"memory");
|
|
__builtin_memcpy((void *)p, (const void *)res, size);
|
|
data_access_exceeds_word_size();
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
}
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/stddef.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/stddef.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
enum {
|
|
false = 0,
|
|
true = 1
|
|
};
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/posix_types.h" 2
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/posix_types.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/posix_types_64.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/posix_types_64.h"
|
|
typedef unsigned short __kernel_old_uid_t;
|
|
typedef unsigned short __kernel_old_gid_t;
|
|
|
|
|
|
typedef unsigned long __kernel_old_dev_t;
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/posix_types.h" 1
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 int __kernel_daddr_t;
|
|
|
|
|
|
|
|
typedef unsigned int __kernel_uid32_t;
|
|
typedef unsigned int __kernel_gid32_t;
|
|
# 71 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/posix_types.h"
|
|
typedef __kernel_ulong_t __kernel_size_t;
|
|
typedef __kernel_long_t __kernel_ssize_t;
|
|
typedef __kernel_long_t __kernel_ptrdiff_t;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
int val[2];
|
|
} __kernel_fsid_t;
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/posix_types_64.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/posix_types.h" 2
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/posix_types.h" 2
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/types.h" 2
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/types.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
typedef __kernel_old_uid_t old_uid_t;
|
|
typedef __kernel_old_gid_t old_gid_t;
|
|
|
|
|
|
|
|
typedef __kernel_loff_t loff_t;
|
|
# 54 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
# 133 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/types.h"
|
|
typedef unsigned long sector_t;
|
|
typedef unsigned long blkcnt_t;
|
|
# 155 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/types.h"
|
|
typedef u64 dma_addr_t;
|
|
# 166 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/types.h"
|
|
typedef unsigned gfp_t;
|
|
typedef unsigned fmode_t;
|
|
typedef unsigned oom_flags_t;
|
|
|
|
|
|
typedef u64 phys_addr_t;
|
|
|
|
|
|
|
|
|
|
typedef phys_addr_t resource_size_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef unsigned long irq_hw_number_t;
|
|
|
|
typedef struct {
|
|
int counter;
|
|
} atomic_t;
|
|
|
|
|
|
typedef struct {
|
|
long counter;
|
|
} atomic64_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);
|
|
};
|
|
# 71 "source/include/linux/syscalls.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/aio_abi.h" 1
|
|
# 31 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/aio_abi.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/byteorder.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/byteorder/little_endian.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/byteorder/little_endian.h" 1
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/byteorder/little_endian.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/swab.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/swab.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/swab.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((__const__)) __u32 __arch_swab32(__u32 val)
|
|
{
|
|
asm("bswapl %0" : "=r" (val) : "0" (val));
|
|
return val;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((__const__)) __u64 __arch_swab64(__u64 val)
|
|
{
|
|
# 30 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/swab.h"
|
|
asm("bswapq %0" : "=r" (val) : "0" (val));
|
|
return val;
|
|
|
|
}
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/swab.h" 2
|
|
# 46 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/swab.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((__const__)) __u16 __fswab16(__u16 val)
|
|
{
|
|
|
|
return __builtin_bswap16(val);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((__const__)) __u32 __fswab32(__u32 val)
|
|
{
|
|
|
|
return __builtin_bswap32(val);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((__const__)) __u64 __fswab64(__u64 val)
|
|
{
|
|
|
|
return __builtin_bswap64(val);
|
|
# 81 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/swab.h"
|
|
}
|
|
|
|
static 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__((no_instrument_function)) __attribute__((__const__)) __u32 __fswahb32(__u32 val)
|
|
{
|
|
|
|
|
|
|
|
return ((__u32)( (((__u32)(val) & (__u32)0x00ff00ffUL) << 8) | (((__u32)(val) & (__u32)0xff00ff00UL) >> 8)));
|
|
|
|
}
|
|
# 154 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/swab.h"
|
|
static 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__((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__((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__((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__((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__((no_instrument_function)) void __swab16s(__u16 *p)
|
|
{
|
|
|
|
|
|
|
|
*p = __swab16p(p);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __swab32s(__u32 *p)
|
|
{
|
|
|
|
|
|
|
|
*p = __swab32p(p);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __swab64s(__u64 *p)
|
|
{
|
|
|
|
|
|
|
|
*p = __swab64p(p);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __swahw32s(__u32 *p)
|
|
{
|
|
|
|
|
|
|
|
*p = __swahw32p(p);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __swahb32s(__u32 *p)
|
|
{
|
|
|
|
|
|
|
|
*p = __swahb32p(p);
|
|
|
|
}
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/swab.h" 2
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/byteorder/little_endian.h" 2
|
|
# 43 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/byteorder/little_endian.h"
|
|
static inline __attribute__((no_instrument_function)) __le64 __cpu_to_le64p(const __u64 *p)
|
|
{
|
|
return ( __le64)*p;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __u64 __le64_to_cpup(const __le64 *p)
|
|
{
|
|
return ( __u64)*p;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __le32 __cpu_to_le32p(const __u32 *p)
|
|
{
|
|
return ( __le32)*p;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __u32 __le32_to_cpup(const __le32 *p)
|
|
{
|
|
return ( __u32)*p;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __le16 __cpu_to_le16p(const __u16 *p)
|
|
{
|
|
return ( __le16)*p;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __u16 __le16_to_cpup(const __le16 *p)
|
|
{
|
|
return ( __u16)*p;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __be64 __cpu_to_be64p(const __u64 *p)
|
|
{
|
|
return ( __be64)__swab64p(p);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __u64 __be64_to_cpup(const __be64 *p)
|
|
{
|
|
return __swab64p((__u64 *)p);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __be32 __cpu_to_be32p(const __u32 *p)
|
|
{
|
|
return ( __be32)__swab32p(p);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __u32 __be32_to_cpup(const __be32 *p)
|
|
{
|
|
return __swab32p((__u32 *)p);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __be16 __cpu_to_be16p(const __u16 *p)
|
|
{
|
|
return ( __be16)__swab16p(p);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) __u16 __be16_to_cpup(const __be16 *p)
|
|
{
|
|
return __swab16p((__u16 *)p);
|
|
}
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/byteorder/little_endian.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/byteorder/generic.h" 1
|
|
# 143 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/byteorder/generic.h"
|
|
static inline __attribute__((no_instrument_function)) void le16_add_cpu(__le16 *var, u16 val)
|
|
{
|
|
*var = (( __le16)(__u16)((( __u16)(__le16)(*var)) + val));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void le32_add_cpu(__le32 *var, u32 val)
|
|
{
|
|
*var = (( __le32)(__u32)((( __u32)(__le32)(*var)) + val));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void le64_add_cpu(__le64 *var, u64 val)
|
|
{
|
|
*var = (( __le64)(__u64)((( __u64)(__le64)(*var)) + val));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void be16_add_cpu(__be16 *var, u16 val)
|
|
{
|
|
*var = (( __be16)(__builtin_constant_p((__u16)(((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__be16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__be16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__be16)(*var))) + val))) ? ((__u16)( (((__u16)(((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__be16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__be16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__be16)(*var))) + val)) & (__u16)0x00ffU) << 8) | (((__u16)(((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__be16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__be16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__be16)(*var))) + val)) & (__u16)0xff00U) >> 8))) : __fswab16(((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__be16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__be16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__be16)(*var))) + val))));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void be32_add_cpu(__be32 *var, u32 val)
|
|
{
|
|
*var = (( __be32)(__builtin_constant_p((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val))) ? ((__u32)( (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val)) & (__u32)0x000000ffUL) << 24) | (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val)) & (__u32)0xff000000UL) >> 24))) : __fswab32(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val))));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void be64_add_cpu(__be64 *var, u64 val)
|
|
{
|
|
*var = (( __be64)(__builtin_constant_p((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val))) ? ((__u64)( (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val))));
|
|
}
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/byteorder/little_endian.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/byteorder.h" 2
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/aio_abi.h" 2
|
|
|
|
typedef __kernel_ulong_t aio_context_t;
|
|
|
|
enum {
|
|
IOCB_CMD_PREAD = 0,
|
|
IOCB_CMD_PWRITE = 1,
|
|
IOCB_CMD_FSYNC = 2,
|
|
IOCB_CMD_FDSYNC = 3,
|
|
|
|
|
|
|
|
|
|
IOCB_CMD_NOOP = 6,
|
|
IOCB_CMD_PREADV = 7,
|
|
IOCB_CMD_PWRITEV = 8,
|
|
};
|
|
# 58 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/aio_abi.h"
|
|
struct io_event {
|
|
__u64 data;
|
|
__u64 obj;
|
|
__s64 res;
|
|
__s64 res2;
|
|
};
|
|
# 79 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/aio_abi.h"
|
|
struct iocb {
|
|
|
|
__u64 aio_data;
|
|
__u32 aio_key, aio_reserved1;
|
|
|
|
|
|
|
|
__u16 aio_lio_opcode;
|
|
__s16 aio_reqprio;
|
|
__u32 aio_fildes;
|
|
|
|
__u64 aio_buf;
|
|
__u64 aio_nbytes;
|
|
__s64 aio_offset;
|
|
|
|
|
|
__u64 aio_reserved2;
|
|
|
|
|
|
__u32 aio_flags;
|
|
|
|
|
|
|
|
|
|
|
|
__u32 aio_resfd;
|
|
};
|
|
# 72 "source/include/linux/syscalls.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/capability.h" 1
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/capability.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/capability.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/capability.h"
|
|
struct task_struct;
|
|
# 40 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/capability.h"
|
|
struct vfs_cap_data {
|
|
__le32 magic_etc;
|
|
struct {
|
|
__le32 permitted;
|
|
__le32 inheritable;
|
|
} data[2];
|
|
};
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/capability.h"
|
|
static 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__((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__((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__((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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/capability.h"
|
|
static 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__((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__((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__((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__((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__((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);
|
|
# 73 "source/include/linux/syscalls.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/signal.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/poison.h" 1
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/const.h" 1
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdarg.h" 1 3 4
|
|
# 40 "/usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdarg.h" 3 4
|
|
typedef __builtin_va_list __gnuc_va_list;
|
|
# 98 "/usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdarg.h" 3 4
|
|
typedef __gnuc_va_list va_list;
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/linkage.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/stringify.h" 1
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/linkage.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/export.h" 1
|
|
# 26 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/export.h"
|
|
struct kernel_symbol
|
|
{
|
|
unsigned long value;
|
|
const char *name;
|
|
};
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/linkage.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/linkage.h" 1
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/linkage.h" 2
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h" 2
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bitops.h" 1
|
|
# 27 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h" 1
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/alternative.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/asm.h" 1
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/alternative.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/segment.h" 1
|
|
# 147 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/segment.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cache.h" 1
|
|
# 148 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/segment.h" 2
|
|
# 214 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/segment.h"
|
|
extern const char early_idt_handler_array[32][9];
|
|
# 265 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/segment.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long get_limit(unsigned long segment)
|
|
{
|
|
unsigned long __limit;
|
|
asm("lsll %1,%0" : "=r" (__limit) : "r" (segment));
|
|
return __limit + 1;
|
|
}
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page_types.h" 1
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page_types.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page_64_types.h" 1
|
|
# 43 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page_types.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern int devmem_is_allowed(unsigned long pagenr);
|
|
|
|
extern unsigned long max_low_pfn_mapped;
|
|
extern unsigned long max_pfn_mapped;
|
|
|
|
static inline __attribute__((no_instrument_function)) phys_addr_t get_max_mapped(void)
|
|
{
|
|
return (phys_addr_t)max_pfn_mapped << 12;
|
|
}
|
|
|
|
bool pfn_range_is_mapped(unsigned long start_pfn, unsigned long end_pfn);
|
|
|
|
extern unsigned long init_memory_mapping(unsigned long start,
|
|
unsigned long end);
|
|
|
|
extern void initmem_init(void);
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/ptrace.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/ptrace-abi.h" 1
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/ptrace.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor-flags.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/processor-flags.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor-flags.h" 2
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/ptrace.h" 2
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h" 2
|
|
# 33 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h"
|
|
struct pt_regs {
|
|
unsigned long r15;
|
|
unsigned long r14;
|
|
unsigned long r13;
|
|
unsigned long r12;
|
|
unsigned long bp;
|
|
unsigned long bx;
|
|
|
|
unsigned long r11;
|
|
unsigned long r10;
|
|
unsigned long r9;
|
|
unsigned long r8;
|
|
unsigned long ax;
|
|
unsigned long cx;
|
|
unsigned long dx;
|
|
unsigned long si;
|
|
unsigned long di;
|
|
unsigned long orig_ax;
|
|
|
|
|
|
unsigned long ip;
|
|
unsigned long cs;
|
|
unsigned long flags;
|
|
unsigned long sp;
|
|
unsigned long ss;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h" 1
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/desc_defs.h" 1
|
|
# 22 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/desc_defs.h"
|
|
struct desc_struct {
|
|
union {
|
|
struct {
|
|
unsigned int a;
|
|
unsigned int b;
|
|
};
|
|
struct {
|
|
u16 limit0;
|
|
u16 base0;
|
|
unsigned base1: 8, type: 4, s: 1, dpl: 2, p: 1;
|
|
unsigned limit: 4, avl: 1, l: 1, d: 1, g: 1, base2: 8;
|
|
};
|
|
};
|
|
} __attribute__((packed));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum {
|
|
GATE_INTERRUPT = 0xE,
|
|
GATE_TRAP = 0xF,
|
|
GATE_CALL = 0xC,
|
|
GATE_TASK = 0x5,
|
|
};
|
|
|
|
|
|
struct gate_struct64 {
|
|
u16 offset_low;
|
|
u16 segment;
|
|
unsigned ist : 3, zero0 : 5, type : 5, dpl : 2, p : 1;
|
|
u16 offset_middle;
|
|
u32 offset_high;
|
|
u32 zero1;
|
|
} __attribute__((packed));
|
|
|
|
|
|
|
|
|
|
|
|
enum {
|
|
DESC_TSS = 0x9,
|
|
DESC_LDT = 0x2,
|
|
DESCTYPE_S = 0x10,
|
|
};
|
|
|
|
|
|
struct ldttss_desc64 {
|
|
u16 limit0;
|
|
u16 base0;
|
|
unsigned base1 : 8, type : 5, dpl : 2, p : 1;
|
|
unsigned limit1 : 4, zero0 : 3, g : 1, base2 : 8;
|
|
u32 base3;
|
|
u32 zero1;
|
|
} __attribute__((packed));
|
|
|
|
|
|
typedef struct gate_struct64 gate_desc;
|
|
typedef struct ldttss_desc64 ldt_desc;
|
|
typedef struct ldttss_desc64 tss_desc;
|
|
# 94 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/desc_defs.h"
|
|
struct desc_ptr {
|
|
unsigned short size;
|
|
unsigned long address;
|
|
} __attribute__((packed)) ;
|
|
# 43 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/kmap_types.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/kmap_types.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/kmap_types.h" 2
|
|
# 44 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_types.h" 1
|
|
# 140 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_types.h"
|
|
enum page_cache_mode {
|
|
_PAGE_CACHE_MODE_WB = 0,
|
|
_PAGE_CACHE_MODE_WC = 1,
|
|
_PAGE_CACHE_MODE_UC_MINUS = 2,
|
|
_PAGE_CACHE_MODE_UC = 3,
|
|
_PAGE_CACHE_MODE_WT = 4,
|
|
_PAGE_CACHE_MODE_WP = 5,
|
|
_PAGE_CACHE_MODE_NUM = 8
|
|
};
|
|
# 231 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_types.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_64_types.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/sparsemem.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_64_types.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef unsigned long pteval_t;
|
|
typedef unsigned long pmdval_t;
|
|
typedef unsigned long pudval_t;
|
|
typedef unsigned long pgdval_t;
|
|
typedef unsigned long pgprotval_t;
|
|
|
|
typedef struct { pteval_t pte; } pte_t;
|
|
# 232 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_types.h" 2
|
|
# 244 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_types.h"
|
|
typedef struct pgprot { pgprotval_t pgprot; } pgprot_t;
|
|
|
|
typedef struct { pgdval_t pgd; } pgd_t;
|
|
|
|
static inline __attribute__((no_instrument_function)) pgd_t native_make_pgd(pgdval_t val)
|
|
{
|
|
return (pgd_t) { val };
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pgdval_t native_pgd_val(pgd_t pgd)
|
|
{
|
|
return pgd.pgd;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pgdval_t pgd_flags(pgd_t pgd)
|
|
{
|
|
return native_pgd_val(pgd) & (~((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))));
|
|
}
|
|
|
|
|
|
typedef struct { pudval_t pud; } pud_t;
|
|
|
|
static inline __attribute__((no_instrument_function)) pud_t native_make_pud(pmdval_t val)
|
|
{
|
|
return (pud_t) { val };
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pudval_t native_pud_val(pud_t pud)
|
|
{
|
|
return pud.pud;
|
|
}
|
|
# 285 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_types.h"
|
|
typedef struct { pmdval_t pmd; } pmd_t;
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t native_make_pmd(pmdval_t val)
|
|
{
|
|
return (pmd_t) { val };
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmdval_t native_pmd_val(pmd_t pmd)
|
|
{
|
|
return pmd.pmd;
|
|
}
|
|
# 305 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_types.h"
|
|
static inline __attribute__((no_instrument_function)) pudval_t pud_flags(pud_t pud)
|
|
{
|
|
return native_pud_val(pud) & (~((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmdval_t pmd_flags(pmd_t pmd)
|
|
{
|
|
return native_pmd_val(pmd) & (~((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t native_make_pte(pteval_t val)
|
|
{
|
|
return (pte_t) { .pte = val };
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pteval_t native_pte_val(pte_t pte)
|
|
{
|
|
return pte.pte;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pteval_t pte_flags(pte_t pte)
|
|
{
|
|
return native_pte_val(pte) & (~((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))));
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pteval_t ptenuma_flags(pte_t pte)
|
|
{
|
|
return pte_flags(pte) & ((((pteval_t)(1)) << (8 +1))|(((pteval_t)(1)) << 8)|(((pteval_t)(1)) << 0));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmdval_t pmdnuma_flags(pmd_t pmd)
|
|
{
|
|
return pmd_flags(pmd) & ((((pteval_t)(1)) << (8 +1))|(((pteval_t)(1)) << 8)|(((pteval_t)(1)) << 0));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
extern uint16_t __cachemode2pte_tbl[_PAGE_CACHE_MODE_NUM];
|
|
extern uint8_t __pte2cachemode_tbl[8];
|
|
# 359 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_types.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long cachemode2protval(enum page_cache_mode pcm)
|
|
{
|
|
if (__builtin_expect(!!(pcm == 0), 1))
|
|
return 0;
|
|
return __cachemode2pte_tbl[pcm];
|
|
}
|
|
static inline __attribute__((no_instrument_function)) pgprot_t cachemode2pgprot(enum page_cache_mode pcm)
|
|
{
|
|
return ((pgprot_t) { (cachemode2protval(pcm)) } );
|
|
}
|
|
static inline __attribute__((no_instrument_function)) enum page_cache_mode pgprot2cachemode(pgprot_t pgprot)
|
|
{
|
|
unsigned long masked;
|
|
|
|
masked = ((pgprot).pgprot) & ((((pteval_t)(1)) << 7) | (((pteval_t)(1)) << 4) | (((pteval_t)(1)) << 3));
|
|
if (__builtin_expect(!!(masked == 0), 1))
|
|
return 0;
|
|
return __pte2cachemode_tbl[((((masked) >> (7 - 2)) & 4) | (((masked) >> (4 - 1)) & 2) | (((masked) >> 3) & 1))];
|
|
}
|
|
static inline __attribute__((no_instrument_function)) pgprot_t pgprot_4k_2_large(pgprot_t pgprot)
|
|
{
|
|
pgprot_t new;
|
|
unsigned long val;
|
|
|
|
val = ((pgprot).pgprot);
|
|
((new).pgprot) = (val & ~((((pteval_t)(1)) << 7) | (((pteval_t)(1)) << 12))) |
|
|
((val & (((pteval_t)(1)) << 7)) << (12 - 7));
|
|
return new;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) pgprot_t pgprot_large_2_4k(pgprot_t pgprot)
|
|
{
|
|
pgprot_t new;
|
|
unsigned long val;
|
|
|
|
val = ((pgprot).pgprot);
|
|
((new).pgprot) = (val & ~((((pteval_t)(1)) << 7) | (((pteval_t)(1)) << 12))) |
|
|
((val & (((pteval_t)(1)) << 12)) >>
|
|
(12 - 7));
|
|
return new;
|
|
}
|
|
|
|
|
|
typedef struct page *pgtable_t;
|
|
|
|
extern pteval_t __supported_pte_mask;
|
|
extern void set_nx(void);
|
|
extern int nx_enabled;
|
|
|
|
|
|
extern pgprot_t pgprot_writecombine(pgprot_t prot);
|
|
|
|
|
|
|
|
|
|
|
|
struct file;
|
|
pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
|
|
unsigned long size, pgprot_t vma_prot);
|
|
int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
|
|
unsigned long size, pgprot_t *vma_prot);
|
|
|
|
|
|
void set_pte_vaddr(unsigned long vaddr, pte_t pte);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct seq_file;
|
|
extern void arch_report_meminfo(struct seq_file *m);
|
|
|
|
enum pg_level {
|
|
PG_LEVEL_NONE,
|
|
PG_LEVEL_4K,
|
|
PG_LEVEL_2M,
|
|
PG_LEVEL_1G,
|
|
PG_LEVEL_NUM
|
|
};
|
|
|
|
|
|
extern void update_page_count(int level, unsigned long pages);
|
|
# 452 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_types.h"
|
|
extern pte_t *lookup_address(unsigned long address, unsigned int *level);
|
|
extern pte_t *lookup_address_in_pgd(pgd_t *pgd, unsigned long address,
|
|
unsigned int *level);
|
|
extern pmd_t *lookup_pmd_address(unsigned long address);
|
|
extern phys_addr_t slow_virt_to_phys(void *__address);
|
|
extern int kernel_map_pages_in_pgd(pgd_t *pgd, u64 pfn, unsigned long address,
|
|
unsigned numpages, unsigned long page_flags);
|
|
void kernel_unmap_pages_in_pgd(pgd_t *root, unsigned long address,
|
|
unsigned numpages);
|
|
# 45 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h" 2
|
|
|
|
struct page;
|
|
struct thread_struct;
|
|
struct desc_ptr;
|
|
struct tss_struct;
|
|
struct mm_struct;
|
|
struct desc_struct;
|
|
struct task_struct;
|
|
struct cpumask;
|
|
|
|
|
|
|
|
|
|
|
|
struct paravirt_callee_save {
|
|
void *func;
|
|
};
|
|
|
|
|
|
struct pv_info {
|
|
unsigned int kernel_rpl;
|
|
int shared_kernel_pmd;
|
|
|
|
|
|
u16 extra_user_64bit_cs;
|
|
|
|
|
|
int paravirt_enabled;
|
|
const char *name;
|
|
};
|
|
|
|
struct pv_init_ops {
|
|
# 85 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h"
|
|
unsigned (*patch)(u8 type, u16 clobber, void *insnbuf,
|
|
unsigned long addr, unsigned len);
|
|
};
|
|
|
|
|
|
struct pv_lazy_ops {
|
|
|
|
void (*enter)(void);
|
|
void (*leave)(void);
|
|
void (*flush)(void);
|
|
};
|
|
|
|
struct pv_time_ops {
|
|
unsigned long long (*sched_clock)(void);
|
|
unsigned long long (*steal_clock)(int cpu);
|
|
unsigned long (*get_tsc_khz)(void);
|
|
};
|
|
|
|
struct pv_cpu_ops {
|
|
|
|
unsigned long (*get_debugreg)(int regno);
|
|
void (*set_debugreg)(int regno, unsigned long value);
|
|
|
|
void (*clts)(void);
|
|
|
|
unsigned long (*read_cr0)(void);
|
|
void (*write_cr0)(unsigned long);
|
|
|
|
unsigned long (*read_cr4_safe)(void);
|
|
unsigned long (*read_cr4)(void);
|
|
void (*write_cr4)(unsigned long);
|
|
|
|
|
|
unsigned long (*read_cr8)(void);
|
|
void (*write_cr8)(unsigned long);
|
|
|
|
|
|
|
|
void (*load_tr_desc)(void);
|
|
void (*load_gdt)(const struct desc_ptr *);
|
|
void (*load_idt)(const struct desc_ptr *);
|
|
|
|
void (*store_idt)(struct desc_ptr *);
|
|
void (*set_ldt)(const void *desc, unsigned entries);
|
|
unsigned long (*store_tr)(void);
|
|
void (*load_tls)(struct thread_struct *t, unsigned int cpu);
|
|
|
|
void (*load_gs_index)(unsigned int idx);
|
|
|
|
void (*write_ldt_entry)(struct desc_struct *ldt, int entrynum,
|
|
const void *desc);
|
|
void (*write_gdt_entry)(struct desc_struct *,
|
|
int entrynum, const void *desc, int size);
|
|
void (*write_idt_entry)(gate_desc *,
|
|
int entrynum, const gate_desc *gate);
|
|
void (*alloc_ldt)(struct desc_struct *ldt, unsigned entries);
|
|
void (*free_ldt)(struct desc_struct *ldt, unsigned entries);
|
|
|
|
void (*load_sp0)(struct tss_struct *tss, struct thread_struct *t);
|
|
|
|
void (*set_iopl_mask)(unsigned mask);
|
|
|
|
void (*wbinvd)(void);
|
|
void (*io_delay)(void);
|
|
|
|
|
|
void (*cpuid)(unsigned int *eax, unsigned int *ebx,
|
|
unsigned int *ecx, unsigned int *edx);
|
|
|
|
|
|
|
|
u64 (*read_msr)(unsigned int msr, int *err);
|
|
int (*write_msr)(unsigned int msr, unsigned low, unsigned high);
|
|
|
|
u64 (*read_tsc)(void);
|
|
u64 (*read_pmc)(int counter);
|
|
unsigned long long (*read_tscp)(unsigned int *aux);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void (*irq_enable_sysexit)(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void (*usergs_sysret64)(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void (*usergs_sysret32)(void);
|
|
|
|
|
|
|
|
void (*iret)(void);
|
|
|
|
void (*swapgs)(void);
|
|
|
|
void (*start_context_switch)(struct task_struct *prev);
|
|
void (*end_context_switch)(struct task_struct *next);
|
|
};
|
|
|
|
struct pv_irq_ops {
|
|
# 207 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h"
|
|
struct paravirt_callee_save save_fl;
|
|
struct paravirt_callee_save restore_fl;
|
|
struct paravirt_callee_save irq_disable;
|
|
struct paravirt_callee_save irq_enable;
|
|
|
|
void (*safe_halt)(void);
|
|
void (*halt)(void);
|
|
|
|
|
|
void (*adjust_exception_frame)(void);
|
|
|
|
};
|
|
|
|
struct pv_apic_ops {
|
|
|
|
void (*startup_ipi_hook)(int phys_apicid,
|
|
unsigned long start_eip,
|
|
unsigned long start_esp);
|
|
|
|
};
|
|
|
|
struct pv_mmu_ops {
|
|
unsigned long (*read_cr2)(void);
|
|
void (*write_cr2)(unsigned long);
|
|
|
|
unsigned long (*read_cr3)(void);
|
|
void (*write_cr3)(unsigned long);
|
|
|
|
|
|
|
|
|
|
|
|
void (*activate_mm)(struct mm_struct *prev,
|
|
struct mm_struct *next);
|
|
void (*dup_mmap)(struct mm_struct *oldmm,
|
|
struct mm_struct *mm);
|
|
void (*exit_mmap)(struct mm_struct *mm);
|
|
|
|
|
|
|
|
void (*flush_tlb_user)(void);
|
|
void (*flush_tlb_kernel)(void);
|
|
void (*flush_tlb_single)(unsigned long addr);
|
|
void (*flush_tlb_others)(const struct cpumask *cpus,
|
|
struct mm_struct *mm,
|
|
unsigned long start,
|
|
unsigned long end);
|
|
|
|
|
|
int (*pgd_alloc)(struct mm_struct *mm);
|
|
void (*pgd_free)(struct mm_struct *mm, pgd_t *pgd);
|
|
|
|
|
|
|
|
|
|
|
|
void (*alloc_pte)(struct mm_struct *mm, unsigned long pfn);
|
|
void (*alloc_pmd)(struct mm_struct *mm, unsigned long pfn);
|
|
void (*alloc_pud)(struct mm_struct *mm, unsigned long pfn);
|
|
void (*release_pte)(unsigned long pfn);
|
|
void (*release_pmd)(unsigned long pfn);
|
|
void (*release_pud)(unsigned long pfn);
|
|
|
|
|
|
void (*set_pte)(pte_t *ptep, pte_t pteval);
|
|
void (*set_pte_at)(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep, pte_t pteval);
|
|
void (*set_pmd)(pmd_t *pmdp, pmd_t pmdval);
|
|
void (*set_pmd_at)(struct mm_struct *mm, unsigned long addr,
|
|
pmd_t *pmdp, pmd_t pmdval);
|
|
void (*pte_update)(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep);
|
|
void (*pte_update_defer)(struct mm_struct *mm,
|
|
unsigned long addr, pte_t *ptep);
|
|
void (*pmd_update)(struct mm_struct *mm, unsigned long addr,
|
|
pmd_t *pmdp);
|
|
void (*pmd_update_defer)(struct mm_struct *mm,
|
|
unsigned long addr, pmd_t *pmdp);
|
|
|
|
pte_t (*ptep_modify_prot_start)(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep);
|
|
void (*ptep_modify_prot_commit)(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep, pte_t pte);
|
|
|
|
struct paravirt_callee_save pte_val;
|
|
struct paravirt_callee_save make_pte;
|
|
|
|
struct paravirt_callee_save pgd_val;
|
|
struct paravirt_callee_save make_pgd;
|
|
# 306 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h"
|
|
void (*set_pud)(pud_t *pudp, pud_t pudval);
|
|
|
|
struct paravirt_callee_save pmd_val;
|
|
struct paravirt_callee_save make_pmd;
|
|
|
|
|
|
struct paravirt_callee_save pud_val;
|
|
struct paravirt_callee_save make_pud;
|
|
|
|
void (*set_pgd)(pgd_t *pudp, pgd_t pgdval);
|
|
|
|
|
|
|
|
struct pv_lazy_ops lazy_mode;
|
|
|
|
|
|
|
|
|
|
|
|
void (*set_fixmap)(unsigned idx,
|
|
phys_addr_t phys, pgprot_t flags);
|
|
};
|
|
|
|
struct arch_spinlock;
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock_types.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock_types.h"
|
|
typedef u16 __ticket_t;
|
|
typedef u32 __ticketpair_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct arch_spinlock {
|
|
union {
|
|
__ticketpair_t head_tail;
|
|
struct __raw_tickets {
|
|
__ticket_t head, tail;
|
|
} tickets;
|
|
};
|
|
} arch_spinlock_t;
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/qrwlock_types.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock_types.h" 1
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/qrwlock_types.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct qrwlock {
|
|
atomic_t cnts;
|
|
arch_spinlock_t lock;
|
|
} arch_rwlock_t;
|
|
# 38 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock_types.h" 2
|
|
# 332 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h" 2
|
|
|
|
|
|
|
|
|
|
struct pv_lock_ops {
|
|
struct paravirt_callee_save lock_spinning;
|
|
void (*unlock_kick)(struct arch_spinlock *lock, __ticket_t ticket);
|
|
};
|
|
|
|
|
|
|
|
|
|
struct paravirt_patch_template {
|
|
struct pv_init_ops pv_init_ops;
|
|
struct pv_time_ops pv_time_ops;
|
|
struct pv_cpu_ops pv_cpu_ops;
|
|
struct pv_irq_ops pv_irq_ops;
|
|
struct pv_apic_ops pv_apic_ops;
|
|
struct pv_mmu_ops pv_mmu_ops;
|
|
struct pv_lock_ops pv_lock_ops;
|
|
};
|
|
|
|
extern struct pv_info pv_info;
|
|
extern struct pv_init_ops pv_init_ops;
|
|
extern struct pv_time_ops pv_time_ops;
|
|
extern struct pv_cpu_ops pv_cpu_ops;
|
|
extern struct pv_irq_ops pv_irq_ops;
|
|
extern struct pv_apic_ops pv_apic_ops;
|
|
extern struct pv_mmu_ops pv_mmu_ops;
|
|
extern struct pv_lock_ops pv_lock_ops;
|
|
# 397 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h"
|
|
unsigned paravirt_patch_nop(void);
|
|
unsigned paravirt_patch_ident_32(void *insnbuf, unsigned len);
|
|
unsigned paravirt_patch_ident_64(void *insnbuf, unsigned len);
|
|
unsigned paravirt_patch_ignore(unsigned len);
|
|
unsigned paravirt_patch_call(void *insnbuf,
|
|
const void *target, u16 tgt_clobbers,
|
|
unsigned long addr, u16 site_clobbers,
|
|
unsigned len);
|
|
unsigned paravirt_patch_jmp(void *insnbuf, const void *target,
|
|
unsigned long addr, unsigned len);
|
|
unsigned paravirt_patch_default(u8 type, u16 clobbers, void *insnbuf,
|
|
unsigned long addr, unsigned len);
|
|
|
|
unsigned paravirt_patch_insns(void *insnbuf, unsigned len,
|
|
const char *start, const char *end);
|
|
|
|
unsigned native_patch(u8 type, u16 clobbers, void *ibuf,
|
|
unsigned long addr, unsigned len);
|
|
|
|
int paravirt_disable_iospace(void);
|
|
# 675 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt_types.h"
|
|
enum paravirt_lazy_mode {
|
|
PARAVIRT_LAZY_NONE,
|
|
PARAVIRT_LAZY_MMU,
|
|
PARAVIRT_LAZY_CPU,
|
|
};
|
|
|
|
enum paravirt_lazy_mode paravirt_get_lazy_mode(void);
|
|
void paravirt_start_context_switch(struct task_struct *prev);
|
|
void paravirt_end_context_switch(struct task_struct *next);
|
|
|
|
void paravirt_enter_lazy_mmu(void);
|
|
void paravirt_leave_lazy_mmu(void);
|
|
void paravirt_flush_lazy_mmu(void);
|
|
|
|
void _paravirt_nop(void);
|
|
u32 _paravirt_ident_32(u32);
|
|
u64 _paravirt_ident_64(u64);
|
|
|
|
|
|
|
|
|
|
struct paravirt_patch_site {
|
|
u8 *instr;
|
|
u8 instrtype;
|
|
u8 len;
|
|
u16 clobbers;
|
|
};
|
|
|
|
extern struct paravirt_patch_site __parainstructions[],
|
|
__parainstructions_end[];
|
|
# 65 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h" 2
|
|
|
|
|
|
struct cpuinfo_x86;
|
|
struct task_struct;
|
|
|
|
extern unsigned long profile_pc(struct pt_regs *regs);
|
|
|
|
|
|
extern unsigned long
|
|
convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs);
|
|
extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
|
|
int error_code, int si_code);
|
|
|
|
|
|
extern unsigned long syscall_trace_enter_phase1(struct pt_regs *, u32 arch);
|
|
extern long syscall_trace_enter_phase2(struct pt_regs *, u32 arch,
|
|
unsigned long phase1_result);
|
|
|
|
extern long syscall_trace_enter(struct pt_regs *);
|
|
extern void syscall_trace_leave(struct pt_regs *);
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long regs_return_value(struct pt_regs *regs)
|
|
{
|
|
return regs->ax;
|
|
}
|
|
# 98 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) int user_mode(struct pt_regs *regs)
|
|
{
|
|
|
|
|
|
|
|
return !!(regs->cs & 3);
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int user_mode_vm(struct pt_regs *regs)
|
|
{
|
|
|
|
|
|
|
|
|
|
return user_mode(regs);
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int v8086_mode(struct pt_regs *regs)
|
|
{
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool user_64bit_mode(struct pt_regs *regs)
|
|
{
|
|
# 137 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h"
|
|
return regs->cs == (6*8+3) || regs->cs == pv_info.extra_user_64bit_cs;
|
|
|
|
}
|
|
# 152 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long kernel_stack_pointer(struct pt_regs *regs)
|
|
{
|
|
return regs->sp;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/ptrace.h" 1
|
|
# 22 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long instruction_pointer(struct pt_regs *regs)
|
|
{
|
|
return ((regs)->ip);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void instruction_pointer_set(struct pt_regs *regs,
|
|
unsigned long val)
|
|
{
|
|
(((regs)->ip) = (val));
|
|
}
|
|
# 44 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long user_stack_pointer(struct pt_regs *regs)
|
|
{
|
|
return ((regs)->sp);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void user_stack_pointer_set(struct pt_regs *regs,
|
|
unsigned long val)
|
|
{
|
|
(((regs)->sp) = (val));
|
|
}
|
|
# 62 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long frame_pointer(struct pt_regs *regs)
|
|
{
|
|
return ((regs)->bp);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void frame_pointer_set(struct pt_regs *regs,
|
|
unsigned long val)
|
|
{
|
|
(((regs)->bp) = (val));
|
|
}
|
|
# 163 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h" 2
|
|
|
|
|
|
extern int regs_query_register_offset(const char *name);
|
|
extern const char *regs_query_register_name(unsigned int offset);
|
|
# 178 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long regs_get_register(struct pt_regs *regs,
|
|
unsigned int offset)
|
|
{
|
|
if (__builtin_expect(!!(offset > (__builtin_offsetof(struct pt_regs,ss))), 0))
|
|
return 0;
|
|
# 192 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h"
|
|
return *(unsigned long *)((unsigned long)regs + offset);
|
|
}
|
|
# 203 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) int regs_within_kernel_stack(struct pt_regs *regs,
|
|
unsigned long addr)
|
|
{
|
|
return ((addr & ~((((1UL) << 12) << 2) - 1)) ==
|
|
(kernel_stack_pointer(regs) & ~((((1UL) << 12) << 2) - 1)));
|
|
}
|
|
# 219 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,
|
|
unsigned int n)
|
|
{
|
|
unsigned long *addr = (unsigned long *)kernel_stack_pointer(regs);
|
|
addr += n;
|
|
if (regs_within_kernel_stack(regs, (unsigned long)addr))
|
|
return *addr;
|
|
else
|
|
return 0;
|
|
}
|
|
# 255 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ptrace.h"
|
|
struct user_desc;
|
|
extern int do_get_thread_area(struct task_struct *p, int idx,
|
|
struct user_desc *info);
|
|
extern int do_set_thread_area(struct task_struct *p, int idx,
|
|
struct user_desc *info, int can_allocate);
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/alternative.h" 2
|
|
# 46 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/alternative.h"
|
|
struct alt_instr {
|
|
s32 instr_offset;
|
|
s32 repl_offset;
|
|
u16 cpuid;
|
|
u8 instrlen;
|
|
u8 replacementlen;
|
|
};
|
|
|
|
extern void alternative_instructions(void);
|
|
extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end);
|
|
|
|
struct module;
|
|
|
|
|
|
extern void alternatives_smp_module_add(struct module *mod, char *name,
|
|
void *locks, void *locks_end,
|
|
void *text, void *text_end);
|
|
extern void alternatives_smp_module_del(struct module *mod);
|
|
extern void alternatives_enable_smp(void);
|
|
extern int alternatives_text_reserved(void *start, void *end);
|
|
extern bool skip_smp_alternatives;
|
|
# 132 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/alternative.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpufeature.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/required-features.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpufeature.h" 2
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/disabled-features.h" 1
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpufeature.h" 2
|
|
# 261 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpufeature.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bitops.h" 1
|
|
# 262 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpufeature.h" 2
|
|
|
|
|
|
extern const char * const x86_cap_flags[11*32];
|
|
extern const char * const x86_power_flags[32];
|
|
# 277 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpufeature.h"
|
|
extern const char * const x86_bug_flags[1*32];
|
|
# 393 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpufeature.h"
|
|
extern void warn_pre_alternatives(void);
|
|
extern bool __static_cpu_has_safe(u16 bit);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) __attribute__((pure)) bool __static_cpu_has(u16 bit)
|
|
{
|
|
# 448 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpufeature.h"
|
|
u8 flag;
|
|
|
|
asm volatile("1: movb $0,%0\n"
|
|
"2:\n"
|
|
".section .altinstructions,\"a\"\n"
|
|
" .long 1b - .\n"
|
|
" .long 3f - .\n"
|
|
" .word %P1\n"
|
|
" .byte 2b - 1b\n"
|
|
" .byte 4f - 3f\n"
|
|
".previous\n"
|
|
".section .discard,\"aw\",@progbits\n"
|
|
" .byte 0xff + (4f-3f) - (2b-1b)\n"
|
|
".previous\n"
|
|
".section .altinstr_replacement,\"ax\"\n"
|
|
"3: movb $1,%0\n"
|
|
"4:\n"
|
|
".previous\n"
|
|
: "=qm" (flag) : "i" (bit));
|
|
return flag;
|
|
|
|
|
|
}
|
|
# 481 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpufeature.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) __attribute__((pure)) bool _static_cpu_has_safe(u16 bit)
|
|
{
|
|
# 518 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpufeature.h"
|
|
u8 flag;
|
|
|
|
asm volatile("1: movb $2,%0\n"
|
|
"2:\n"
|
|
".section .altinstructions,\"a\"\n"
|
|
" .long 1b - .\n"
|
|
" .long 3f - .\n"
|
|
" .word %P2\n"
|
|
" .byte 2b - 1b\n"
|
|
" .byte 4f - 3f\n"
|
|
".previous\n"
|
|
".section .discard,\"aw\",@progbits\n"
|
|
" .byte 0xff + (4f-3f) - (2b-1b)\n"
|
|
".previous\n"
|
|
".section .altinstr_replacement,\"ax\"\n"
|
|
"3: movb $0,%0\n"
|
|
"4:\n"
|
|
".previous\n"
|
|
".section .altinstructions,\"a\"\n"
|
|
" .long 1b - .\n"
|
|
" .long 5f - .\n"
|
|
" .word %P1\n"
|
|
" .byte 4b - 3b\n"
|
|
" .byte 6f - 5f\n"
|
|
".previous\n"
|
|
".section .discard,\"aw\",@progbits\n"
|
|
" .byte 0xff + (6f-5f) - (4b-3b)\n"
|
|
".previous\n"
|
|
".section .altinstr_replacement,\"ax\"\n"
|
|
"5: movb $1,%0\n"
|
|
"6:\n"
|
|
".previous\n"
|
|
: "=qm" (flag)
|
|
: "i" (bit), "i" (( 3*32+21)));
|
|
return (flag == 2 ? __static_cpu_has_safe(bit) : flag);
|
|
|
|
}
|
|
# 133 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/alternative.h" 2
|
|
# 213 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/alternative.h"
|
|
struct paravirt_patch_site;
|
|
|
|
void apply_paravirt(struct paravirt_patch_site *start,
|
|
struct paravirt_patch_site *end);
|
|
# 225 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/alternative.h"
|
|
extern void *text_poke_early(void *addr, const void *opcode, size_t len);
|
|
# 241 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/alternative.h"
|
|
extern void *text_poke(void *addr, const void *opcode, size_t len);
|
|
extern int poke_int3_handler(struct pt_regs *regs);
|
|
extern void *text_poke_bp(void *addr, const void *opcode, size_t len, void *handler);
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/rmwcc.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/barrier.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/nops.h" 1
|
|
# 142 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/nops.h"
|
|
extern const unsigned char * const *ideal_nops;
|
|
extern void arch_init_ideal_nops(void);
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/barrier.h" 2
|
|
# 101 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/barrier.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void rdtsc_barrier(void)
|
|
{
|
|
asm volatile ("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 3*32+17)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" "mfence" "\n" "664""1" ":\n\t" ".popsection" : : : "memory");
|
|
asm volatile ("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 3*32+18)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" "lfence" "\n" "664""1" ":\n\t" ".popsection" : : : "memory");
|
|
}
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h" 2
|
|
# 71 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void
|
|
set_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
if ((__builtin_constant_p(nr))) {
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "orb %1,%0"
|
|
: "+m" (*(volatile long *) ((void *)(addr) + ((nr)>>3)))
|
|
: "iq" ((u8)(1 << ((nr) & 7)))
|
|
: "memory");
|
|
} else {
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "bts %1,%0"
|
|
: "+m" (*(volatile long *) (addr)) : "Ir" (nr) : "memory");
|
|
}
|
|
}
|
|
# 94 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) void __set_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
asm volatile("bts %1,%0" : "+m" (*(volatile long *) (addr)) : "Ir" (nr) : "memory");
|
|
}
|
|
# 109 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void
|
|
clear_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
if ((__builtin_constant_p(nr))) {
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "andb %1,%0"
|
|
: "+m" (*(volatile long *) ((void *)(addr) + ((nr)>>3)))
|
|
: "iq" ((u8)~(1 << ((nr) & 7))));
|
|
} else {
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "btr %1,%0"
|
|
: "+m" (*(volatile long *) (addr))
|
|
: "Ir" (nr));
|
|
}
|
|
}
|
|
# 131 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) void clear_bit_unlock(long nr, volatile unsigned long *addr)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
clear_bit(nr, addr);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __clear_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
asm volatile("btr %1,%0" : "+m" (*(volatile long *) (addr)) : "Ir" (nr));
|
|
}
|
|
# 154 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) void __clear_bit_unlock(long nr, volatile unsigned long *addr)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
__clear_bit(nr, addr);
|
|
}
|
|
# 169 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) void __change_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
asm volatile("btc %1,%0" : "+m" (*(volatile long *) (addr)) : "Ir" (nr));
|
|
}
|
|
# 183 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) void change_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
if ((__builtin_constant_p(nr))) {
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xorb %1,%0"
|
|
: "+m" (*(volatile long *) ((void *)(addr) + ((nr)>>3)))
|
|
: "iq" ((u8)(1 << ((nr) & 7))));
|
|
} else {
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "btc %1,%0"
|
|
: "+m" (*(volatile long *) (addr))
|
|
: "Ir" (nr));
|
|
}
|
|
}
|
|
# 204 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) int test_and_set_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "bts" " %2, " "%0" "; set" "c" " %1" : "+m" (*addr), "=qm" (c) : "Ir" (nr) : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 216 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) int
|
|
test_and_set_bit_lock(long nr, volatile unsigned long *addr)
|
|
{
|
|
return test_and_set_bit(nr, addr);
|
|
}
|
|
# 231 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) int __test_and_set_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
int oldbit;
|
|
|
|
asm("bts %2,%1\n\t"
|
|
"sbb %0,%0"
|
|
: "=r" (oldbit), "+m" (*(volatile long *) (addr))
|
|
: "Ir" (nr));
|
|
return oldbit;
|
|
}
|
|
# 250 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) int test_and_clear_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "btr" " %2, " "%0" "; set" "c" " %1" : "+m" (*addr), "=qm" (c) : "Ir" (nr) : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 271 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) int __test_and_clear_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
int oldbit;
|
|
|
|
asm volatile("btr %2,%1\n\t"
|
|
"sbb %0,%0"
|
|
: "=r" (oldbit), "+m" (*(volatile long *) (addr))
|
|
: "Ir" (nr));
|
|
return oldbit;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int __test_and_change_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
int oldbit;
|
|
|
|
asm volatile("btc %2,%1\n\t"
|
|
"sbb %0,%0"
|
|
: "=r" (oldbit), "+m" (*(volatile long *) (addr))
|
|
: "Ir" (nr) : "memory");
|
|
|
|
return oldbit;
|
|
}
|
|
# 303 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) int test_and_change_bit(long nr, volatile unsigned long *addr)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "btc" " %2, " "%0" "; set" "c" " %1" : "+m" (*addr), "=qm" (c) : "Ir" (nr) : "memory"); return c != 0; } while (0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) int constant_test_bit(long nr, const volatile unsigned long *addr)
|
|
{
|
|
return ((1UL << (nr & (64 -1))) &
|
|
(addr[nr >> 6])) != 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int variable_test_bit(long nr, volatile const unsigned long *addr)
|
|
{
|
|
int oldbit;
|
|
|
|
asm volatile("bt %2,%1\n\t"
|
|
"sbb %0,%0"
|
|
: "=r" (oldbit)
|
|
: "m" (*(unsigned long *)addr), "Ir" (nr));
|
|
|
|
return oldbit;
|
|
}
|
|
# 346 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long __ffs(unsigned long word)
|
|
{
|
|
asm("rep; bsf %1,%0"
|
|
: "=r" (word)
|
|
: "rm" (word));
|
|
return word;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long ffz(unsigned long word)
|
|
{
|
|
asm("rep; bsf %1,%0"
|
|
: "=r" (word)
|
|
: "r" (~word));
|
|
return word;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long __fls(unsigned long word)
|
|
{
|
|
asm("bsr %1,%0"
|
|
: "=r" (word)
|
|
: "rm" (word));
|
|
return word;
|
|
}
|
|
# 396 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) int ffs(int x)
|
|
{
|
|
int r;
|
|
# 410 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
asm("bsfl %1,%0"
|
|
: "=r" (r)
|
|
: "rm" (x), "0" (-1));
|
|
# 423 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
return r + 1;
|
|
}
|
|
# 437 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) int fls(int x)
|
|
{
|
|
int r;
|
|
# 451 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
asm("bsrl %1,%0"
|
|
: "=r" (r)
|
|
: "rm" (x), "0" (-1));
|
|
# 464 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
return r + 1;
|
|
}
|
|
# 479 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) int fls64(__u64 x)
|
|
{
|
|
int bitpos = -1;
|
|
|
|
|
|
|
|
|
|
|
|
asm("bsrq %1,%q0"
|
|
: "+r" (bitpos)
|
|
: "rm" (x));
|
|
return bitpos + 1;
|
|
}
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/find.h" 1
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/find.h"
|
|
extern unsigned long find_next_bit(const unsigned long *addr, unsigned long
|
|
size, unsigned long offset);
|
|
# 28 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/find.h"
|
|
extern unsigned long find_next_zero_bit(const unsigned long *addr, unsigned
|
|
long size, unsigned long offset);
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/find.h"
|
|
extern unsigned long find_first_bit(const unsigned long *addr,
|
|
unsigned long size);
|
|
# 53 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/find.h"
|
|
extern unsigned long find_first_zero_bit(const unsigned long *addr,
|
|
unsigned long size);
|
|
# 497 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/sched.h" 1
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/sched.h"
|
|
static inline __attribute__((no_instrument_function)) int sched_find_first_bit(const unsigned long *b)
|
|
{
|
|
|
|
if (b[0])
|
|
return __ffs(b[0]);
|
|
return __ffs(b[1]) + 64;
|
|
# 29 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/sched.h"
|
|
}
|
|
# 499 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/arch_hweight.h" 1
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/arch_hweight.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned int __arch_hweight32(unsigned int w)
|
|
{
|
|
unsigned int res = 0;
|
|
|
|
asm ("661:\n\t" "call __sw_hweight32" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 4*32+23)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0xf3,0x40,0x0f,0xb8,0xc7" "\n" "664""1" ":\n\t" ".popsection"
|
|
: "=""a" (res)
|
|
: "D" (w));
|
|
|
|
return res;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int __arch_hweight16(unsigned int w)
|
|
{
|
|
return __arch_hweight32(w & 0xffff);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int __arch_hweight8(unsigned int w)
|
|
{
|
|
return __arch_hweight32(w & 0xff);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long __arch_hweight64(__u64 w)
|
|
{
|
|
unsigned long res = 0;
|
|
|
|
|
|
|
|
|
|
|
|
asm ("661:\n\t" "call __sw_hweight64" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 4*32+23)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0xf3,0x48,0x0f,0xb8,0xc7" "\n" "664""1" ":\n\t" ".popsection"
|
|
: "=""a" (res)
|
|
: "D" (w));
|
|
|
|
|
|
return res;
|
|
}
|
|
# 501 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/const_hweight.h" 1
|
|
# 503 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/le.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/le.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long find_next_zero_bit_le(const void *addr,
|
|
unsigned long size, unsigned long offset)
|
|
{
|
|
return find_next_zero_bit(addr, size, offset);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long find_next_bit_le(const void *addr,
|
|
unsigned long size, unsigned long offset)
|
|
{
|
|
return find_next_bit(addr, size, offset);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long find_first_zero_bit_le(const void *addr,
|
|
unsigned long size)
|
|
{
|
|
return find_first_zero_bit(addr, size);
|
|
}
|
|
# 52 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/le.h"
|
|
static inline __attribute__((no_instrument_function)) int test_bit_le(int nr, const void *addr)
|
|
{
|
|
return (__builtin_constant_p((nr ^ 0)) ? constant_test_bit((nr ^ 0), (addr)) : variable_test_bit((nr ^ 0), (addr)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_bit_le(int nr, void *addr)
|
|
{
|
|
set_bit(nr ^ 0, addr);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void clear_bit_le(int nr, void *addr)
|
|
{
|
|
clear_bit(nr ^ 0, addr);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __set_bit_le(int nr, void *addr)
|
|
{
|
|
__set_bit(nr ^ 0, addr);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __clear_bit_le(int nr, void *addr)
|
|
{
|
|
__clear_bit(nr ^ 0, addr);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int test_and_set_bit_le(int nr, void *addr)
|
|
{
|
|
return test_and_set_bit(nr ^ 0, addr);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int test_and_clear_bit_le(int nr, void *addr)
|
|
{
|
|
return test_and_clear_bit(nr ^ 0, addr);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int __test_and_set_bit_le(int nr, void *addr)
|
|
{
|
|
return __test_and_set_bit(nr ^ 0, addr);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int __test_and_clear_bit_le(int nr, void *addr)
|
|
{
|
|
return __test_and_clear_bit(nr ^ 0, addr);
|
|
}
|
|
# 505 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bitops/ext2-atomic-setbit.h" 1
|
|
# 507 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bitops.h" 2
|
|
# 37 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bitops.h" 2
|
|
# 60 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bitops.h"
|
|
static __inline__ __attribute__((no_instrument_function)) int get_bitmask_order(unsigned int count)
|
|
{
|
|
int order;
|
|
|
|
order = fls(count);
|
|
return order;
|
|
}
|
|
|
|
static __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__((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__((no_instrument_function)) __u64 rol64(__u64 word, unsigned int shift)
|
|
{
|
|
return (word << shift) | (word >> (64 - shift));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __u64 ror64(__u64 word, unsigned int shift)
|
|
{
|
|
return (word >> shift) | (word << (64 - shift));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __u32 rol32(__u32 word, unsigned int shift)
|
|
{
|
|
return (word << shift) | (word >> (32 - shift));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __u32 ror32(__u32 word, unsigned int shift)
|
|
{
|
|
return (word >> shift) | (word << (32 - shift));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __u16 rol16(__u16 word, unsigned int shift)
|
|
{
|
|
return (word << shift) | (word >> (16 - shift));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __u16 ror16(__u16 word, unsigned int shift)
|
|
{
|
|
return (word >> shift) | (word << (16 - shift));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __u8 rol8(__u8 word, unsigned int shift)
|
|
{
|
|
return (word << shift) | (word >> (8 - shift));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __u8 ror8(__u8 word, unsigned int shift)
|
|
{
|
|
return (word >> shift) | (word << (8 - shift));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __s32 sign_extend32(__u32 value, int index)
|
|
{
|
|
__u8 shift = 31 - index;
|
|
return (__s32)(value << shift) >> shift;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned fls_long(unsigned long l)
|
|
{
|
|
if (sizeof(l) == 4)
|
|
return fls(l);
|
|
return fls64(l);
|
|
}
|
|
# 189 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bitops.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long __ffs64(u64 word)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return __ffs((unsigned long)word);
|
|
}
|
|
# 225 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bitops.h"
|
|
extern unsigned long find_last_bit(const unsigned long *addr,
|
|
unsigned long size);
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/log2.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/log2.h"
|
|
extern __attribute__((const, noreturn))
|
|
int ____ilog2_NaN(void);
|
|
# 31 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/log2.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((const))
|
|
int __ilog2_u32(u32 n)
|
|
{
|
|
return fls(n) - 1;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((const))
|
|
int __ilog2_u64(u64 n)
|
|
{
|
|
return fls64(n) - 1;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) __attribute__((const))
|
|
unsigned long __roundup_pow_of_two(unsigned long n)
|
|
{
|
|
return 1UL << fls_long(n - 1);
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((const))
|
|
unsigned long __rounddown_pow_of_two(unsigned long n)
|
|
{
|
|
return 1UL << (fls_long(n) - 1);
|
|
}
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/typecheck.h" 1
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/printk.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/init.h" 1
|
|
# 135 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
# 243 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/init.h"
|
|
struct obs_kernel_param {
|
|
const char *str;
|
|
int (*setup_func)(char *);
|
|
int early;
|
|
};
|
|
# 272 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/init.h"
|
|
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) parse_early_param(void);
|
|
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) parse_early_options(char *cmdline);
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/printk.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kern_levels.h" 1
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/printk.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cache.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/kernel.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/kernel.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cache.h" 2
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/printk.h" 2
|
|
|
|
extern const char linux_banner[];
|
|
extern const char linux_proc_banner[];
|
|
|
|
static 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__((no_instrument_function)) const char *printk_skip_level(const char *buffer)
|
|
{
|
|
if (printk_get_level(buffer))
|
|
return buffer + 2;
|
|
|
|
return buffer;
|
|
}
|
|
# 44 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/printk.h"
|
|
extern int console_printk[];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void console_silent(void)
|
|
{
|
|
(console_printk[0]) = 0;
|
|
}
|
|
|
|
static 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;
|
|
};
|
|
# 109 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/printk.h"
|
|
static 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, ...);
|
|
|
|
|
|
|
|
|
|
|
|
typedef int(*printk_func_t)(const char *fmt, va_list args);
|
|
|
|
|
|
__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);
|
|
|
|
char *log_buf_addr_get(void);
|
|
u32 log_buf_len_get(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);
|
|
# 231 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/printk.h"
|
|
extern void dump_stack(void) __attribute__((__cold__));
|
|
# 270 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/printk.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dynamic_debug.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dynamic_debug.h"
|
|
struct _ddebug {
|
|
|
|
|
|
|
|
|
|
const char *modname;
|
|
const char *function;
|
|
const char *filename;
|
|
const char *format;
|
|
unsigned int lineno:18;
|
|
# 35 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
|
|
extern int ddebug_remove_module(const char *mod_name);
|
|
extern __attribute__((format(printf, 2, 3)))
|
|
void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...);
|
|
|
|
extern int ddebug_dyndbg_module_param_cb(char *param, char *val,
|
|
const char *modname);
|
|
|
|
struct device;
|
|
|
|
extern __attribute__((format(printf, 3, 4)))
|
|
void __dynamic_dev_dbg(struct _ddebug *descriptor, const struct device *dev,
|
|
const char *fmt, ...);
|
|
|
|
struct net_device;
|
|
|
|
extern __attribute__((format(printf, 3, 4)))
|
|
void __dynamic_netdev_dbg(struct _ddebug *descriptor,
|
|
const struct net_device *dev,
|
|
const char *fmt, ...);
|
|
# 271 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/printk.h" 2
|
|
# 413 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h" 2
|
|
# 165 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h"
|
|
struct completion;
|
|
struct pt_regs;
|
|
struct user;
|
|
|
|
|
|
extern int _cond_resched(void);
|
|
# 193 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h"
|
|
static inline __attribute__((no_instrument_function)) void ___might_sleep(const char *file, int line,
|
|
int preempt_offset) { }
|
|
static inline __attribute__((no_instrument_function)) void __might_sleep(const char *file, int line,
|
|
int preempt_offset) { }
|
|
# 240 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h"
|
|
static inline __attribute__((no_instrument_function)) u32 reciprocal_scale(u32 val, u32 ep_ro)
|
|
{
|
|
return (u32)(((u64) val * ep_ro) >> 32);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static 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 _kstrtoul(const char *s, unsigned int base, unsigned long *res);
|
|
int _kstrtol(const char *s, unsigned int base, long *res);
|
|
|
|
int kstrtoull(const char *s, unsigned int base, unsigned long long *res);
|
|
int kstrtoll(const char *s, unsigned int base, long long *res);
|
|
# 289 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h"
|
|
static inline __attribute__((no_instrument_function)) int 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);
|
|
}
|
|
# 318 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h"
|
|
static inline __attribute__((no_instrument_function)) int 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 kstrtouint(const char *s, unsigned int base, unsigned int *res);
|
|
int kstrtoint(const char *s, unsigned int base, int *res);
|
|
|
|
static inline __attribute__((no_instrument_function)) int kstrtou64(const char *s, unsigned int base, u64 *res)
|
|
{
|
|
return kstrtoull(s, base, res);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int kstrtos64(const char *s, unsigned int base, s64 *res)
|
|
{
|
|
return kstrtoll(s, base, res);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int kstrtou32(const char *s, unsigned int base, u32 *res)
|
|
{
|
|
return kstrtouint(s, base, res);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int kstrtos32(const char *s, unsigned int base, s32 *res)
|
|
{
|
|
return kstrtoint(s, base, res);
|
|
}
|
|
|
|
int kstrtou16(const char *s, unsigned int base, u16 *res);
|
|
int kstrtos16(const char *s, unsigned int base, s16 *res);
|
|
int kstrtou8(const char *s, unsigned int base, u8 *res);
|
|
int kstrtos8(const char *s, unsigned int base, s8 *res);
|
|
|
|
int kstrtoull_from_user(const char *s, size_t count, unsigned int base, unsigned long long *res);
|
|
int kstrtoll_from_user(const char *s, size_t count, unsigned int base, long long *res);
|
|
int kstrtoul_from_user(const char *s, size_t count, unsigned int base, unsigned long *res);
|
|
int kstrtol_from_user(const char *s, size_t count, unsigned int base, long *res);
|
|
int kstrtouint_from_user(const char *s, size_t count, unsigned int base, unsigned int *res);
|
|
int kstrtoint_from_user(const char *s, size_t count, unsigned int base, int *res);
|
|
int kstrtou16_from_user(const char *s, size_t count, unsigned int base, u16 *res);
|
|
int kstrtos16_from_user(const char *s, size_t count, unsigned int base, s16 *res);
|
|
int kstrtou8_from_user(const char *s, size_t count, unsigned int base, u8 *res);
|
|
int kstrtos8_from_user(const char *s, size_t count, unsigned int base, s8 *res);
|
|
|
|
static inline __attribute__((no_instrument_function)) int 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__((no_instrument_function)) int 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__((no_instrument_function)) int 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__((no_instrument_function)) int 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);
|
|
|
|
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 panic_on_warn;
|
|
extern int sysctl_panic_on_stackoverflow;
|
|
|
|
|
|
|
|
|
|
static 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;
|
|
# 487 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h"
|
|
extern const char hex_asc[];
|
|
|
|
|
|
|
|
static 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__((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 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);
|
|
# 536 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h"
|
|
void tracing_off_permanent(void);
|
|
|
|
|
|
|
|
|
|
enum ftrace_dump_mode {
|
|
DUMP_NONE,
|
|
DUMP_ALL,
|
|
DUMP_ORIG,
|
|
};
|
|
|
|
|
|
void tracing_on(void);
|
|
void tracing_off(void);
|
|
int tracing_is_on(void);
|
|
void tracing_snapshot(void);
|
|
void tracing_snapshot_alloc(void);
|
|
|
|
extern void tracing_start(void);
|
|
extern void tracing_stop(void);
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((format(printf, 1, 2)))
|
|
void ____trace_printk_check_format(const char *fmt, ...)
|
|
{
|
|
}
|
|
# 620 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h"
|
|
extern __attribute__((format(printf, 2, 3)))
|
|
int __trace_bprintk(unsigned long ip, const char *fmt, ...);
|
|
|
|
extern __attribute__((format(printf, 2, 3)))
|
|
int __trace_printk(unsigned long ip, const char *fmt, ...);
|
|
# 661 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h"
|
|
extern int __trace_bputs(unsigned long ip, const char *str);
|
|
extern int __trace_puts(unsigned long ip, const char *str, int size);
|
|
|
|
extern void trace_dump_stack(int skip);
|
|
# 683 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernel.h"
|
|
extern int
|
|
__ftrace_vbprintk(unsigned long ip, const char *fmt, va_list ap);
|
|
|
|
extern int
|
|
__ftrace_vprintk(unsigned long ip, const char *fmt, va_list ap);
|
|
|
|
extern void ftrace_dump(enum ftrace_dump_mode oops_dump_mode);
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h" 2
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static inline __attribute__((no_instrument_function)) void INIT_LIST_HEAD(struct list_head *list)
|
|
{
|
|
list->next = list;
|
|
list->prev = list;
|
|
}
|
|
# 38 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static inline __attribute__((no_instrument_function)) void list_add(struct list_head *new, struct list_head *head)
|
|
{
|
|
__list_add(new, head, head->next);
|
|
}
|
|
# 75 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static inline __attribute__((no_instrument_function)) void list_add_tail(struct list_head *new, struct list_head *head)
|
|
{
|
|
__list_add(new, head->prev, head);
|
|
}
|
|
# 87 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static inline __attribute__((no_instrument_function)) void __list_del(struct list_head * prev, struct list_head * next)
|
|
{
|
|
next->prev = prev;
|
|
prev->next = next;
|
|
}
|
|
# 100 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static inline __attribute__((no_instrument_function)) void __list_del_entry(struct list_head *entry)
|
|
{
|
|
__list_del(entry->prev, entry->next);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void list_del(struct list_head *entry)
|
|
{
|
|
__list_del(entry->prev, entry->next);
|
|
entry->next = ((void *) 0x00100100 + (0xdead000000000000UL));
|
|
entry->prev = ((void *) 0x00200200 + (0xdead000000000000UL));
|
|
}
|
|
# 123 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static 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__((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__((no_instrument_function)) void list_del_init(struct list_head *entry)
|
|
{
|
|
__list_del_entry(entry);
|
|
INIT_LIST_HEAD(entry);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((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__((no_instrument_function)) int list_is_last(const struct list_head *list,
|
|
const struct list_head *head)
|
|
{
|
|
return list->next == head;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int list_empty(const struct list_head *head)
|
|
{
|
|
return head->next == head;
|
|
}
|
|
# 205 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static 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__((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__((no_instrument_function)) int list_is_singular(const struct list_head *head)
|
|
{
|
|
return !list_empty(head) && (head->next == head->prev);
|
|
}
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static 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__((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__((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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list.h"
|
|
static inline __attribute__((no_instrument_function)) void INIT_HLIST_NODE(struct hlist_node *h)
|
|
{
|
|
h->next = ((void *)0);
|
|
h->pprev = ((void *)0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int hlist_unhashed(const struct hlist_node *h)
|
|
{
|
|
return !h->pprev;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int hlist_empty(const struct hlist_head *h)
|
|
{
|
|
return !h->first;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void hlist_del(struct hlist_node *n)
|
|
{
|
|
__hlist_del(n);
|
|
n->next = ((void *) 0x00100100 + (0xdead000000000000UL));
|
|
n->pprev = ((void *) 0x00200200 + (0xdead000000000000UL));
|
|
}
|
|
|
|
static 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__((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__((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__((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__((no_instrument_function)) void hlist_add_fake(struct hlist_node *n)
|
|
{
|
|
n->pprev = &n->next;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static 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);
|
|
}
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/signal.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bug.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bug.h" 1
|
|
# 35 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bug.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bug.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/bug.h"
|
|
struct bug_entry {
|
|
|
|
|
|
|
|
signed int bug_addr_disp;
|
|
|
|
|
|
|
|
|
|
|
|
signed int file_disp;
|
|
|
|
unsigned short line;
|
|
|
|
unsigned short flags;
|
|
};
|
|
# 65 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/bug.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
# 91 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bug.h"
|
|
static inline __attribute__((no_instrument_function)) int is_warning_bug(const struct bug_entry *bug)
|
|
{
|
|
return bug->flags & (1 << 0);
|
|
}
|
|
|
|
const struct bug_entry *find_bug(unsigned long bugaddr);
|
|
|
|
enum bug_trap_type report_bug(unsigned long bug_addr, struct pt_regs *regs);
|
|
|
|
|
|
int is_valid_bugaddr(unsigned long addr);
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/signal.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/signal.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/signal.h" 1
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/signal.h"
|
|
typedef unsigned long old_sigset_t;
|
|
|
|
typedef struct {
|
|
unsigned long sig[(64 / 64)];
|
|
} sigset_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/signal.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/time.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h" 1
|
|
# 35 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h" 1
|
|
# 50 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/preempt.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/preempt.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/preempt.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/percpu.h" 1
|
|
# 87 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/percpu.h"
|
|
extern void __bad_percpu_size(void);
|
|
# 520 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/percpu.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) int x86_this_cpu_constant_test_bit(unsigned int nr,
|
|
const unsigned long *addr)
|
|
{
|
|
unsigned long *a = (unsigned long *)addr + nr / 64;
|
|
|
|
|
|
return ((1UL << (nr % 64)) & ({ typeof(*a) pfo_ret__; switch (sizeof(*a)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (*a)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (*a)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (*a)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (*a)); break; default: __bad_percpu_size(); } pfo_ret__; })) != 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int x86_this_cpu_variable_test_bit(int nr,
|
|
const unsigned long *addr)
|
|
{
|
|
int oldbit;
|
|
|
|
asm volatile("bt ""%%""gs"":" "%" "2"",%1\n\t"
|
|
"sbb %0,%0"
|
|
: "=r" (oldbit)
|
|
: "m" (*(unsigned long *)addr), "Ir" (nr));
|
|
|
|
return oldbit;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/percpu.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/threads.h" 1
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/percpu.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu-defs.h" 1
|
|
# 295 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu-defs.h"
|
|
extern void __bad_size_call_parameter(void);
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __this_cpu_preempt_check(const char *op) { }
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/percpu.h" 2
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/percpu.h"
|
|
extern unsigned long __per_cpu_offset[256];
|
|
# 47 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/percpu.h"
|
|
extern void setup_per_cpu_areas(void);
|
|
# 552 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/percpu.h" 2
|
|
|
|
|
|
extern __attribute__((section(".data..percpu" "..read_mostly"))) __typeof__(unsigned long) this_cpu_off;
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/preempt.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/thread_info.h" 1
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/thread_info.h"
|
|
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;
|
|
|
|
struct compat_timespec *compat_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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/thread_info.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/thread_info.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page_64.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page_64.h"
|
|
extern unsigned long max_pfn;
|
|
extern unsigned long phys_base;
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long __phys_addr_nodebug(unsigned long x)
|
|
{
|
|
unsigned long y = x - (0xffffffff80000000UL);
|
|
|
|
|
|
x = y + ((x > y) ? phys_base : ((0xffffffff80000000UL) - ((unsigned long)(0xffff880000000000UL))));
|
|
|
|
return x;
|
|
}
|
|
# 37 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page_64.h"
|
|
void clear_page(void *page);
|
|
void copy_page(void *to, void *from);
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct page;
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) resource_size_t cap_resource(u64 val)
|
|
{
|
|
if (val > ((resource_size_t)~0))
|
|
return ((resource_size_t)~0);
|
|
|
|
return val;
|
|
}
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page.h" 2
|
|
extern struct range pfn_mapped[];
|
|
extern int nr_pfn_mapped;
|
|
|
|
static inline __attribute__((no_instrument_function)) void clear_user_page(void *page, unsigned long vaddr,
|
|
struct page *pg)
|
|
{
|
|
clear_page(page);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void copy_user_page(void *to, void *from, unsigned long vaddr,
|
|
struct page *topage)
|
|
{
|
|
copy_page(to, from);
|
|
}
|
|
# 65 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page.h"
|
|
extern bool __virt_addr_valid(unsigned long kaddr);
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/memory_model.h" 1
|
|
# 71 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/getorder.h" 1
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/getorder.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((__const__))
|
|
int __get_order(unsigned long size)
|
|
{
|
|
int order;
|
|
|
|
size--;
|
|
size >>= 12;
|
|
|
|
|
|
|
|
order = fls64(size);
|
|
|
|
return order;
|
|
}
|
|
# 72 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/page.h" 2
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/thread_info.h" 2
|
|
# 48 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/thread_info.h"
|
|
struct task_struct;
|
|
struct exec_domain;
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct task_struct;
|
|
struct mm_struct;
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/vm86.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/vm86.h" 1
|
|
# 62 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/vm86.h"
|
|
struct vm86_regs {
|
|
|
|
|
|
|
|
long ebx;
|
|
long ecx;
|
|
long edx;
|
|
long esi;
|
|
long edi;
|
|
long ebp;
|
|
long eax;
|
|
long __null_ds;
|
|
long __null_es;
|
|
long __null_fs;
|
|
long __null_gs;
|
|
long orig_eax;
|
|
long eip;
|
|
unsigned short cs, __csh;
|
|
long eflags;
|
|
long esp;
|
|
unsigned short ss, __ssh;
|
|
|
|
|
|
|
|
unsigned short es, __esh;
|
|
unsigned short ds, __dsh;
|
|
unsigned short fs, __fsh;
|
|
unsigned short gs, __gsh;
|
|
};
|
|
|
|
struct revectored_struct {
|
|
unsigned long __map[8];
|
|
};
|
|
|
|
struct vm86_struct {
|
|
struct vm86_regs regs;
|
|
unsigned long flags;
|
|
unsigned long screen_bitmap;
|
|
unsigned long cpu_type;
|
|
struct revectored_struct int_revectored;
|
|
struct revectored_struct int21_revectored;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct vm86plus_info_struct {
|
|
unsigned long force_return_for_pic:1;
|
|
unsigned long vm86dbg_active:1;
|
|
unsigned long vm86dbg_TFpendig:1;
|
|
unsigned long unused:28;
|
|
unsigned long is_vm86pus:1;
|
|
unsigned char vm86dbg_intxxtab[32];
|
|
};
|
|
struct vm86plus_struct {
|
|
struct vm86_regs regs;
|
|
unsigned long flags;
|
|
unsigned long screen_bitmap;
|
|
unsigned long cpu_type;
|
|
struct revectored_struct int_revectored;
|
|
struct revectored_struct int21_revectored;
|
|
struct vm86plus_info_struct vm86plus;
|
|
};
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/vm86.h" 2
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/vm86.h"
|
|
struct kernel_vm86_regs {
|
|
|
|
|
|
|
|
struct pt_regs pt;
|
|
|
|
|
|
|
|
unsigned short es, __esh;
|
|
unsigned short ds, __dsh;
|
|
unsigned short fs, __fsh;
|
|
unsigned short gs, __gsh;
|
|
};
|
|
|
|
struct kernel_vm86_struct {
|
|
struct kernel_vm86_regs regs;
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/vm86.h"
|
|
unsigned long flags;
|
|
unsigned long screen_bitmap;
|
|
unsigned long cpu_type;
|
|
struct revectored_struct int_revectored;
|
|
struct revectored_struct int21_revectored;
|
|
struct vm86plus_info_struct vm86plus;
|
|
struct pt_regs *regs32;
|
|
# 59 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/vm86.h"
|
|
};
|
|
# 75 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/vm86.h"
|
|
static inline __attribute__((no_instrument_function)) int handle_vm86_trap(struct kernel_vm86_regs *a, long b, int c)
|
|
{
|
|
return 0;
|
|
}
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/math_emu.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/math_emu.h"
|
|
struct math_emu_info {
|
|
long ___orig_eip;
|
|
union {
|
|
struct pt_regs *regs;
|
|
struct kernel_vm86_regs *vm86;
|
|
};
|
|
};
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/sigcontext.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/sigcontext.h" 1
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/sigcontext.h"
|
|
struct _fpx_sw_bytes {
|
|
__u32 magic1;
|
|
__u32 extended_size;
|
|
|
|
|
|
__u64 xstate_bv;
|
|
|
|
|
|
|
|
|
|
__u32 xstate_size;
|
|
|
|
|
|
|
|
|
|
__u32 padding[7];
|
|
};
|
|
# 136 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/sigcontext.h"
|
|
struct _fpstate {
|
|
__u16 cwd;
|
|
__u16 swd;
|
|
__u16 twd;
|
|
|
|
__u16 fop;
|
|
__u64 rip;
|
|
__u64 rdp;
|
|
__u32 mxcsr;
|
|
__u32 mxcsr_mask;
|
|
__u32 st_space[32];
|
|
__u32 xmm_space[64];
|
|
__u32 reserved2[12];
|
|
union {
|
|
__u32 reserved3[12];
|
|
struct _fpx_sw_bytes sw_reserved;
|
|
|
|
};
|
|
};
|
|
# 197 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/sigcontext.h"
|
|
struct _xsave_hdr {
|
|
__u64 xstate_bv;
|
|
__u64 reserved1[2];
|
|
__u64 reserved2[5];
|
|
};
|
|
|
|
struct _ymmh_state {
|
|
|
|
__u32 ymmh_space[64];
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct _xstate {
|
|
struct _fpstate fpstate;
|
|
struct _xsave_hdr xstate_hdr;
|
|
struct _ymmh_state ymmh;
|
|
|
|
};
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/sigcontext.h" 2
|
|
# 40 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/sigcontext.h"
|
|
struct sigcontext {
|
|
unsigned long r8;
|
|
unsigned long r9;
|
|
unsigned long r10;
|
|
unsigned long r11;
|
|
unsigned long r12;
|
|
unsigned long r13;
|
|
unsigned long r14;
|
|
unsigned long r15;
|
|
unsigned long di;
|
|
unsigned long si;
|
|
unsigned long bp;
|
|
unsigned long bx;
|
|
unsigned long dx;
|
|
unsigned long ax;
|
|
unsigned long cx;
|
|
unsigned long sp;
|
|
unsigned long ip;
|
|
unsigned long flags;
|
|
unsigned short cs;
|
|
unsigned short gs;
|
|
unsigned short fs;
|
|
unsigned short __pad0;
|
|
unsigned long err;
|
|
unsigned long trapno;
|
|
unsigned long oldmask;
|
|
unsigned long cr2;
|
|
# 75 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/sigcontext.h"
|
|
void *fpstate;
|
|
unsigned long reserved1[8];
|
|
};
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/current.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct task_struct;
|
|
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(struct task_struct *) current_task;
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) struct task_struct *get_current(void)
|
|
{
|
|
return ({ typeof(current_task) pfo_ret__; switch (sizeof(current_task)) { case 1: asm("mov" "b ""%%""gs"":" "%" "P1"",%0" : "=q" (pfo_ret__) : "p" (&(current_task))); break; case 2: asm("mov" "w ""%%""gs"":" "%" "P1"",%0" : "=r" (pfo_ret__) : "p" (&(current_task))); break; case 4: asm("mov" "l ""%%""gs"":" "%" "P1"",%0" : "=r" (pfo_ret__) : "p" (&(current_task))); break; case 8: asm("mov" "q ""%%""gs"":" "%" "P1"",%0" : "=r" (pfo_ret__) : "p" (&(current_task))); break; default: __bad_percpu_size(); } pfo_ret__; });
|
|
}
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/msr.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/msr.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/msr-index.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/msr.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/ioctl.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/ioctl.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/ioctl.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/ioctl.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/ioctl.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
extern unsigned int __invalid_size_argument_for_IOC;
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/ioctl.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/ioctl.h" 2
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/msr.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/msr.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/errno.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/errno.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/errno-base.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/errno.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/errno.h" 2
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/msr.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpumask.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bitmap.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/string.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/string.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/string.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/string.h" 2
|
|
|
|
extern char *strndup_user(const char *, long);
|
|
extern void *memdup_user(const void *, size_t);
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/string.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/string_64.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/string_64.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void *__inline_memcpy(void *to, const void *from, size_t n)
|
|
{
|
|
unsigned long d0, d1, d2;
|
|
asm volatile("rep ; movsl\n\t"
|
|
"testb $2,%b4\n\t"
|
|
"je 1f\n\t"
|
|
"movsw\n"
|
|
"1:\ttestb $1,%b4\n\t"
|
|
"je 2f\n\t"
|
|
"movsb\n"
|
|
"2:"
|
|
: "=&c" (d0), "=&D" (d1), "=&S" (d2)
|
|
: "0" (n / 4), "q" (n), "1" ((long)to), "2" ((long)from)
|
|
: "memory");
|
|
return to;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern void *memcpy(void *to, const void *from, size_t len);
|
|
# 55 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/string_64.h"
|
|
void *memset(void *s, int c, size_t n);
|
|
|
|
|
|
void *memmove(void *dest, const void *src, size_t count);
|
|
|
|
int memcmp(const void *cs, const void *ct, size_t count);
|
|
size_t strlen(const char *s);
|
|
char *strcpy(char *dest, const char *src);
|
|
char *strcat(char *dest, const char *src);
|
|
int strcmp(const char *cs, const char *ct);
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/string.h" 2
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/string.h" 2
|
|
|
|
|
|
extern char * strcpy(char *,const char *);
|
|
|
|
|
|
extern char * strncpy(char *,const char *, __kernel_size_t);
|
|
|
|
|
|
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);
|
|
|
|
|
|
extern int strcmp(const char *,const char *);
|
|
|
|
|
|
extern int strncmp(const char *,const char *,__kernel_size_t);
|
|
|
|
|
|
|
|
|
|
|
|
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 * skip_spaces(const char *);
|
|
|
|
extern char *strim(char *);
|
|
|
|
static inline __attribute__((no_instrument_function)) 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
|
|
int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args);
|
|
int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf);
|
|
int bprintf(u32 *bin_buf, size_t size, const char *fmt, ...) __attribute__((format(printf, 3, 4)));
|
|
|
|
|
|
extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
|
|
const void *from, size_t available);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) const char *kbasename(const char *path)
|
|
{
|
|
const char *tail = strrchr(path, '/');
|
|
return tail ? tail + 1 : path;
|
|
}
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bitmap.h" 2
|
|
# 93 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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_off(unsigned long *map,
|
|
unsigned long size,
|
|
unsigned long start,
|
|
unsigned int nr,
|
|
unsigned long align_mask,
|
|
unsigned long align_offset);
|
|
# 139 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bitmap.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long
|
|
bitmap_find_next_zero_area(unsigned long *map,
|
|
unsigned long size,
|
|
unsigned long start,
|
|
unsigned int nr,
|
|
unsigned long align_mask)
|
|
{
|
|
return bitmap_find_next_zero_area_off(map, size, start, nr,
|
|
align_mask, 0);
|
|
}
|
|
|
|
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);
|
|
extern int bitmap_print_to_pagebuf(bool list, char *buf,
|
|
const unsigned long *maskp, int nmaskbits);
|
|
# 188 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bitmap.h"
|
|
static inline __attribute__((no_instrument_function)) void bitmap_zero(unsigned long *dst, int nbits)
|
|
{
|
|
if ((__builtin_constant_p(nbits) && (nbits) <= 64))
|
|
*dst = 0UL;
|
|
else {
|
|
int len = (((nbits) + (8 * sizeof(long)) - 1) / (8 * sizeof(long))) * sizeof(unsigned long);
|
|
memset(dst, 0, len);
|
|
}
|
|
}
|
|
|
|
static 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) <= 64)) {
|
|
int len = (nlongs - 1) * sizeof(unsigned long);
|
|
memset(dst, 0xff, len);
|
|
}
|
|
dst[nlongs - 1] = ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL );
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void bitmap_copy(unsigned long *dst, const unsigned long *src,
|
|
int nbits)
|
|
{
|
|
if ((__builtin_constant_p(nbits) && (nbits) <= 64))
|
|
*dst = *src;
|
|
else {
|
|
int len = (((nbits) + (8 * sizeof(long)) - 1) / (8 * sizeof(long))) * sizeof(unsigned long);
|
|
memcpy(dst, src, len);
|
|
}
|
|
}
|
|
|
|
static 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) <= 64))
|
|
return (*dst = *src1 & *src2 & ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL )) != 0;
|
|
return __bitmap_and(dst, src1, src2, nbits);
|
|
}
|
|
|
|
static 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) <= 64))
|
|
*dst = *src1 | *src2;
|
|
else
|
|
__bitmap_or(dst, src1, src2, nbits);
|
|
}
|
|
|
|
static 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) <= 64))
|
|
*dst = *src1 ^ *src2;
|
|
else
|
|
__bitmap_xor(dst, src1, src2, nbits);
|
|
}
|
|
|
|
static 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) <= 64))
|
|
return (*dst = *src1 & ~(*src2) & ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL )) != 0;
|
|
return __bitmap_andnot(dst, src1, src2, nbits);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void bitmap_complement(unsigned long *dst, const unsigned long *src,
|
|
unsigned int nbits)
|
|
{
|
|
if ((__builtin_constant_p(nbits) && (nbits) <= 64))
|
|
*dst = ~(*src);
|
|
else
|
|
__bitmap_complement(dst, src, nbits);
|
|
}
|
|
|
|
static 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) <= 64))
|
|
return ! ((*src1 ^ *src2) & ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL ));
|
|
else
|
|
return __bitmap_equal(src1, src2, nbits);
|
|
}
|
|
|
|
static 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) <= 64))
|
|
return ((*src1 & *src2) & ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL )) != 0;
|
|
else
|
|
return __bitmap_intersects(src1, src2, nbits);
|
|
}
|
|
|
|
static 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) <= 64))
|
|
return ! ((*src1 & ~(*src2)) & ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL ));
|
|
else
|
|
return __bitmap_subset(src1, src2, nbits);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int bitmap_empty(const unsigned long *src, unsigned nbits)
|
|
{
|
|
if ((__builtin_constant_p(nbits) && (nbits) <= 64))
|
|
return ! (*src & ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL ));
|
|
else
|
|
return __bitmap_empty(src, nbits);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int bitmap_full(const unsigned long *src, unsigned int nbits)
|
|
{
|
|
if ((__builtin_constant_p(nbits) && (nbits) <= 64))
|
|
return ! (~(*src) & ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL ));
|
|
else
|
|
return __bitmap_full(src, nbits);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int bitmap_weight(const unsigned long *src, unsigned int nbits)
|
|
{
|
|
if ((__builtin_constant_p(nbits) && (nbits) <= 64))
|
|
return hweight_long(*src & ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL ));
|
|
return __bitmap_weight(src, nbits);
|
|
}
|
|
|
|
static 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) <= 64))
|
|
*dst = (*src & ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL )) >> n;
|
|
else
|
|
__bitmap_shift_right(dst, src, n, nbits);
|
|
}
|
|
|
|
static 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) <= 64))
|
|
*dst = (*src << n) & ( ((nbits) % 64) ? (1UL<<((nbits) % 64))-1 : ~0UL );
|
|
else
|
|
__bitmap_shift_left(dst, src, n, nbits);
|
|
}
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h" 2
|
|
|
|
|
|
typedef struct cpumask { unsigned long bits[(((256) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))]; } cpumask_t;
|
|
# 28 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
extern int nr_cpu_ids;
|
|
# 79 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned int cpumask_check(unsigned int cpu)
|
|
{
|
|
|
|
|
|
|
|
return cpu;
|
|
}
|
|
# 165 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned int cpumask_first(const struct cpumask *srcp)
|
|
{
|
|
return find_first_bit(((srcp)->bits), 256);
|
|
}
|
|
# 177 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static 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), 256, n+1);
|
|
}
|
|
# 192 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static 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), 256, 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static 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__((no_instrument_function)) void cpumask_clear_cpu(int cpu, struct cpumask *dstp)
|
|
{
|
|
clear_bit(cpumask_check(cpu), ((dstp)->bits));
|
|
}
|
|
# 299 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static 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__((no_instrument_function)) void cpumask_setall(struct cpumask *dstp)
|
|
{
|
|
bitmap_fill(((dstp)->bits), 256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void cpumask_clear(struct cpumask *dstp)
|
|
{
|
|
bitmap_zero(((dstp)->bits), 256);
|
|
}
|
|
# 344 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static 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), 256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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), 256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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), 256);
|
|
}
|
|
# 387 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static 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), 256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void cpumask_complement(struct cpumask *dstp,
|
|
const struct cpumask *srcp)
|
|
{
|
|
bitmap_complement(((dstp)->bits), ((srcp)->bits),
|
|
256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool cpumask_equal(const struct cpumask *src1p,
|
|
const struct cpumask *src2p)
|
|
{
|
|
return bitmap_equal(((src1p)->bits), ((src2p)->bits),
|
|
256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool cpumask_intersects(const struct cpumask *src1p,
|
|
const struct cpumask *src2p)
|
|
{
|
|
return bitmap_intersects(((src1p)->bits), ((src2p)->bits),
|
|
256);
|
|
}
|
|
# 438 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static inline __attribute__((no_instrument_function)) int cpumask_subset(const struct cpumask *src1p,
|
|
const struct cpumask *src2p)
|
|
{
|
|
return bitmap_subset(((src1p)->bits), ((src2p)->bits),
|
|
256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool cpumask_empty(const struct cpumask *srcp)
|
|
{
|
|
return bitmap_empty(((srcp)->bits), 256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool cpumask_full(const struct cpumask *srcp)
|
|
{
|
|
return bitmap_full(((srcp)->bits), 256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int cpumask_weight(const struct cpumask *srcp)
|
|
{
|
|
return bitmap_weight(((srcp)->bits), 256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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,
|
|
256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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,
|
|
256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void cpumask_copy(struct cpumask *dstp,
|
|
const struct cpumask *srcp)
|
|
{
|
|
bitmap_copy(((dstp)->bits), ((srcp)->bits), 256);
|
|
}
|
|
# 550 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static inline __attribute__((no_instrument_function)) int cpumask_scnprintf(char *buf, int len,
|
|
const struct cpumask *srcp)
|
|
{
|
|
return bitmap_scnprintf(buf, len, ((srcp)->bits), 256);
|
|
}
|
|
# 564 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static 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), 256);
|
|
}
|
|
# 578 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static 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),
|
|
256);
|
|
}
|
|
# 594 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static inline __attribute__((no_instrument_function)) int cpulist_scnprintf(char *buf, int len,
|
|
const struct cpumask *srcp)
|
|
{
|
|
return bitmap_scnlistprintf(buf, len, ((srcp)->bits),
|
|
256);
|
|
}
|
|
# 608 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static 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), 256);
|
|
}
|
|
# 623 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static inline __attribute__((no_instrument_function)) int cpulist_parse(const char *buf, struct cpumask *dstp)
|
|
{
|
|
return bitmap_parselist(buf, ((dstp)->bits), 256);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) size_t cpumask_size(void)
|
|
{
|
|
|
|
|
|
return (((256) + (8 * sizeof(long)) - 1) / (8 * sizeof(long))) * sizeof(long);
|
|
}
|
|
# 691 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
typedef struct cpumask cpumask_var_t[1];
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags,
|
|
int node)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool zalloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
|
|
{
|
|
cpumask_clear(*mask);
|
|
return true;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void alloc_bootmem_cpumask_var(cpumask_var_t *mask)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void free_cpumask_var(cpumask_var_t mask)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void free_bootmem_cpumask_var(cpumask_var_t mask)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
|
|
extern const unsigned long cpu_all_bits[(((256) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
|
|
# 745 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static inline __attribute__((no_instrument_function)) int __check_is_bitmap(const unsigned long *bitmap)
|
|
{
|
|
return 1;
|
|
}
|
|
# 779 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
extern const unsigned long
|
|
cpu_bit_bitmap[64 +1][(((256) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
|
|
|
|
static inline __attribute__((no_instrument_function)) const struct cpumask *get_cpu_mask(unsigned int cpu)
|
|
{
|
|
const unsigned long *p = cpu_bit_bitmap[1 + cpu % 64];
|
|
p -= cpu / 64;
|
|
return ((struct cpumask *)(1 ? (p) : (void *)sizeof(__check_is_bitmap(p))));
|
|
}
|
|
# 816 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static inline __attribute__((no_instrument_function)) ssize_t
|
|
cpumap_print_to_pagebuf(bool list, char *buf, const struct cpumask *mask)
|
|
{
|
|
return bitmap_print_to_pagebuf(list, buf, ((mask)->bits),
|
|
256);
|
|
}
|
|
# 867 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
int __first_cpu(const cpumask_t *srcp);
|
|
int __next_cpu(int n, const cpumask_t *srcp);
|
|
# 885 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
int __next_cpu_nr(int n, const cpumask_t *srcp);
|
|
# 896 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpumask.h"
|
|
static inline __attribute__((no_instrument_function)) void __cpu_set(int cpu, volatile cpumask_t *dstp)
|
|
{
|
|
set_bit(cpu, dstp->bits);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __cpu_clear(int cpu, volatile cpumask_t *dstp)
|
|
{
|
|
clear_bit(cpu, dstp->bits);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __cpus_setall(cpumask_t *dstp, int nbits)
|
|
{
|
|
bitmap_fill(dstp->bits, nbits);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __cpus_clear(cpumask_t *dstp, int nbits)
|
|
{
|
|
bitmap_zero(dstp->bits, nbits);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((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__((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__((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__((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__((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__((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__((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__((no_instrument_function)) int __cpus_empty(const cpumask_t *srcp, int nbits)
|
|
{
|
|
return bitmap_empty(srcp->bits, nbits);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int __cpus_weight(const cpumask_t *srcp, int nbits)
|
|
{
|
|
return bitmap_weight(srcp->bits, nbits);
|
|
}
|
|
|
|
|
|
|
|
static 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);
|
|
}
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cpumask.h" 2
|
|
|
|
extern cpumask_var_t cpu_callin_mask;
|
|
extern cpumask_var_t cpu_callout_mask;
|
|
extern cpumask_var_t cpu_initialized_mask;
|
|
extern cpumask_var_t cpu_sibling_setup_mask;
|
|
|
|
extern void setup_cpu_local_masks(void);
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/msr.h" 2
|
|
|
|
struct msr {
|
|
union {
|
|
struct {
|
|
u32 l;
|
|
u32 h;
|
|
};
|
|
u64 q;
|
|
};
|
|
};
|
|
|
|
struct msr_info {
|
|
u32 msr_no;
|
|
struct msr reg;
|
|
struct msr *msrs;
|
|
int err;
|
|
};
|
|
|
|
struct msr_regs_info {
|
|
u32 *regs;
|
|
int err;
|
|
};
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long long native_read_tscp(unsigned int *aux)
|
|
{
|
|
unsigned long low, high;
|
|
asm volatile(".byte 0x0f,0x01,0xf9"
|
|
: "=a" (low), "=d" (high), "=c" (*aux));
|
|
return low | ((u64)high << 32);
|
|
}
|
|
# 60 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/msr.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long long native_read_msr(unsigned int msr)
|
|
{
|
|
unsigned low, high;
|
|
|
|
asm volatile("rdmsr" : "=a" (low), "=d" (high) : "c" (msr));
|
|
return ((low) | ((u64)(high) << 32));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long long native_read_msr_safe(unsigned int msr,
|
|
int *err)
|
|
{
|
|
unsigned low, high;
|
|
|
|
asm volatile("2: rdmsr ; xor %[err],%[err]\n"
|
|
"1:\n\t"
|
|
".section .fixup,\"ax\"\n\t"
|
|
"3: mov %[fault],%[err] ; jmp 1b\n\t"
|
|
".previous\n\t"
|
|
" .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "2b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n"
|
|
: [err] "=r" (*err), "=a" (low), "=d" (high)
|
|
: "c" (msr), [fault] "i" (-5));
|
|
return ((low) | ((u64)(high) << 32));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_write_msr(unsigned int msr,
|
|
unsigned low, unsigned high)
|
|
{
|
|
asm volatile("wrmsr" : : "c" (msr), "a"(low), "d" (high) : "memory");
|
|
}
|
|
|
|
|
|
__attribute__((no_instrument_function)) static inline __attribute__((no_instrument_function)) int native_write_msr_safe(unsigned int msr,
|
|
unsigned low, unsigned high)
|
|
{
|
|
int err;
|
|
asm volatile("2: wrmsr ; xor %[err],%[err]\n"
|
|
"1:\n\t"
|
|
".section .fixup,\"ax\"\n\t"
|
|
"3: mov %[fault],%[err] ; jmp 1b\n\t"
|
|
".previous\n\t"
|
|
" .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "2b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n"
|
|
: [err] "=a" (err)
|
|
: "c" (msr), "0" (low), "d" (high),
|
|
[fault] "i" (-5)
|
|
: "memory");
|
|
return err;
|
|
}
|
|
|
|
extern unsigned long long native_read_tsc(void);
|
|
|
|
extern int rdmsr_safe_regs(u32 regs[8]);
|
|
extern int wrmsr_safe_regs(u32 regs[8]);
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) unsigned long long __native_read_tsc(void)
|
|
{
|
|
unsigned low, high;
|
|
|
|
asm volatile("rdtsc" : "=a" (low), "=d" (high));
|
|
|
|
return ((low) | ((u64)(high) << 32));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long long native_read_pmc(int counter)
|
|
{
|
|
unsigned low, high;
|
|
|
|
asm volatile("rdpmc" : "=a" (low), "=d" (high) : "c" (counter));
|
|
return ((low) | ((u64)(high) << 32));
|
|
}
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt.h"
|
|
static inline __attribute__((no_instrument_function)) int paravirt_enabled(void)
|
|
{
|
|
return pv_info.paravirt_enabled;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void load_sp0(struct tss_struct *tss,
|
|
struct thread_struct *thread)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.load_sp0); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_sp0) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.load_sp0)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(tss)), "S" ((unsigned long)(thread)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __cpuid(unsigned int *eax, unsigned int *ebx,
|
|
unsigned int *ecx, unsigned int *edx)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.cpuid); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.cpuid) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.cpuid)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(eax)), "S" ((unsigned long)(ebx)), "d" ((unsigned long)(ecx)), "c" ((unsigned long)(edx)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long paravirt_get_debugreg(int reg)
|
|
{
|
|
return ({ unsigned long __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.get_debugreg); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.get_debugreg) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.get_debugreg)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(reg)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.get_debugreg) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.get_debugreg)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(reg)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_debugreg(unsigned long val, int reg)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.set_debugreg); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.set_debugreg) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.set_debugreg)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(reg)), "S" ((unsigned long)(val)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void clts(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.clts); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.clts) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.clts)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long read_cr0(void)
|
|
{
|
|
return ({ unsigned long __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.read_cr0); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr0) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_cr0)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr0) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_cr0)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_cr0(unsigned long x)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.write_cr0); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_cr0) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.write_cr0)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(x)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long read_cr2(void)
|
|
{
|
|
return ({ unsigned long __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.read_cr2); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.read_cr2) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.read_cr2)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.read_cr2) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.read_cr2)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_cr2(unsigned long x)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.write_cr2); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.write_cr2) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.write_cr2)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(x)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long read_cr3(void)
|
|
{
|
|
return ({ unsigned long __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.read_cr3); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.read_cr3) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.read_cr3)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.read_cr3) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.read_cr3)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_cr3(unsigned long x)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.write_cr3); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.write_cr3) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.write_cr3)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(x)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long read_cr4(void)
|
|
{
|
|
return ({ unsigned long __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.read_cr4); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr4) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_cr4)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr4) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_cr4)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)__eax; } __ret; });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) unsigned long read_cr4_safe(void)
|
|
{
|
|
return ({ unsigned long __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.read_cr4_safe); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr4_safe) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_cr4_safe)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr4_safe) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_cr4_safe)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_cr4(unsigned long x)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.write_cr4); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_cr4) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.write_cr4)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(x)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long read_cr8(void)
|
|
{
|
|
return ({ unsigned long __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.read_cr8); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr8) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_cr8)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr8) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_cr8)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_cr8(unsigned long x)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.write_cr8); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_cr8) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.write_cr8)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(x)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_safe_halt(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_irq_ops.safe_halt); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.safe_halt) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_irq_ops.safe_halt)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void halt(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_irq_ops.halt); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.halt) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_irq_ops.halt)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void wbinvd(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.wbinvd); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.wbinvd) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.wbinvd)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 paravirt_read_msr(unsigned msr, int *err)
|
|
{
|
|
return ({ u64 __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.read_msr); if (sizeof(u64) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_msr) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_msr)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(msr)), "S" ((unsigned long)(err)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (u64)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_msr) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_msr)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(msr)), "S" ((unsigned long)(err)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (u64)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int paravirt_write_msr(unsigned msr, unsigned low, unsigned high)
|
|
{
|
|
return ({ int __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.write_msr); if (sizeof(int) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_msr) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.write_msr)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(msr)), "S" ((unsigned long)(low)), "d" ((unsigned long)(high)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (int)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_msr) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.write_msr)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(msr)), "S" ((unsigned long)(low)), "d" ((unsigned long)(high)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (int)__eax; } __ret; });
|
|
}
|
|
# 169 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt.h"
|
|
static inline __attribute__((no_instrument_function)) int rdmsrl_safe(unsigned msr, unsigned long long *p)
|
|
{
|
|
int err;
|
|
|
|
*p = paravirt_read_msr(msr, &err);
|
|
return err;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 paravirt_read_tsc(void)
|
|
{
|
|
return ({ u64 __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.read_tsc); if (sizeof(u64) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_tsc) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_tsc)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (u64)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_tsc) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_tsc)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (u64)__eax; } __ret; });
|
|
}
|
|
# 190 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long long paravirt_sched_clock(void)
|
|
{
|
|
return ({ unsigned long long __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_time_ops.sched_clock); if (sizeof(unsigned long long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_time_ops.sched_clock) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_time_ops.sched_clock)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_time_ops.sched_clock) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_time_ops.sched_clock)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long long)__eax; } __ret; });
|
|
}
|
|
|
|
struct static_key;
|
|
extern struct static_key paravirt_steal_enabled;
|
|
extern struct static_key paravirt_steal_rq_enabled;
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 paravirt_steal_clock(int cpu)
|
|
{
|
|
return ({ u64 __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_time_ops.steal_clock); if (sizeof(u64) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_time_ops.steal_clock) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_time_ops.steal_clock)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(cpu)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (u64)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_time_ops.steal_clock) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_time_ops.steal_clock)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(cpu)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (u64)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long long paravirt_read_pmc(int counter)
|
|
{
|
|
return ({ u64 __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.read_pmc); if (sizeof(u64) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_pmc) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_pmc)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(counter)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (u64)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_pmc) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_pmc)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(counter)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (u64)__eax; } __ret; });
|
|
}
|
|
# 218 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long long paravirt_rdtscp(unsigned int *aux)
|
|
{
|
|
return ({ u64 __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.read_tscp); if (sizeof(u64) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_tscp) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_tscp)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(aux)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (u64)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_tscp) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.read_tscp)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(aux)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (u64)__eax; } __ret; });
|
|
}
|
|
# 239 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt.h"
|
|
static inline __attribute__((no_instrument_function)) void paravirt_alloc_ldt(struct desc_struct *ldt, unsigned entries)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.alloc_ldt); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.alloc_ldt) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.alloc_ldt)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(ldt)), "S" ((unsigned long)(entries)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void paravirt_free_ldt(struct desc_struct *ldt, unsigned entries)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.free_ldt); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.free_ldt) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.free_ldt)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(ldt)), "S" ((unsigned long)(entries)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void load_TR_desc(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.load_tr_desc); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_tr_desc) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.load_tr_desc)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void load_gdt(const struct desc_ptr *dtr)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.load_gdt); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_gdt) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.load_gdt)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(dtr)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void load_idt(const struct desc_ptr *dtr)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.load_idt); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_idt) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.load_idt)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(dtr)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void set_ldt(const void *addr, unsigned entries)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.set_ldt); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.set_ldt) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.set_ldt)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(addr)), "S" ((unsigned long)(entries)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void store_idt(struct desc_ptr *dtr)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.store_idt); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.store_idt) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.store_idt)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(dtr)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) unsigned long paravirt_store_tr(void)
|
|
{
|
|
return ({ unsigned long __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.store_tr); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.store_tr) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.store_tr)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.store_tr) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.store_tr)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (unsigned long)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void load_TLS(struct thread_struct *t, unsigned cpu)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.load_tls); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_tls) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.load_tls)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(t)), "S" ((unsigned long)(cpu)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void load_gs_index(unsigned int gs)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.load_gs_index); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_gs_index) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.load_gs_index)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(gs)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_ldt_entry(struct desc_struct *dt, int entry,
|
|
const void *desc)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.write_ldt_entry); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_ldt_entry) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.write_ldt_entry)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(dt)), "S" ((unsigned long)(entry)), "d" ((unsigned long)(desc)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_gdt_entry(struct desc_struct *dt, int entry,
|
|
void *desc, int type)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.write_gdt_entry); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_gdt_entry) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.write_gdt_entry)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(dt)), "S" ((unsigned long)(entry)), "d" ((unsigned long)(desc)), "c" ((unsigned long)(type)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_idt_entry(gate_desc *dt, int entry, const gate_desc *g)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.write_idt_entry); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_idt_entry) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.write_idt_entry)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(dt)), "S" ((unsigned long)(entry)), "d" ((unsigned long)(g)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void set_iopl_mask(unsigned mask)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.set_iopl_mask); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.set_iopl_mask) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.set_iopl_mask)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mask)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void slow_down_io(void)
|
|
{
|
|
pv_cpu_ops.io_delay();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void startup_ipi_hook(int phys_apicid, unsigned long start_eip,
|
|
unsigned long start_esp)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_apic_ops.startup_ipi_hook); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_apic_ops.startup_ipi_hook) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_apic_ops.startup_ipi_hook)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(phys_apicid)), "S" ((unsigned long)(start_eip)), "d" ((unsigned long)(start_esp)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); })
|
|
;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void paravirt_activate_mm(struct mm_struct *prev,
|
|
struct mm_struct *next)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.activate_mm); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.activate_mm) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.activate_mm)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(prev)), "S" ((unsigned long)(next)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void paravirt_arch_dup_mmap(struct mm_struct *oldmm,
|
|
struct mm_struct *mm)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.dup_mmap); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.dup_mmap) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.dup_mmap)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(oldmm)), "S" ((unsigned long)(mm)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void paravirt_arch_exit_mmap(struct mm_struct *mm)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.exit_mmap); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.exit_mmap) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.exit_mmap)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __flush_tlb(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.flush_tlb_user); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.flush_tlb_user) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.flush_tlb_user)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void __flush_tlb_global(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.flush_tlb_kernel); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.flush_tlb_kernel) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.flush_tlb_kernel)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void __flush_tlb_single(unsigned long addr)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.flush_tlb_single); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.flush_tlb_single) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.flush_tlb_single)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(addr)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void flush_tlb_others(const struct cpumask *cpumask,
|
|
struct mm_struct *mm,
|
|
unsigned long start,
|
|
unsigned long end)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.flush_tlb_others); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.flush_tlb_others) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.flush_tlb_others)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(cpumask)), "S" ((unsigned long)(mm)), "d" ((unsigned long)(start)), "c" ((unsigned long)(end)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int paravirt_pgd_alloc(struct mm_struct *mm)
|
|
{
|
|
return ({ int __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pgd_alloc); if (sizeof(int) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_alloc) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pgd_alloc)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (int)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_alloc) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pgd_alloc)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (int)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void paravirt_pgd_free(struct mm_struct *mm, pgd_t *pgd)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pgd_free); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_free) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pgd_free)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(pgd)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void paravirt_alloc_pte(struct mm_struct *mm, unsigned long pfn)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.alloc_pte); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.alloc_pte) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.alloc_pte)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(pfn)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void paravirt_release_pte(unsigned long pfn)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.release_pte); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.release_pte) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.release_pte)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(pfn)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void paravirt_alloc_pmd(struct mm_struct *mm, unsigned long pfn)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.alloc_pmd); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.alloc_pmd) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.alloc_pmd)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(pfn)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void paravirt_release_pmd(unsigned long pfn)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.release_pmd); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.release_pmd) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.release_pmd)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(pfn)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void paravirt_alloc_pud(struct mm_struct *mm, unsigned long pfn)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.alloc_pud); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.alloc_pud) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.alloc_pud)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(pfn)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void paravirt_release_pud(unsigned long pfn)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.release_pud); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.release_pud) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.release_pud)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(pfn)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pte_update(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pte_update); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_update) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pte_update)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(addr)), "d" ((unsigned long)(ptep)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void pmd_update(struct mm_struct *mm, unsigned long addr,
|
|
pmd_t *pmdp)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pmd_update); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pmd_update) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pmd_update)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(addr)), "d" ((unsigned long)(pmdp)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pte_update_defer(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pte_update_defer); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_update_defer) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pte_update_defer)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(addr)), "d" ((unsigned long)(ptep)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pmd_update_defer(struct mm_struct *mm, unsigned long addr,
|
|
pmd_t *pmdp)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pmd_update_defer); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pmd_update_defer) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pmd_update_defer)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(addr)), "d" ((unsigned long)(pmdp)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t __pte(pteval_t val)
|
|
{
|
|
pteval_t ret;
|
|
|
|
if (sizeof(pteval_t) > sizeof(long))
|
|
ret = ({ pteval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.make_pte.func); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pte.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pte.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)), "S" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pte.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pte.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)), "S" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; })
|
|
|
|
;
|
|
else
|
|
ret = ({ pteval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.make_pte.func); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pte.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pte.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pte.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pte.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; })
|
|
|
|
;
|
|
|
|
return (pte_t) { .pte = ret };
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pteval_t pte_val(pte_t pte)
|
|
{
|
|
pteval_t ret;
|
|
|
|
if (sizeof(pteval_t) > sizeof(long))
|
|
ret = ({ pteval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pte_val.func); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pte_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pte.pte)), "S" ((unsigned long)((u64)pte.pte >> 32)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pte_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pte.pte)), "S" ((unsigned long)((u64)pte.pte >> 32)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; })
|
|
;
|
|
else
|
|
ret = ({ pteval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pte_val.func); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pte_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pte.pte)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pte_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pte.pte)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; })
|
|
;
|
|
|
|
return ret;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pgd_t __pgd(pgdval_t val)
|
|
{
|
|
pgdval_t ret;
|
|
|
|
if (sizeof(pgdval_t) > sizeof(long))
|
|
ret = ({ pgdval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.make_pgd.func); if (sizeof(pgdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pgd.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pgd.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)), "S" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pgdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pgd.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pgd.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)), "S" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pgdval_t)__eax; } __ret; })
|
|
;
|
|
else
|
|
ret = ({ pgdval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.make_pgd.func); if (sizeof(pgdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pgd.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pgd.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pgdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pgd.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pgd.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pgdval_t)__eax; } __ret; })
|
|
;
|
|
|
|
return (pgd_t) { ret };
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pgdval_t pgd_val(pgd_t pgd)
|
|
{
|
|
pgdval_t ret;
|
|
|
|
if (sizeof(pgdval_t) > sizeof(long))
|
|
ret = ({ pgdval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pgd_val.func); if (sizeof(pgdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pgd_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pgd.pgd)), "S" ((unsigned long)((u64)pgd.pgd >> 32)) : "memory", "cc" ); __ret = (pgdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pgd_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pgd.pgd)), "S" ((unsigned long)((u64)pgd.pgd >> 32)) : "memory", "cc" ); __ret = (pgdval_t)__eax; } __ret; })
|
|
;
|
|
else
|
|
ret = ({ pgdval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pgd_val.func); if (sizeof(pgdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pgd_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pgd.pgd)) : "memory", "cc" ); __ret = (pgdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pgd_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pgd.pgd)) : "memory", "cc" ); __ret = (pgdval_t)__eax; } __ret; })
|
|
;
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t ptep_modify_prot_start(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep)
|
|
{
|
|
pteval_t ret;
|
|
|
|
ret = ({ pteval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.ptep_modify_prot_start); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.ptep_modify_prot_start) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.ptep_modify_prot_start)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(addr)), "d" ((unsigned long)(ptep)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx), "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.ptep_modify_prot_start) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.ptep_modify_prot_start)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(addr)), "d" ((unsigned long)(ptep)) : "memory", "cc" , "r8", "r9", "r10", "r11"); __ret = (pteval_t)__eax; } __ret; })
|
|
;
|
|
|
|
return (pte_t) { .pte = ret };
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void ptep_modify_prot_commit(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep, pte_t pte)
|
|
{
|
|
if (sizeof(pteval_t) > sizeof(long))
|
|
|
|
pv_mmu_ops.ptep_modify_prot_commit(mm, addr, ptep, pte);
|
|
else
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.ptep_modify_prot_commit); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.ptep_modify_prot_commit) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.ptep_modify_prot_commit)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(addr)), "d" ((unsigned long)(ptep)), "c" ((unsigned long)(pte.pte)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); })
|
|
;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_pte(pte_t *ptep, pte_t pte)
|
|
{
|
|
if (sizeof(pteval_t) > sizeof(long))
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.set_pte); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pte) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.set_pte)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(ptep)), "S" ((unsigned long)(pte.pte)), "d" ((unsigned long)((u64)pte.pte >> 32)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); })
|
|
;
|
|
else
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.set_pte); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pte) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.set_pte)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(ptep)), "S" ((unsigned long)(pte.pte)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); })
|
|
;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_pte_at(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep, pte_t pte)
|
|
{
|
|
if (sizeof(pteval_t) > sizeof(long))
|
|
|
|
pv_mmu_ops.set_pte_at(mm, addr, ptep, pte);
|
|
else
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.set_pte_at); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pte_at) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.set_pte_at)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(addr)), "d" ((unsigned long)(ptep)), "c" ((unsigned long)(pte.pte)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_pmd_at(struct mm_struct *mm, unsigned long addr,
|
|
pmd_t *pmdp, pmd_t pmd)
|
|
{
|
|
if (sizeof(pmdval_t) > sizeof(long))
|
|
|
|
pv_mmu_ops.set_pmd_at(mm, addr, pmdp, pmd);
|
|
else
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.set_pmd_at); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pmd_at) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.set_pmd_at)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(mm)), "S" ((unsigned long)(addr)), "d" ((unsigned long)(pmdp)), "c" ((unsigned long)(native_pmd_val(pmd))) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); })
|
|
;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_pmd(pmd_t *pmdp, pmd_t pmd)
|
|
{
|
|
pmdval_t val = native_pmd_val(pmd);
|
|
|
|
if (sizeof(pmdval_t) > sizeof(long))
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.set_pmd); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pmd) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.set_pmd)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(pmdp)), "S" ((unsigned long)(val)), "d" ((unsigned long)((u64)val >> 32)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
else
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.set_pmd); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pmd) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.set_pmd)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(pmdp)), "S" ((unsigned long)(val)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t __pmd(pmdval_t val)
|
|
{
|
|
pmdval_t ret;
|
|
|
|
if (sizeof(pmdval_t) > sizeof(long))
|
|
ret = ({ pmdval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.make_pmd.func); if (sizeof(pmdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pmd.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pmd.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)), "S" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pmdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pmd.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pmd.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)), "S" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pmdval_t)__eax; } __ret; })
|
|
;
|
|
else
|
|
ret = ({ pmdval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.make_pmd.func); if (sizeof(pmdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pmd.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pmd.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pmdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pmd.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pmd.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pmdval_t)__eax; } __ret; })
|
|
;
|
|
|
|
return (pmd_t) { ret };
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmdval_t pmd_val(pmd_t pmd)
|
|
{
|
|
pmdval_t ret;
|
|
|
|
if (sizeof(pmdval_t) > sizeof(long))
|
|
ret = ({ pmdval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pmd_val.func); if (sizeof(pmdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pmd_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pmd_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pmd.pmd)), "S" ((unsigned long)((u64)pmd.pmd >> 32)) : "memory", "cc" ); __ret = (pmdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pmd_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pmd_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pmd.pmd)), "S" ((unsigned long)((u64)pmd.pmd >> 32)) : "memory", "cc" ); __ret = (pmdval_t)__eax; } __ret; })
|
|
;
|
|
else
|
|
ret = ({ pmdval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pmd_val.func); if (sizeof(pmdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pmd_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pmd_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pmd.pmd)) : "memory", "cc" ); __ret = (pmdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pmd_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pmd_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pmd.pmd)) : "memory", "cc" ); __ret = (pmdval_t)__eax; } __ret; })
|
|
;
|
|
|
|
return ret;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_pud(pud_t *pudp, pud_t pud)
|
|
{
|
|
pudval_t val = native_pud_val(pud);
|
|
|
|
if (sizeof(pudval_t) > sizeof(long))
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.set_pud); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pud) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.set_pud)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(pudp)), "S" ((unsigned long)(val)), "d" ((unsigned long)((u64)val >> 32)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); })
|
|
;
|
|
else
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.set_pud); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pud) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.set_pud)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(pudp)), "S" ((unsigned long)(val)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); })
|
|
;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pud_t __pud(pudval_t val)
|
|
{
|
|
pudval_t ret;
|
|
|
|
if (sizeof(pudval_t) > sizeof(long))
|
|
ret = ({ pudval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.make_pud.func); if (sizeof(pudval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pud.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pud.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)), "S" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pudval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pud.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pud.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)), "S" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pudval_t)__eax; } __ret; })
|
|
;
|
|
else
|
|
ret = ({ pudval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.make_pud.func); if (sizeof(pudval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pud.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pud.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pudval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pud.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.make_pud.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pudval_t)__eax; } __ret; })
|
|
;
|
|
|
|
return (pud_t) { ret };
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pudval_t pud_val(pud_t pud)
|
|
{
|
|
pudval_t ret;
|
|
|
|
if (sizeof(pudval_t) > sizeof(long))
|
|
ret = ({ pudval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pud_val.func); if (sizeof(pudval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pud_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pud_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pud.pud)), "S" ((unsigned long)((u64)pud.pud >> 32)) : "memory", "cc" ); __ret = (pudval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pud_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pud_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pud.pud)), "S" ((unsigned long)((u64)pud.pud >> 32)) : "memory", "cc" ); __ret = (pudval_t)__eax; } __ret; })
|
|
;
|
|
else
|
|
ret = ({ pudval_t __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.pud_val.func); if (sizeof(pudval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pud_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pud_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pud.pud)) : "memory", "cc" ); __ret = (pudval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pud_val.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.pud_val.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(pud.pud)) : "memory", "cc" ); __ret = (pudval_t)__eax; } __ret; })
|
|
;
|
|
|
|
return ret;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_pgd(pgd_t *pgdp, pgd_t pgd)
|
|
{
|
|
pgdval_t val = native_pgd_val(pgd);
|
|
|
|
if (sizeof(pgdval_t) > sizeof(long))
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.set_pgd); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pgd) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.set_pgd)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(pgdp)), "S" ((unsigned long)(val)), "d" ((unsigned long)((u64)val >> 32)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); })
|
|
;
|
|
else
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.set_pgd); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pgd) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.set_pgd)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(pgdp)), "S" ((unsigned long)(val)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); })
|
|
;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pgd_clear(pgd_t *pgdp)
|
|
{
|
|
set_pgd(pgdp, __pgd(0));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pud_clear(pud_t *pudp)
|
|
{
|
|
set_pud(pudp, __pud(0));
|
|
}
|
|
# 663 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt.h"
|
|
static inline __attribute__((no_instrument_function)) void set_pte_atomic(pte_t *ptep, pte_t pte)
|
|
{
|
|
set_pte(ptep, pte);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pte_clear(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep)
|
|
{
|
|
set_pte_at(mm, addr, ptep, __pte(0));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pmd_clear(pmd_t *pmdp)
|
|
{
|
|
set_pmd(pmdp, __pmd(0));
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_start_context_switch(struct task_struct *prev)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.start_context_switch); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.start_context_switch) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.start_context_switch)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(prev)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_end_context_switch(struct task_struct *next)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_cpu_ops.end_context_switch); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.end_context_switch) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_cpu_ops.end_context_switch)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(next)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_enter_lazy_mmu_mode(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.lazy_mode.enter); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.lazy_mode.enter) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.lazy_mode.enter)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_leave_lazy_mmu_mode(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.lazy_mode.leave); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.lazy_mode.leave) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.lazy_mode.leave)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_flush_lazy_mmu_mode(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_mmu_ops.lazy_mode.flush); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.lazy_mode.flush) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_mmu_ops.lazy_mode.flush)), [paravirt_clobber] "i" (((1 << 9) - 1)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __set_fixmap(unsigned idx,
|
|
phys_addr_t phys, pgprot_t flags)
|
|
{
|
|
pv_mmu_ops.set_fixmap(idx, phys, flags);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void __ticket_lock_spinning(struct arch_spinlock *lock,
|
|
__ticket_t ticket)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_lock_ops.lock_spinning.func); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_lock_ops.lock_spinning.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_lock_ops.lock_spinning.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(lock)), "S" ((unsigned long)(ticket)) : "memory", "cc" ); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void __ticket_unlock_kick(struct arch_spinlock *lock,
|
|
__ticket_t ticket)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_lock_ops.unlock_kick); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=D" (__edi), "=S" (__esi), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_lock_ops.unlock_kick) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_lock_ops.unlock_kick)), [paravirt_clobber] "i" (((1 << 9) - 1)), "D" ((unsigned long)(lock)), "S" ((unsigned long)(ticket)) : "memory", "cc" , "rax", "r8", "r9", "r10", "r11"); });
|
|
}
|
|
# 802 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((no_instrument_function)) unsigned long arch_local_save_flags(void)
|
|
{
|
|
return ({ unsigned long __ret; unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_irq_ops.save_fl.func); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.save_fl.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_irq_ops.save_fl.func)), [paravirt_clobber] "i" (((1 << 0))) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.save_fl.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_irq_ops.save_fl.func)), [paravirt_clobber] "i" (((1 << 0))) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((no_instrument_function)) void arch_local_irq_restore(unsigned long f)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_irq_ops.restore_fl.func); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.restore_fl.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_irq_ops.restore_fl.func)), [paravirt_clobber] "i" (((1 << 0))), "D" ((unsigned long)(f)) : "memory", "cc" ); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((no_instrument_function)) void arch_local_irq_disable(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_irq_ops.irq_disable.func); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.irq_disable.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_irq_ops.irq_disable.func)), [paravirt_clobber] "i" (((1 << 0))) : "memory", "cc" ); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((no_instrument_function)) void arch_local_irq_enable(void)
|
|
{
|
|
({ unsigned long __edi = __edi, __esi = __esi, __edx = __edx, __ecx = __ecx, __eax = __eax; ((void)pv_irq_ops.irq_enable.func); asm volatile("" "771:\n\t" "call *%c[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 8" " " "\n" " " ".quad" " " " 771b\n" " .byte " "%c[paravirt_typenum]" "\n" " .byte 772b-771b\n" " .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.irq_enable.func) / sizeof(void *))), [paravirt_opptr] "i" (&(pv_irq_ops.irq_enable.func)), [paravirt_clobber] "i" (((1 << 0))) : "memory", "cc" ); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((no_instrument_function)) unsigned long arch_local_irq_save(void)
|
|
{
|
|
unsigned long f;
|
|
|
|
f = arch_local_save_flags();
|
|
arch_local_irq_disable();
|
|
return f;
|
|
}
|
|
# 847 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/paravirt.h"
|
|
extern void default_banner(void);
|
|
# 132 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/msr.h" 2
|
|
# 215 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/msr.h"
|
|
struct msr *msrs_alloc(void);
|
|
void msrs_free(struct msr *msrs);
|
|
int msr_set_bit(u32 msr, u8 bit);
|
|
int msr_clear_bit(u32 msr, u8 bit);
|
|
|
|
|
|
int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
|
|
int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
|
|
int rdmsrl_on_cpu(unsigned int cpu, u32 msr_no, u64 *q);
|
|
int wrmsrl_on_cpu(unsigned int cpu, u32 msr_no, u64 q);
|
|
void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs);
|
|
void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs);
|
|
int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
|
|
int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
|
|
int rdmsrl_safe_on_cpu(unsigned int cpu, u32 msr_no, u64 *q);
|
|
int wrmsrl_safe_on_cpu(unsigned int cpu, u32 msr_no, u64 q);
|
|
int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]);
|
|
int wrmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]);
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/special_insns.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_clts(void)
|
|
{
|
|
asm volatile("clts");
|
|
}
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/special_insns.h"
|
|
extern unsigned long __force_order;
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long native_read_cr0(void)
|
|
{
|
|
unsigned long val;
|
|
asm volatile("mov %%cr0,%0\n\t" : "=r" (val), "=m" (__force_order));
|
|
return val;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_write_cr0(unsigned long val)
|
|
{
|
|
asm volatile("mov %0,%%cr0": : "r" (val), "m" (__force_order));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long native_read_cr2(void)
|
|
{
|
|
unsigned long val;
|
|
asm volatile("mov %%cr2,%0\n\t" : "=r" (val), "=m" (__force_order));
|
|
return val;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_write_cr2(unsigned long val)
|
|
{
|
|
asm volatile("mov %0,%%cr2": : "r" (val), "m" (__force_order));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long native_read_cr3(void)
|
|
{
|
|
unsigned long val;
|
|
asm volatile("mov %%cr3,%0\n\t" : "=r" (val), "=m" (__force_order));
|
|
return val;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_write_cr3(unsigned long val)
|
|
{
|
|
asm volatile("mov %0,%%cr3": : "r" (val), "m" (__force_order));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long native_read_cr4(void)
|
|
{
|
|
unsigned long val;
|
|
asm volatile("mov %%cr4,%0\n\t" : "=r" (val), "=m" (__force_order));
|
|
return val;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long native_read_cr4_safe(void)
|
|
{
|
|
unsigned long val;
|
|
# 75 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/special_insns.h"
|
|
val = native_read_cr4();
|
|
|
|
return val;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_write_cr4(unsigned long val)
|
|
{
|
|
asm volatile("mov %0,%%cr4": : "r" (val), "m" (__force_order));
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long native_read_cr8(void)
|
|
{
|
|
unsigned long cr8;
|
|
asm volatile("movq %%cr8,%0" : "=r" (cr8));
|
|
return cr8;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_write_cr8(unsigned long val)
|
|
{
|
|
asm volatile("movq %0,%%cr8" :: "r" (val) : "memory");
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_wbinvd(void)
|
|
{
|
|
asm volatile("wbinvd": : :"memory");
|
|
}
|
|
|
|
extern void native_load_gs_index(unsigned);
|
|
# 189 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/special_insns.h"
|
|
static inline __attribute__((no_instrument_function)) void clflush(volatile void *__p)
|
|
{
|
|
asm volatile("clflush %0" : "+m" (*(volatile char *)__p));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void clflushopt(volatile void *__p)
|
|
{
|
|
asm volatile ("661:\n\t" ".byte " "0x3e" "; clflush %P0" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+23)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x66; clflush %P0" "\n" "664""1" ":\n\t" ".popsection" : "+m" (*(volatile char *)__p) : "i" (0))
|
|
|
|
|
|
;
|
|
}
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/personality.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/personality.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/personality.h"
|
|
enum {
|
|
UNAME26 = 0x0020000,
|
|
ADDR_NO_RANDOMIZE = 0x0040000,
|
|
FDPIC_FUNCPTRS = 0x0080000,
|
|
|
|
|
|
MMAP_PAGE_ZERO = 0x0100000,
|
|
ADDR_COMPAT_LAYOUT = 0x0200000,
|
|
READ_IMPLIES_EXEC = 0x0400000,
|
|
ADDR_LIMIT_32BIT = 0x0800000,
|
|
SHORT_INODE = 0x1000000,
|
|
WHOLE_SECONDS = 0x2000000,
|
|
STICKY_TIMEOUTS = 0x4000000,
|
|
ADDR_LIMIT_3GB = 0x8000000,
|
|
};
|
|
# 41 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/personality.h"
|
|
enum {
|
|
PER_LINUX = 0x0000,
|
|
PER_LINUX_32BIT = 0x0000 | ADDR_LIMIT_32BIT,
|
|
PER_LINUX_FDPIC = 0x0000 | FDPIC_FUNCPTRS,
|
|
PER_SVR4 = 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
|
|
PER_SVR3 = 0x0002 | STICKY_TIMEOUTS | SHORT_INODE,
|
|
PER_SCOSVR3 = 0x0003 | STICKY_TIMEOUTS |
|
|
WHOLE_SECONDS | SHORT_INODE,
|
|
PER_OSR5 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS,
|
|
PER_WYSEV386 = 0x0004 | STICKY_TIMEOUTS | SHORT_INODE,
|
|
PER_ISCR4 = 0x0005 | STICKY_TIMEOUTS,
|
|
PER_BSD = 0x0006,
|
|
PER_SUNOS = 0x0006 | STICKY_TIMEOUTS,
|
|
PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
|
|
PER_LINUX32 = 0x0008,
|
|
PER_LINUX32_3GB = 0x0008 | ADDR_LIMIT_3GB,
|
|
PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS,
|
|
PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS,
|
|
PER_IRIX64 = 0x000b | STICKY_TIMEOUTS,
|
|
PER_RISCOS = 0x000c,
|
|
PER_SOLARIS = 0x000d | STICKY_TIMEOUTS,
|
|
PER_UW7 = 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
|
|
PER_OSF4 = 0x000f,
|
|
PER_HPUX = 0x0010,
|
|
PER_MASK = 0x00ff,
|
|
};
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/personality.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct exec_domain;
|
|
struct pt_regs;
|
|
|
|
extern int register_exec_domain(struct exec_domain *);
|
|
extern int unregister_exec_domain(struct exec_domain *);
|
|
extern int __set_personality(unsigned int);
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/personality.h"
|
|
typedef void (*handler_t)(int, struct pt_regs *);
|
|
|
|
struct exec_domain {
|
|
const char *name;
|
|
handler_t handler;
|
|
unsigned char pers_low;
|
|
unsigned char pers_high;
|
|
unsigned long *signal_map;
|
|
unsigned long *signal_invmap;
|
|
struct map_segment *err_map;
|
|
struct map_segment *socktype_map;
|
|
struct map_segment *sockopt_map;
|
|
struct map_segment *af_map;
|
|
struct module *module;
|
|
struct exec_domain *next;
|
|
};
|
|
# 26 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 2
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/math64.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/div64.h" 1
|
|
# 63 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/div64.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/div64.h" 1
|
|
# 64 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/div64.h" 2
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/math64.h" 2
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/math64.h"
|
|
static inline __attribute__((no_instrument_function)) u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder)
|
|
{
|
|
*remainder = dividend % divisor;
|
|
return dividend / divisor;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder)
|
|
{
|
|
*remainder = dividend % divisor;
|
|
return dividend / divisor;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 div64_u64_rem(u64 dividend, u64 divisor, u64 *remainder)
|
|
{
|
|
*remainder = dividend % divisor;
|
|
return dividend / divisor;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 div64_u64(u64 dividend, u64 divisor)
|
|
{
|
|
return dividend / divisor;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) s64 div64_s64(s64 dividend, s64 divisor)
|
|
{
|
|
return dividend / divisor;
|
|
}
|
|
# 97 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/math64.h"
|
|
static inline __attribute__((no_instrument_function)) u64 div_u64(u64 dividend, u32 divisor)
|
|
{
|
|
u32 remainder;
|
|
return div_u64_rem(dividend, divisor, &remainder);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/math64.h"
|
|
static 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;
|
|
}
|
|
# 30 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/err.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/errno.h" 1
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/err.h" 2
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/err.h"
|
|
static inline __attribute__((no_instrument_function)) void * ERR_PTR(long error)
|
|
{
|
|
return (void *) error;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) long PTR_ERR( const void *ptr)
|
|
{
|
|
return (long) ptr;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool IS_ERR( const void *ptr)
|
|
{
|
|
return __builtin_expect(!!(((unsigned long)ptr) >= (unsigned long)-4095), 0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool IS_ERR_OR_NULL( const void *ptr)
|
|
{
|
|
return !ptr || __builtin_expect(!!(((unsigned long)ptr) >= (unsigned long)-4095), 0);
|
|
}
|
|
# 50 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/err.h"
|
|
static inline __attribute__((no_instrument_function)) void * ERR_CAST( const void *ptr)
|
|
{
|
|
|
|
return (void *) ptr;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int PTR_ERR_OR_ZERO( const void *ptr)
|
|
{
|
|
if (IS_ERR(ptr))
|
|
return PTR_ERR(ptr);
|
|
else
|
|
return 0;
|
|
}
|
|
# 31 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqflags.h" 1
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqflags.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irqflags.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irqflags.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long native_save_fl(void)
|
|
{
|
|
unsigned long flags;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
asm volatile("# __raw_save_flags\n\t"
|
|
"pushf ; pop %0"
|
|
: "=rm" (flags)
|
|
:
|
|
: "memory");
|
|
|
|
return flags;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_restore_fl(unsigned long flags)
|
|
{
|
|
asm volatile("push %0 ; popf"
|
|
:
|
|
:"g" (flags)
|
|
:"memory", "cc");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_irq_disable(void)
|
|
{
|
|
asm volatile("cli": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_irq_enable(void)
|
|
{
|
|
asm volatile("sti": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_safe_halt(void)
|
|
{
|
|
asm volatile("sti; hlt": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_halt(void)
|
|
{
|
|
asm volatile("hlt": : :"memory");
|
|
}
|
|
# 155 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irqflags.h"
|
|
static inline __attribute__((no_instrument_function)) int arch_irqs_disabled_flags(unsigned long flags)
|
|
{
|
|
return !(flags & ((1UL) << (9)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int arch_irqs_disabled(void)
|
|
{
|
|
unsigned long flags = arch_local_save_flags();
|
|
|
|
return arch_irqs_disabled_flags(flags);
|
|
}
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqflags.h" 2
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h" 2
|
|
# 46 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
static inline __attribute__((no_instrument_function)) void *current_text_addr(void)
|
|
{
|
|
void *pc;
|
|
|
|
asm volatile("mov $1f, %0; 1:":"=r" (pc));
|
|
|
|
return pc;
|
|
}
|
|
# 63 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
enum tlb_infos {
|
|
ENTRIES,
|
|
NR_INFO
|
|
};
|
|
|
|
extern u16 __attribute__((__section__(".data..read_mostly"))) tlb_lli_4k[NR_INFO];
|
|
extern u16 __attribute__((__section__(".data..read_mostly"))) tlb_lli_2m[NR_INFO];
|
|
extern u16 __attribute__((__section__(".data..read_mostly"))) tlb_lli_4m[NR_INFO];
|
|
extern u16 __attribute__((__section__(".data..read_mostly"))) tlb_lld_4k[NR_INFO];
|
|
extern u16 __attribute__((__section__(".data..read_mostly"))) tlb_lld_2m[NR_INFO];
|
|
extern u16 __attribute__((__section__(".data..read_mostly"))) tlb_lld_4m[NR_INFO];
|
|
extern u16 __attribute__((__section__(".data..read_mostly"))) tlb_lld_1g[NR_INFO];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct cpuinfo_x86 {
|
|
__u8 x86;
|
|
__u8 x86_vendor;
|
|
__u8 x86_model;
|
|
__u8 x86_mask;
|
|
# 96 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
int x86_tlbsize;
|
|
|
|
__u8 x86_virt_bits;
|
|
__u8 x86_phys_bits;
|
|
|
|
__u8 x86_coreid_bits;
|
|
|
|
__u32 extended_cpuid_level;
|
|
|
|
int cpuid_level;
|
|
__u32 x86_capability[11 + 1];
|
|
char x86_vendor_id[16];
|
|
char x86_model_id[64];
|
|
|
|
int x86_cache_size;
|
|
int x86_cache_alignment;
|
|
int x86_power;
|
|
unsigned long loops_per_jiffy;
|
|
|
|
u16 x86_max_cores;
|
|
u16 apicid;
|
|
u16 initial_apicid;
|
|
u16 x86_clflush_size;
|
|
|
|
u16 booted_cores;
|
|
|
|
u16 phys_proc_id;
|
|
|
|
u16 cpu_core_id;
|
|
|
|
u8 compute_unit_id;
|
|
|
|
u16 cpu_index;
|
|
u32 microcode;
|
|
};
|
|
# 146 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
extern struct cpuinfo_x86 boot_cpu_data;
|
|
extern struct cpuinfo_x86 new_cpu_data;
|
|
|
|
extern struct tss_struct doublefault_tss;
|
|
extern __u32 cpu_caps_cleared[11];
|
|
extern __u32 cpu_caps_set[11];
|
|
|
|
|
|
extern __attribute__((section(".data..percpu" "..read_mostly"))) __typeof__(struct cpuinfo_x86) cpu_info;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern const struct seq_operations cpuinfo_op;
|
|
|
|
|
|
|
|
extern void cpu_detect(struct cpuinfo_x86 *c);
|
|
extern void fpu_detect(struct cpuinfo_x86 *c);
|
|
|
|
extern void early_cpu_init(void);
|
|
extern void identify_boot_cpu(void);
|
|
extern void identify_secondary_cpu(struct cpuinfo_x86 *);
|
|
extern void print_cpu_info(struct cpuinfo_x86 *);
|
|
void print_cpu_msr(struct cpuinfo_x86 *);
|
|
extern void init_scattered_cpuid_features(struct cpuinfo_x86 *c);
|
|
extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);
|
|
extern void init_amd_cacheinfo(struct cpuinfo_x86 *c);
|
|
|
|
extern void detect_extended_topology(struct cpuinfo_x86 *c);
|
|
extern void detect_ht(struct cpuinfo_x86 *c);
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int have_cpuid_p(void)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_cpuid(unsigned int *eax, unsigned int *ebx,
|
|
unsigned int *ecx, unsigned int *edx)
|
|
{
|
|
|
|
asm volatile("cpuid"
|
|
: "=a" (*eax),
|
|
"=b" (*ebx),
|
|
"=c" (*ecx),
|
|
"=d" (*edx)
|
|
: "0" (*eax), "2" (*ecx)
|
|
: "memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void load_cr3(pgd_t *pgdir)
|
|
{
|
|
write_cr3(__phys_addr_nodebug((unsigned long)(pgdir)));
|
|
}
|
|
# 240 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
struct x86_hw_tss {
|
|
u32 reserved1;
|
|
u64 sp0;
|
|
u64 sp1;
|
|
u64 sp2;
|
|
u64 reserved2;
|
|
u64 ist[7];
|
|
u32 reserved3;
|
|
u32 reserved4;
|
|
u16 reserved5;
|
|
u16 io_bitmap_base;
|
|
|
|
} __attribute__((packed)) __attribute__((__aligned__((1 << (6)))));
|
|
# 264 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
struct tss_struct {
|
|
|
|
|
|
|
|
struct x86_hw_tss x86_tss;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long io_bitmap[((65536/8)/sizeof(long)) + 1];
|
|
|
|
|
|
|
|
|
|
unsigned long stack[64];
|
|
|
|
} __attribute__((__aligned__((1 << (6)))));
|
|
|
|
extern __attribute__((section(".data..percpu" "..shared_aligned"))) __typeof__(struct tss_struct) init_tss __attribute__((__aligned__((1 << (6)))));
|
|
|
|
|
|
|
|
|
|
struct orig_ist {
|
|
unsigned long ist[7];
|
|
};
|
|
|
|
|
|
|
|
struct i387_fsave_struct {
|
|
u32 cwd;
|
|
u32 swd;
|
|
u32 twd;
|
|
u32 fip;
|
|
u32 fcs;
|
|
u32 foo;
|
|
u32 fos;
|
|
|
|
|
|
u32 st_space[20];
|
|
|
|
|
|
u32 status;
|
|
};
|
|
|
|
struct i387_fxsave_struct {
|
|
u16 cwd;
|
|
u16 swd;
|
|
u16 twd;
|
|
u16 fop;
|
|
union {
|
|
struct {
|
|
u64 rip;
|
|
u64 rdp;
|
|
};
|
|
struct {
|
|
u32 fip;
|
|
u32 fcs;
|
|
u32 foo;
|
|
u32 fos;
|
|
};
|
|
};
|
|
u32 mxcsr;
|
|
u32 mxcsr_mask;
|
|
|
|
|
|
u32 st_space[32];
|
|
|
|
|
|
u32 xmm_space[64];
|
|
|
|
u32 padding[12];
|
|
|
|
union {
|
|
u32 padding1[12];
|
|
u32 sw_reserved[12];
|
|
};
|
|
|
|
} __attribute__((aligned(16)));
|
|
|
|
struct i387_soft_struct {
|
|
u32 cwd;
|
|
u32 swd;
|
|
u32 twd;
|
|
u32 fip;
|
|
u32 fcs;
|
|
u32 foo;
|
|
u32 fos;
|
|
|
|
u32 st_space[20];
|
|
u8 ftop;
|
|
u8 changed;
|
|
u8 lookahead;
|
|
u8 no_update;
|
|
u8 rm;
|
|
u8 alimit;
|
|
struct math_emu_info *info;
|
|
u32 entry_eip;
|
|
};
|
|
|
|
struct ymmh_struct {
|
|
|
|
u32 ymmh_space[64];
|
|
};
|
|
|
|
|
|
struct lwp_struct {
|
|
u8 reserved[128];
|
|
};
|
|
|
|
struct bndreg {
|
|
u64 lower_bound;
|
|
u64 upper_bound;
|
|
} __attribute__((packed));
|
|
|
|
struct bndcsr {
|
|
u64 bndcfgu;
|
|
u64 bndstatus;
|
|
} __attribute__((packed));
|
|
|
|
struct xsave_hdr_struct {
|
|
u64 xstate_bv;
|
|
u64 xcomp_bv;
|
|
u64 reserved[6];
|
|
} __attribute__((packed));
|
|
|
|
struct xsave_struct {
|
|
struct i387_fxsave_struct i387;
|
|
struct xsave_hdr_struct xsave_hdr;
|
|
struct ymmh_struct ymmh;
|
|
struct lwp_struct lwp;
|
|
struct bndreg bndreg[4];
|
|
struct bndcsr bndcsr;
|
|
|
|
} __attribute__ ((packed, aligned (64)));
|
|
|
|
union thread_xstate {
|
|
struct i387_fsave_struct fsave;
|
|
struct i387_fxsave_struct fxsave;
|
|
struct i387_soft_struct soft;
|
|
struct xsave_struct xsave;
|
|
};
|
|
|
|
struct fpu {
|
|
unsigned int last_cpu;
|
|
unsigned int has_fpu;
|
|
union thread_xstate *state;
|
|
};
|
|
|
|
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(struct orig_ist) orig_ist;
|
|
|
|
union irq_stack_union {
|
|
char irq_stack[(((1UL) << 12) << 2)];
|
|
|
|
|
|
|
|
|
|
|
|
struct {
|
|
char gs_base[40];
|
|
unsigned long stack_canary;
|
|
};
|
|
};
|
|
|
|
extern __attribute__((section(".data..percpu" "..first"))) __typeof__(union irq_stack_union) irq_stack_union __attribute__((externally_visible));
|
|
extern typeof(irq_stack_union) init_per_cpu__irq_stack_union;
|
|
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(char *) irq_stack_ptr;
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(unsigned int) irq_count;
|
|
extern void ignore_sysret(void);
|
|
# 463 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
extern unsigned int xstate_size;
|
|
extern void free_thread_xstate(struct task_struct *);
|
|
extern struct kmem_cache *task_xstate_cachep;
|
|
|
|
struct perf_event;
|
|
|
|
struct thread_struct {
|
|
|
|
struct desc_struct tls_array[3];
|
|
unsigned long sp0;
|
|
unsigned long sp;
|
|
|
|
|
|
|
|
unsigned long usersp;
|
|
unsigned short es;
|
|
unsigned short ds;
|
|
unsigned short fsindex;
|
|
unsigned short gsindex;
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long fs;
|
|
|
|
unsigned long gs;
|
|
|
|
struct perf_event *ptrace_bps[4];
|
|
|
|
unsigned long debugreg6;
|
|
|
|
unsigned long ptrace_dr7;
|
|
|
|
unsigned long cr2;
|
|
unsigned long trap_nr;
|
|
unsigned long error_code;
|
|
|
|
struct fpu fpu;
|
|
# 513 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
unsigned long *io_bitmap_ptr;
|
|
unsigned long iopl;
|
|
|
|
unsigned io_bitmap_max;
|
|
# 525 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
unsigned char fpu_counter;
|
|
};
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_set_iopl_mask(unsigned mask)
|
|
{
|
|
# 545 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
native_load_sp0(struct tss_struct *tss, struct thread_struct *thread)
|
|
{
|
|
tss->x86_tss.sp0 = thread->sp0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_swapgs(void)
|
|
{
|
|
|
|
asm volatile("swapgs" ::: "memory");
|
|
|
|
}
|
|
# 588 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
extern unsigned long mmu_cr4_features;
|
|
extern u32 *trampoline_cr4_features;
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_in_cr4(unsigned long mask)
|
|
{
|
|
unsigned long cr4;
|
|
|
|
mmu_cr4_features |= mask;
|
|
if (trampoline_cr4_features)
|
|
*trampoline_cr4_features = mmu_cr4_features;
|
|
cr4 = read_cr4();
|
|
cr4 |= mask;
|
|
write_cr4(cr4);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void clear_in_cr4(unsigned long mask)
|
|
{
|
|
unsigned long cr4;
|
|
|
|
mmu_cr4_features &= ~mask;
|
|
if (trampoline_cr4_features)
|
|
*trampoline_cr4_features = mmu_cr4_features;
|
|
cr4 = read_cr4();
|
|
cr4 &= ~mask;
|
|
write_cr4(cr4);
|
|
}
|
|
|
|
typedef struct {
|
|
unsigned long seg;
|
|
} mm_segment_t;
|
|
|
|
|
|
|
|
extern void release_thread(struct task_struct *);
|
|
|
|
unsigned long get_wchan(struct task_struct *p);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void cpuid(unsigned int op,
|
|
unsigned int *eax, unsigned int *ebx,
|
|
unsigned int *ecx, unsigned int *edx)
|
|
{
|
|
*eax = op;
|
|
*ecx = 0;
|
|
__cpuid(eax, ebx, ecx, edx);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void cpuid_count(unsigned int op, int count,
|
|
unsigned int *eax, unsigned int *ebx,
|
|
unsigned int *ecx, unsigned int *edx)
|
|
{
|
|
*eax = op;
|
|
*ecx = count;
|
|
__cpuid(eax, ebx, ecx, edx);
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int cpuid_eax(unsigned int op)
|
|
{
|
|
unsigned int eax, ebx, ecx, edx;
|
|
|
|
cpuid(op, &eax, &ebx, &ecx, &edx);
|
|
|
|
return eax;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int cpuid_ebx(unsigned int op)
|
|
{
|
|
unsigned int eax, ebx, ecx, edx;
|
|
|
|
cpuid(op, &eax, &ebx, &ecx, &edx);
|
|
|
|
return ebx;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int cpuid_ecx(unsigned int op)
|
|
{
|
|
unsigned int eax, ebx, ecx, edx;
|
|
|
|
cpuid(op, &eax, &ebx, &ecx, &edx);
|
|
|
|
return ecx;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int cpuid_edx(unsigned int op)
|
|
{
|
|
unsigned int eax, ebx, ecx, edx;
|
|
|
|
cpuid(op, &eax, &ebx, &ecx, &edx);
|
|
|
|
return edx;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void rep_nop(void)
|
|
{
|
|
asm volatile("rep; nop" ::: "memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void cpu_relax(void)
|
|
{
|
|
rep_nop();
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void sync_core(void)
|
|
{
|
|
int tmp;
|
|
# 724 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
asm volatile("cpuid"
|
|
: "=a" (tmp)
|
|
: "0" (1)
|
|
: "ebx", "ecx", "edx", "memory");
|
|
|
|
}
|
|
|
|
extern void select_idle_routine(const struct cpuinfo_x86 *c);
|
|
extern void init_amd_e400_c1e_mask(void);
|
|
|
|
extern unsigned long boot_option_idle_override;
|
|
extern bool amd_e400_c1e_detected;
|
|
|
|
enum idle_boot_override {IDLE_NO_OVERRIDE=0, IDLE_HALT, IDLE_NOMWAIT,
|
|
IDLE_POLL};
|
|
|
|
extern void enable_sep_cpu(void);
|
|
extern int sysenter_setup(void);
|
|
|
|
extern void early_trap_init(void);
|
|
void early_trap_pf_init(void);
|
|
|
|
|
|
extern struct desc_ptr early_gdt_descr;
|
|
|
|
extern void cpu_set_gdt(int);
|
|
extern void switch_to_new_gdt(int);
|
|
extern void load_percpu_segment(int);
|
|
extern void cpu_init(void);
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long get_debugctlmsr(void)
|
|
{
|
|
unsigned long debugctlmsr = 0;
|
|
|
|
|
|
|
|
|
|
|
|
do { int _err; debugctlmsr = paravirt_read_msr(0x000001d9, &_err); } while (0);
|
|
|
|
return debugctlmsr;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void update_debugctlmsr(unsigned long debugctlmsr)
|
|
{
|
|
|
|
|
|
|
|
|
|
do { paravirt_write_msr(0x000001d9, (u32)((u64)(debugctlmsr)), ((u64)(debugctlmsr))>>32); } while (0);
|
|
}
|
|
|
|
extern void set_task_blockstep(struct task_struct *task, bool on);
|
|
|
|
|
|
|
|
|
|
|
|
extern unsigned int machine_id;
|
|
extern unsigned int machine_submodel_id;
|
|
extern unsigned int BIOS_revision;
|
|
|
|
|
|
extern int bootloader_type;
|
|
extern int bootloader_version;
|
|
|
|
extern char ignore_fpu_irq;
|
|
# 809 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
static inline __attribute__((no_instrument_function)) void prefetch(const void *x)
|
|
{
|
|
asm volatile ("661:\n\t" "prefetcht0 (%1)" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 0*32+25)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" "prefetchnta (%1)" "\n" "664""1" ":\n\t" ".popsection" : : "i" (0), "r" (x))
|
|
|
|
|
|
;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void prefetchw(const void *x)
|
|
{
|
|
asm volatile ("661:\n\t" "prefetcht0 (%1)" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 1*32+31)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" "prefetchw (%1)" "\n" "664""1" ":\n\t" ".popsection" : : "i" (0), "r" (x))
|
|
|
|
|
|
;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void spin_lock_prefetch(const void *x)
|
|
{
|
|
prefetchw(x);
|
|
}
|
|
# 937 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
extern unsigned long KSTK_ESP(struct task_struct *task);
|
|
|
|
|
|
|
|
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(unsigned long) old_rsp;
|
|
|
|
|
|
|
|
extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
|
|
unsigned long new_sp);
|
|
# 961 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
extern int get_tsc_mode(unsigned long adr);
|
|
extern int set_tsc_mode(unsigned int val);
|
|
# 972 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/processor.h"
|
|
static inline __attribute__((no_instrument_function)) int mpx_enable_management(struct task_struct *tsk)
|
|
{
|
|
return -22;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) int mpx_disable_management(struct task_struct *tsk)
|
|
{
|
|
return -22;
|
|
}
|
|
|
|
|
|
extern u16 amd_get_nb_id(int cpu);
|
|
|
|
static inline __attribute__((no_instrument_function)) uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves)
|
|
{
|
|
uint32_t base, eax, signature[3];
|
|
|
|
for (base = 0x40000000; base < 0x40010000; base += 0x100) {
|
|
cpuid(base, &eax, &signature[0], &signature[1], &signature[2]);
|
|
|
|
if (!memcmp(sig, signature, 12) &&
|
|
(leaves == 0 || ((eax - base) >= leaves)))
|
|
return base;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
extern unsigned long arch_align_stack(unsigned long sp);
|
|
extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
|
|
|
|
void default_idle(void);
|
|
|
|
bool xen_set_default_idle(void);
|
|
|
|
|
|
|
|
|
|
void stop_this_cpu(void *dummy);
|
|
void df_debug(struct pt_regs *regs, long error_code);
|
|
# 51 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/thread_info.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/atomic.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cmpxchg.h" 1
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cmpxchg.h"
|
|
extern void __xchg_wrong_size(void)
|
|
__attribute__((error("Bad argument size for xchg")));
|
|
extern void __cmpxchg_wrong_size(void)
|
|
__attribute__((error("Bad argument size for cmpxchg")));
|
|
extern void __xadd_wrong_size(void)
|
|
__attribute__((error("Bad argument size for xadd")));
|
|
extern void __add_wrong_size(void)
|
|
__attribute__((error("Bad argument size for add")));
|
|
# 145 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cmpxchg.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cmpxchg_64.h" 1
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_64bit(volatile u64 *ptr, u64 val)
|
|
{
|
|
*ptr = val;
|
|
}
|
|
# 146 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/cmpxchg.h" 2
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h" 2
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic_read(const atomic_t *v)
|
|
{
|
|
return (*({ __attribute__((unused)) typeof((v)->counter) __var = ( typeof((v)->counter)) 0; (volatile typeof((v)->counter) *)&((v)->counter); }));
|
|
}
|
|
# 37 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) void atomic_set(atomic_t *v, int i)
|
|
{
|
|
v->counter = i;
|
|
}
|
|
# 49 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) void atomic_add(int i, atomic_t *v)
|
|
{
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "addl %1,%0"
|
|
: "+m" (v->counter)
|
|
: "ir" (i));
|
|
}
|
|
# 63 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) void atomic_sub(int i, atomic_t *v)
|
|
{
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "subl %1,%0"
|
|
: "+m" (v->counter)
|
|
: "ir" (i));
|
|
}
|
|
# 79 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic_sub_and_test(int i, atomic_t *v)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "subl" " %2, " "%0" "; set" "e" " %1" : "+m" (v->counter), "=qm" (c) : "er" (i) : "memory"); return c != 0; } while (0);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void atomic_inc(atomic_t *v)
|
|
{
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "incl %0"
|
|
: "+m" (v->counter));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void atomic_dec(atomic_t *v)
|
|
{
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "decl %0"
|
|
: "+m" (v->counter));
|
|
}
|
|
# 116 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic_dec_and_test(atomic_t *v)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "decl" " " "%0" "; set" "e" " %1" : "+m" (v->counter), "=qm" (c) : : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 129 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic_inc_and_test(atomic_t *v)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "incl" " " "%0" "; set" "e" " %1" : "+m" (v->counter), "=qm" (c) : : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 143 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic_add_negative(int i, atomic_t *v)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "addl" " %2, " "%0" "; set" "s" " %1" : "+m" (v->counter), "=qm" (c) : "er" (i) : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 155 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic_add_return(int i, atomic_t *v)
|
|
{
|
|
return i + ({ __typeof__ (*(((&v->counter)))) __ret = (((i))); switch (sizeof(*(((&v->counter))))) { case 1: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "b %b0, %1\n" : "+q" (__ret), "+m" (*(((&v->counter)))) : : "memory", "cc"); break; case 2: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "w %w0, %1\n" : "+r" (__ret), "+m" (*(((&v->counter)))) : : "memory", "cc"); break; case 4: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "l %0, %1\n" : "+r" (__ret), "+m" (*(((&v->counter)))) : : "memory", "cc"); break; case 8: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "q %q0, %1\n" : "+r" (__ret), "+m" (*(((&v->counter)))) : : "memory", "cc"); break; default: __xadd_wrong_size(); } __ret; });
|
|
}
|
|
# 167 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic_sub_return(int i, atomic_t *v)
|
|
{
|
|
return atomic_add_return(-i, v);
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int atomic_cmpxchg(atomic_t *v, int old, int new)
|
|
{
|
|
return ({ __typeof__(*((&v->counter))) __ret; __typeof__(*((&v->counter))) __old = ((old)); __typeof__(*((&v->counter))) __new = ((new)); switch ((sizeof(*(&v->counter)))) { case 1: { volatile u8 *__ptr = (volatile u8 *)((&v->counter)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgb %2,%1" : "=a" (__ret), "+m" (*__ptr) : "q" (__new), "0" (__old) : "memory"); break; } case 2: { volatile u16 *__ptr = (volatile u16 *)((&v->counter)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgw %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } case 4: { volatile u32 *__ptr = (volatile u32 *)((&v->counter)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgl %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } case 8: { volatile u64 *__ptr = (volatile u64 *)((&v->counter)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgq %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } default: __cmpxchg_wrong_size(); } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int atomic_xchg(atomic_t *v, int new)
|
|
{
|
|
return ({ __typeof__ (*((&v->counter))) __ret = ((new)); switch (sizeof(*((&v->counter)))) { case 1: asm volatile ("" "xchg" "b %b0, %1\n" : "+q" (__ret), "+m" (*((&v->counter))) : : "memory", "cc"); break; case 2: asm volatile ("" "xchg" "w %w0, %1\n" : "+r" (__ret), "+m" (*((&v->counter))) : : "memory", "cc"); break; case 4: asm volatile ("" "xchg" "l %0, %1\n" : "+r" (__ret), "+m" (*((&v->counter))) : : "memory", "cc"); break; case 8: asm volatile ("" "xchg" "q %q0, %1\n" : "+r" (__ret), "+m" (*((&v->counter))) : : "memory", "cc"); break; default: __xchg_wrong_size(); } __ret; });
|
|
}
|
|
# 194 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) int __atomic_add_unless(atomic_t *v, int a, int u)
|
|
{
|
|
int c, old;
|
|
c = atomic_read(v);
|
|
for (;;) {
|
|
if (__builtin_expect(!!(c == (u)), 0))
|
|
break;
|
|
old = atomic_cmpxchg((v), c, c + (a));
|
|
if (__builtin_expect(!!(old == c), 1))
|
|
break;
|
|
c = old;
|
|
}
|
|
return c;
|
|
}
|
|
# 216 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) short int atomic_inc_short(short int *v)
|
|
{
|
|
asm(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "addw $1, %0" : "+m" (*v));
|
|
return *v;
|
|
}
|
|
# 235 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h" 1
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) long atomic64_read(const atomic64_t *v)
|
|
{
|
|
return (*({ __attribute__((unused)) typeof((v)->counter) __var = ( typeof((v)->counter)) 0; (volatile typeof((v)->counter) *)&((v)->counter); }));
|
|
}
|
|
# 31 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) void atomic64_set(atomic64_t *v, long i)
|
|
{
|
|
v->counter = i;
|
|
}
|
|
# 43 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) void atomic64_add(long i, atomic64_t *v)
|
|
{
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "addq %1,%0"
|
|
: "=m" (v->counter)
|
|
: "er" (i), "m" (v->counter));
|
|
}
|
|
# 57 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) void atomic64_sub(long i, atomic64_t *v)
|
|
{
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "subq %1,%0"
|
|
: "=m" (v->counter)
|
|
: "er" (i), "m" (v->counter));
|
|
}
|
|
# 73 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic64_sub_and_test(long i, atomic64_t *v)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "subq" " %2, " "%0" "; set" "e" " %1" : "+m" (v->counter), "=qm" (c) : "er" (i) : "memory"); return c != 0; } while (0);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void atomic64_inc(atomic64_t *v)
|
|
{
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "incq %0"
|
|
: "=m" (v->counter)
|
|
: "m" (v->counter));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void atomic64_dec(atomic64_t *v)
|
|
{
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "decq %0"
|
|
: "=m" (v->counter)
|
|
: "m" (v->counter));
|
|
}
|
|
# 112 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic64_dec_and_test(atomic64_t *v)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "decq" " " "%0" "; set" "e" " %1" : "+m" (v->counter), "=qm" (c) : : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 125 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic64_inc_and_test(atomic64_t *v)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "incq" " " "%0" "; set" "e" " %1" : "+m" (v->counter), "=qm" (c) : : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 139 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic64_add_negative(long i, atomic64_t *v)
|
|
{
|
|
do { char c; asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "addq" " %2, " "%0" "; set" "s" " %1" : "+m" (v->counter), "=qm" (c) : "er" (i) : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 151 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) long atomic64_add_return(long i, atomic64_t *v)
|
|
{
|
|
return i + ({ __typeof__ (*(((&v->counter)))) __ret = (((i))); switch (sizeof(*(((&v->counter))))) { case 1: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "b %b0, %1\n" : "+q" (__ret), "+m" (*(((&v->counter)))) : : "memory", "cc"); break; case 2: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "w %w0, %1\n" : "+r" (__ret), "+m" (*(((&v->counter)))) : : "memory", "cc"); break; case 4: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "l %0, %1\n" : "+r" (__ret), "+m" (*(((&v->counter)))) : : "memory", "cc"); break; case 8: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "q %q0, %1\n" : "+r" (__ret), "+m" (*(((&v->counter)))) : : "memory", "cc"); break; default: __xadd_wrong_size(); } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) long atomic64_sub_return(long i, atomic64_t *v)
|
|
{
|
|
return atomic64_add_return(-i, v);
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) long atomic64_cmpxchg(atomic64_t *v, long old, long new)
|
|
{
|
|
return ({ __typeof__(*((&v->counter))) __ret; __typeof__(*((&v->counter))) __old = ((old)); __typeof__(*((&v->counter))) __new = ((new)); switch ((sizeof(*(&v->counter)))) { case 1: { volatile u8 *__ptr = (volatile u8 *)((&v->counter)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgb %2,%1" : "=a" (__ret), "+m" (*__ptr) : "q" (__new), "0" (__old) : "memory"); break; } case 2: { volatile u16 *__ptr = (volatile u16 *)((&v->counter)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgw %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } case 4: { volatile u32 *__ptr = (volatile u32 *)((&v->counter)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgl %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } case 8: { volatile u64 *__ptr = (volatile u64 *)((&v->counter)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgq %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } default: __cmpxchg_wrong_size(); } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) long atomic64_xchg(atomic64_t *v, long new)
|
|
{
|
|
return ({ __typeof__ (*((&v->counter))) __ret = ((new)); switch (sizeof(*((&v->counter)))) { case 1: asm volatile ("" "xchg" "b %b0, %1\n" : "+q" (__ret), "+m" (*((&v->counter))) : : "memory", "cc"); break; case 2: asm volatile ("" "xchg" "w %w0, %1\n" : "+r" (__ret), "+m" (*((&v->counter))) : : "memory", "cc"); break; case 4: asm volatile ("" "xchg" "l %0, %1\n" : "+r" (__ret), "+m" (*((&v->counter))) : : "memory", "cc"); break; case 8: asm volatile ("" "xchg" "q %q0, %1\n" : "+r" (__ret), "+m" (*((&v->counter))) : : "memory", "cc"); break; default: __xchg_wrong_size(); } __ret; });
|
|
}
|
|
# 183 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic64_add_unless(atomic64_t *v, long a, long u)
|
|
{
|
|
long c, old;
|
|
c = atomic64_read(v);
|
|
for (;;) {
|
|
if (__builtin_expect(!!(c == (u)), 0))
|
|
break;
|
|
old = atomic64_cmpxchg((v), c, c + (a));
|
|
if (__builtin_expect(!!(old == c), 1))
|
|
break;
|
|
c = old;
|
|
}
|
|
return c != (u);
|
|
}
|
|
# 207 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic64_64.h"
|
|
static inline __attribute__((no_instrument_function)) long atomic64_dec_if_positive(atomic64_t *v)
|
|
{
|
|
long c, old, dec;
|
|
c = atomic64_read(v);
|
|
for (;;) {
|
|
dec = c - 1;
|
|
if (__builtin_expect(!!(dec < 0), 0))
|
|
break;
|
|
old = atomic64_cmpxchg((v), c, dec);
|
|
if (__builtin_expect(!!(old == c), 1))
|
|
break;
|
|
c = old;
|
|
}
|
|
return dec;
|
|
}
|
|
# 236 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/atomic.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/atomic.h" 2
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/atomic.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/atomic.h"
|
|
static 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 = atomic_cmpxchg(v, c, c + 1);
|
|
if (val == c)
|
|
return 1;
|
|
c = val;
|
|
} while (c);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int atomic_inc_unless_negative(atomic_t *p)
|
|
{
|
|
int v, v1;
|
|
for (v = 0; v >= 0; v = v1) {
|
|
v1 = atomic_cmpxchg(p, v, v + 1);
|
|
if (__builtin_expect(!!(v1 == v), 1))
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int atomic_dec_unless_positive(atomic_t *p)
|
|
{
|
|
int v, v1;
|
|
for (v = 0; v <= 0; v = v1) {
|
|
v1 = atomic_cmpxchg(p, v, v - 1);
|
|
if (__builtin_expect(!!(v1 == v), 1))
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
# 97 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/atomic.h"
|
|
static inline __attribute__((no_instrument_function)) int atomic_dec_if_positive(atomic_t *v)
|
|
{
|
|
int c, old, dec;
|
|
c = atomic_read(v);
|
|
for (;;) {
|
|
dec = c - 1;
|
|
if (__builtin_expect(!!(dec < 0), 0))
|
|
break;
|
|
old = atomic_cmpxchg((v), c, dec);
|
|
if (__builtin_expect(!!(old == c), 1))
|
|
break;
|
|
c = old;
|
|
}
|
|
return dec;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void atomic_or(int i, atomic_t *v)
|
|
{
|
|
int old;
|
|
int new;
|
|
|
|
do {
|
|
old = atomic_read(v);
|
|
new = old | i;
|
|
} while (atomic_cmpxchg(v, old, new) != old);
|
|
}
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/atomic-long.h" 1
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/atomic-long.h"
|
|
typedef atomic64_t atomic_long_t;
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) long atomic_long_read(atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
return (long)atomic64_read(v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void atomic_long_set(atomic_long_t *l, long i)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
atomic64_set(v, i);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void atomic_long_inc(atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
atomic64_inc(v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void atomic_long_dec(atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
atomic64_dec(v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void atomic_long_add(long i, atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
atomic64_add(i, v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void atomic_long_sub(long i, atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
atomic64_sub(i, v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int atomic_long_sub_and_test(long i, atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
return atomic64_sub_and_test(i, v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int atomic_long_dec_and_test(atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
return atomic64_dec_and_test(v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int atomic_long_inc_and_test(atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
return atomic64_inc_and_test(v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int atomic_long_add_negative(long i, atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
return atomic64_add_negative(i, v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) long atomic_long_add_return(long i, atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
return (long)atomic64_add_return(i, v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) long atomic_long_sub_return(long i, atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
return (long)atomic64_sub_return(i, v);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) long atomic_long_inc_return(atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
return (long)(atomic64_add_return(1, (v)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) long atomic_long_dec_return(atomic_long_t *l)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
return (long)(atomic64_sub_return(1, (v)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) long atomic_long_add_unless(atomic_long_t *l, long a, long u)
|
|
{
|
|
atomic64_t *v = (atomic64_t *)l;
|
|
|
|
return (long)atomic64_add_unless(v, a, u);
|
|
}
|
|
# 128 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/atomic.h" 2
|
|
# 52 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/thread_info.h" 2
|
|
|
|
struct thread_info {
|
|
struct task_struct *task;
|
|
struct exec_domain *exec_domain;
|
|
__u32 flags;
|
|
__u32 status;
|
|
__u32 cpu;
|
|
int saved_preempt_count;
|
|
mm_segment_t addr_limit;
|
|
struct restart_block restart_block;
|
|
void *sysenter_return;
|
|
unsigned int sig_on_uaccess_error:1;
|
|
unsigned int uaccess_err:1;
|
|
};
|
|
# 190 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/thread_info.h"
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(unsigned long) kernel_stack;
|
|
|
|
static inline __attribute__((no_instrument_function)) struct thread_info *current_thread_info(void)
|
|
{
|
|
struct thread_info *ti;
|
|
ti = (void *)(({ typeof(kernel_stack) pfo_ret__; switch (sizeof(kernel_stack)) { case 1: asm("mov" "b ""%%""gs"":" "%" "P1"",%0" : "=q" (pfo_ret__) : "p" (&(kernel_stack))); break; case 2: asm("mov" "w ""%%""gs"":" "%" "P1"",%0" : "=r" (pfo_ret__) : "p" (&(kernel_stack))); break; case 4: asm("mov" "l ""%%""gs"":" "%" "P1"",%0" : "=r" (pfo_ret__) : "p" (&(kernel_stack))); break; case 8: asm("mov" "q ""%%""gs"":" "%" "P1"",%0" : "=r" (pfo_ret__) : "p" (&(kernel_stack))); break; default: __bad_percpu_size(); } pfo_ret__; }) +
|
|
(5*(64/8)) - (((1UL) << 12) << 2));
|
|
return ti;
|
|
}
|
|
# 227 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/thread_info.h"
|
|
static inline __attribute__((no_instrument_function)) void set_restore_sigmask(void)
|
|
{
|
|
struct thread_info *ti = current_thread_info();
|
|
ti->status |= 0x0008;
|
|
({ int __ret_warn_on = !!(!(__builtin_constant_p((2)) ? constant_test_bit((2), ((unsigned long *)&ti->flags)) : variable_test_bit((2), ((unsigned long *)&ti->flags)))); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/thread_info.h", 231); __builtin_expect(!!(__ret_warn_on), 0); });
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void clear_restore_sigmask(void)
|
|
{
|
|
current_thread_info()->status &= ~0x0008;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) bool test_restore_sigmask(void)
|
|
{
|
|
return current_thread_info()->status & 0x0008;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) bool test_and_clear_restore_sigmask(void)
|
|
{
|
|
struct thread_info *ti = current_thread_info();
|
|
if (!(ti->status & 0x0008))
|
|
return false;
|
|
ti->status &= ~0x0008;
|
|
return true;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool is_ia32_task(void)
|
|
{
|
|
|
|
|
|
|
|
|
|
if (current_thread_info()->status & 0x0002)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
extern void arch_task_cache_init(void);
|
|
extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src);
|
|
extern void arch_release_task_struct(struct task_struct *tsk);
|
|
# 55 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/thread_info.h" 2
|
|
# 69 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/thread_info.h"
|
|
static 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__((no_instrument_function)) void clear_ti_thread_flag(struct thread_info *ti, int flag)
|
|
{
|
|
clear_bit(flag, (unsigned long *)&ti->flags);
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) int test_ti_thread_flag(struct thread_info *ti, int flag)
|
|
{
|
|
return (__builtin_constant_p((flag)) ? constant_test_bit((flag), ((unsigned long *)&ti->flags)) : variable_test_bit((flag), ((unsigned long *)&ti->flags)));
|
|
}
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/preempt.h" 2
|
|
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(int) __preempt_count;
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/preempt.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) int preempt_count(void)
|
|
{
|
|
return ({ typeof(__preempt_count) pfo_ret__; switch (sizeof(__preempt_count)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (__preempt_count)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (__preempt_count)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (__preempt_count)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (__preempt_count)); break; default: __bad_percpu_size(); } pfo_ret__; }) & ~0x80000000;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void preempt_count_set(int pc)
|
|
{
|
|
do { typedef typeof((__preempt_count)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (pc); (void)pto_tmp__; } switch (sizeof((__preempt_count))) { case 1: asm("mov" "b %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "qi" ((pto_T__)(pc))); break; case 2: asm("mov" "w %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "ri" ((pto_T__)(pc))); break; case 4: asm("mov" "l %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "ri" ((pto_T__)(pc))); break; case 8: asm("mov" "q %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "re" ((pto_T__)(pc))); break; default: __bad_percpu_size(); } } while (0);
|
|
}
|
|
# 51 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/preempt.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void set_preempt_need_resched(void)
|
|
{
|
|
do { typedef typeof((__preempt_count)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (~0x80000000); (void)pto_tmp__; } switch (sizeof((__preempt_count))) { case 1: asm("and" "b %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "qi" ((pto_T__)(~0x80000000))); break; case 2: asm("and" "w %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "ri" ((pto_T__)(~0x80000000))); break; case 4: asm("and" "l %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "ri" ((pto_T__)(~0x80000000))); break; case 8: asm("and" "q %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "re" ((pto_T__)(~0x80000000))); break; default: __bad_percpu_size(); } } while (0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void clear_preempt_need_resched(void)
|
|
{
|
|
do { typedef typeof((__preempt_count)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (0x80000000); (void)pto_tmp__; } switch (sizeof((__preempt_count))) { case 1: asm("or" "b %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "qi" ((pto_T__)(0x80000000))); break; case 2: asm("or" "w %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "ri" ((pto_T__)(0x80000000))); break; case 4: asm("or" "l %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "ri" ((pto_T__)(0x80000000))); break; case 8: asm("or" "q %1,""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "re" ((pto_T__)(0x80000000))); break; default: __bad_percpu_size(); } } while (0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) bool test_preempt_need_resched(void)
|
|
{
|
|
return !(({ typeof(__preempt_count) pfo_ret__; switch (sizeof(__preempt_count)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (__preempt_count)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (__preempt_count)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (__preempt_count)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (__preempt_count)); break; default: __bad_percpu_size(); } pfo_ret__; }) & 0x80000000);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void __preempt_count_add(int val)
|
|
{
|
|
do { typedef typeof((__preempt_count)) pao_T__; const int pao_ID__ = (__builtin_constant_p(val) && ((val) == 1 || (val) == -1)) ? (int)(val) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (val); (void)pao_tmp__; } switch (sizeof((__preempt_count))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "qi" ((pao_T__)(val))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "ri" ((pao_T__)(val))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "ri" ((pao_T__)(val))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "re" ((pao_T__)(val))); break; default: __bad_percpu_size(); } } while (0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void __preempt_count_sub(int val)
|
|
{
|
|
do { typedef typeof((__preempt_count)) pao_T__; const int pao_ID__ = (__builtin_constant_p(-val) && ((-val) == 1 || (-val) == -1)) ? (int)(-val) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (-val); (void)pao_tmp__; } switch (sizeof((__preempt_count))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "qi" ((pao_T__)(-val))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "ri" ((pao_T__)(-val))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "ri" ((pao_T__)(-val))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((__preempt_count))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((__preempt_count)) : "re" ((pao_T__)(-val))); break; default: __bad_percpu_size(); } } while (0);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) bool __preempt_count_dec_and_test(void)
|
|
{
|
|
do { char c; asm volatile ("decl" " " "%%""gs"":" "%" "0" "; set" "e" " %1" : "+m" (__preempt_count), "=qm" (c) : : "memory"); return c != 0; } while (0);
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) bool should_resched(void)
|
|
{
|
|
return __builtin_expect(!!(!({ typeof(__preempt_count) pfo_ret__; switch (sizeof(__preempt_count)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (__preempt_count)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (__preempt_count)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (__preempt_count)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (__preempt_count)); break; default: __bad_percpu_size(); } pfo_ret__; })), 0);
|
|
}
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/preempt.h" 2
|
|
# 149 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/preempt.h"
|
|
struct preempt_notifier;
|
|
# 165 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/preempt.h"
|
|
struct preempt_ops {
|
|
void (*sched_in)(struct preempt_notifier *notifier, int cpu);
|
|
void (*sched_out)(struct preempt_notifier *notifier,
|
|
struct task_struct *next);
|
|
};
|
|
# 178 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/preempt.h"
|
|
struct preempt_notifier {
|
|
struct hlist_node link;
|
|
struct preempt_ops *ops;
|
|
};
|
|
|
|
void preempt_notifier_register(struct preempt_notifier *notifier);
|
|
void preempt_notifier_unregister(struct preempt_notifier *notifier);
|
|
|
|
static inline __attribute__((no_instrument_function)) void preempt_notifier_init(struct preempt_notifier *notifier,
|
|
struct preempt_ops *ops)
|
|
{
|
|
INIT_HLIST_NODE(¬ifier->link);
|
|
notifier->ops = ops;
|
|
}
|
|
# 51 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bottom_half.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/preempt_mask.h" 1
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bottom_half.h" 2
|
|
|
|
|
|
|
|
|
|
static 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__((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__((no_instrument_function)) void local_bh_enable_ip(unsigned long ip)
|
|
{
|
|
__local_bh_enable_ip(ip, (2 * (1UL << (0 + 8))));
|
|
}
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h" 2
|
|
# 81 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_types.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_types.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/lockdep.h" 1
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/lockdep.h"
|
|
struct task_struct;
|
|
struct lockdep_map;
|
|
|
|
|
|
extern int prove_locking;
|
|
extern int lock_stat;
|
|
# 373 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/lockdep.h"
|
|
static inline __attribute__((no_instrument_function)) void lockdep_off(void)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void lockdep_on(void)
|
|
{
|
|
}
|
|
# 414 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/lockdep.h"
|
|
struct lock_class_key { };
|
|
# 469 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/lockdep.h"
|
|
static inline __attribute__((no_instrument_function)) void print_irqtrace_events(struct task_struct *curr)
|
|
{
|
|
}
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_types.h" 2
|
|
|
|
typedef struct raw_spinlock {
|
|
arch_spinlock_t raw_lock;
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_types.h"
|
|
} raw_spinlock_t;
|
|
# 64 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_types.h"
|
|
typedef struct spinlock {
|
|
union {
|
|
struct raw_spinlock rlock;
|
|
# 75 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_types.h"
|
|
};
|
|
} spinlock_t;
|
|
# 86 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_types.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwlock_types.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwlock_types.h"
|
|
typedef struct {
|
|
arch_rwlock_t raw_lock;
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwlock_types.h"
|
|
} rwlock_t;
|
|
# 87 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_types.h" 2
|
|
# 82 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jump_label.h" 1
|
|
# 52 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jump_label.h"
|
|
extern bool static_key_initialized;
|
|
# 72 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) int static_key_count(struct static_key *key)
|
|
{
|
|
return atomic_read(&key->enabled);
|
|
}
|
|
# 146 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jump_label.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void jump_label_init(void)
|
|
{
|
|
static_key_initialized = true;
|
|
}
|
|
|
|
static 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__((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__((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("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jump_label.h", 167, "%s used before call to jump_label_init", __func__); __builtin_expect(!!(__ret_warn_on), 0); });
|
|
atomic_inc(&key->enabled);
|
|
}
|
|
|
|
static 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("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jump_label.h", 173, "%s used before call to jump_label_init", __func__); __builtin_expect(!!(__ret_warn_on), 0); });
|
|
atomic_dec(&key->enabled);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int jump_label_text_reserved(void *start, void *end)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void jump_label_lock(void) {}
|
|
static inline __attribute__((no_instrument_function)) void jump_label_unlock(void) {}
|
|
|
|
static inline __attribute__((no_instrument_function)) int jump_label_apply_nops(struct module *mod)
|
|
{
|
|
return 0;
|
|
}
|
|
# 200 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jump_label.h"
|
|
static inline __attribute__((no_instrument_function)) bool static_key_enabled(struct static_key *key)
|
|
{
|
|
return static_key_count(key) > 0;
|
|
}
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock.h" 2
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock.h"
|
|
extern struct static_key paravirt_ticketlocks_enabled;
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) bool static_key_false(struct static_key *key);
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __ticket_enter_slowpath(arch_spinlock_t *lock)
|
|
{
|
|
set_bit(0, (volatile unsigned long *)&lock->tickets.head);
|
|
}
|
|
# 63 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock.h"
|
|
static inline __attribute__((no_instrument_function)) int __tickets_equal(__ticket_t one, __ticket_t two)
|
|
{
|
|
return !((one ^ two) & ~((__ticket_t)1));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
|
|
__ticket_t head)
|
|
{
|
|
if (head & ((__ticket_t)1)) {
|
|
arch_spinlock_t old, new;
|
|
|
|
old.tickets.head = head;
|
|
new.tickets.head = head & ~((__ticket_t)1);
|
|
old.tickets.tail = new.tickets.head + ((__ticket_t)2);
|
|
new.tickets.tail = old.tickets.tail;
|
|
|
|
|
|
({ __typeof__(*((&lock->head_tail))) __ret; __typeof__(*((&lock->head_tail))) __old = ((old.head_tail)); __typeof__(*((&lock->head_tail))) __new = ((new.head_tail)); switch ((sizeof(*(&lock->head_tail)))) { case 1: { volatile u8 *__ptr = (volatile u8 *)((&lock->head_tail)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgb %2,%1" : "=a" (__ret), "+m" (*__ptr) : "q" (__new), "0" (__old) : "memory"); break; } case 2: { volatile u16 *__ptr = (volatile u16 *)((&lock->head_tail)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgw %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } case 4: { volatile u32 *__ptr = (volatile u32 *)((&lock->head_tail)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgl %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } case 8: { volatile u64 *__ptr = (volatile u64 *)((&lock->head_tail)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgq %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } default: __cmpxchg_wrong_size(); } __ret; });
|
|
}
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) int arch_spin_value_unlocked(arch_spinlock_t lock)
|
|
{
|
|
return __tickets_equal(lock.tickets.head, lock.tickets.tail);
|
|
}
|
|
# 102 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void arch_spin_lock(arch_spinlock_t *lock)
|
|
{
|
|
register struct __raw_tickets inc = { .tail = ((__ticket_t)2) };
|
|
|
|
inc = ({ __typeof__ (*(((&lock->tickets)))) __ret = (((inc))); switch (sizeof(*(((&lock->tickets))))) { case 1: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "b %b0, %1\n" : "+q" (__ret), "+m" (*(((&lock->tickets)))) : : "memory", "cc"); break; case 2: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "w %w0, %1\n" : "+r" (__ret), "+m" (*(((&lock->tickets)))) : : "memory", "cc"); break; case 4: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "l %0, %1\n" : "+r" (__ret), "+m" (*(((&lock->tickets)))) : : "memory", "cc"); break; case 8: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "q %q0, %1\n" : "+r" (__ret), "+m" (*(((&lock->tickets)))) : : "memory", "cc"); break; default: __xadd_wrong_size(); } __ret; });
|
|
if (__builtin_expect(!!(inc.head == inc.tail), 1))
|
|
goto out;
|
|
|
|
for (;;) {
|
|
unsigned count = (1 << 15);
|
|
|
|
do {
|
|
inc.head = ({ union { typeof(lock->tickets.head) __val; char __c[1]; } __u; __read_once_size(&(lock->tickets.head), __u.__c, sizeof(lock->tickets.head)); __u.__val; });
|
|
if (__tickets_equal(inc.head, inc.tail))
|
|
goto clear_slowpath;
|
|
cpu_relax();
|
|
} while (--count);
|
|
__ticket_lock_spinning(lock, inc.tail);
|
|
}
|
|
clear_slowpath:
|
|
__ticket_check_and_clear_slowpath(lock, inc.head);
|
|
out:
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) int arch_spin_trylock(arch_spinlock_t *lock)
|
|
{
|
|
arch_spinlock_t old, new;
|
|
|
|
old.tickets = ({ union { typeof(lock->tickets) __val; char __c[1]; } __u; __read_once_size(&(lock->tickets), __u.__c, sizeof(lock->tickets)); __u.__val; });
|
|
if (!__tickets_equal(old.tickets.head, old.tickets.tail))
|
|
return 0;
|
|
|
|
new.head_tail = old.head_tail + (((__ticket_t)2) << (sizeof(__ticket_t) * 8));
|
|
new.head_tail &= ~((__ticket_t)1);
|
|
|
|
|
|
return ({ __typeof__(*((&lock->head_tail))) __ret; __typeof__(*((&lock->head_tail))) __old = ((old.head_tail)); __typeof__(*((&lock->head_tail))) __new = ((new.head_tail)); switch ((sizeof(*(&lock->head_tail)))) { case 1: { volatile u8 *__ptr = (volatile u8 *)((&lock->head_tail)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgb %2,%1" : "=a" (__ret), "+m" (*__ptr) : "q" (__new), "0" (__old) : "memory"); break; } case 2: { volatile u16 *__ptr = (volatile u16 *)((&lock->head_tail)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgw %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } case 4: { volatile u32 *__ptr = (volatile u32 *)((&lock->head_tail)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgl %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } case 8: { volatile u64 *__ptr = (volatile u64 *)((&lock->head_tail)); asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "cmpxchgq %2,%1" : "=a" (__ret), "+m" (*__ptr) : "r" (__new), "0" (__old) : "memory"); break; } default: __cmpxchg_wrong_size(); } __ret; }) == old.head_tail;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void arch_spin_unlock(arch_spinlock_t *lock)
|
|
{
|
|
if (((__ticket_t)1) &&
|
|
static_key_false(¶virt_ticketlocks_enabled)) {
|
|
__ticket_t head;
|
|
|
|
do { bool __cond = !(!(((__ticket_t)256) != 256)); extern void __compiletime_assert_148(void) __attribute__((error("BUILD_BUG_ON failed: " "((__ticket_t)NR_CPUS) != NR_CPUS"))); if (__cond) __compiletime_assert_148(); do { } while (0); } while (0);
|
|
|
|
head = ({ __typeof__ (*(((&lock->tickets.head)))) __ret = (((((__ticket_t)2)))); switch (sizeof(*(((&lock->tickets.head))))) { case 1: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "b %b0, %1\n" : "+q" (__ret), "+m" (*(((&lock->tickets.head)))) : : "memory", "cc"); break; case 2: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "w %w0, %1\n" : "+r" (__ret), "+m" (*(((&lock->tickets.head)))) : : "memory", "cc"); break; case 4: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "l %0, %1\n" : "+r" (__ret), "+m" (*(((&lock->tickets.head)))) : : "memory", "cc"); break; case 8: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "q %q0, %1\n" : "+r" (__ret), "+m" (*(((&lock->tickets.head)))) : : "memory", "cc"); break; default: __xadd_wrong_size(); } __ret; });
|
|
|
|
if (__builtin_expect(!!(head & ((__ticket_t)1)), 0)) {
|
|
head &= ~((__ticket_t)1);
|
|
__ticket_unlock_kick(lock, (head + ((__ticket_t)2)));
|
|
}
|
|
} else
|
|
({ __typeof__ (*(&lock->tickets.head)) __ret = (((__ticket_t)2)); switch (sizeof(*(&lock->tickets.head))) { case 1: asm volatile ( "addb %b1, %0\n" : "+m" (*(&lock->tickets.head)) : "qi" (((__ticket_t)2)) : "memory", "cc"); break; case 2: asm volatile ( "addw %w1, %0\n" : "+m" (*(&lock->tickets.head)) : "ri" (((__ticket_t)2)) : "memory", "cc"); break; case 4: asm volatile ( "addl %1, %0\n" : "+m" (*(&lock->tickets.head)) : "ri" (((__ticket_t)2)) : "memory", "cc"); break; case 8: asm volatile ( "addq %1, %0\n" : "+m" (*(&lock->tickets.head)) : "ri" (((__ticket_t)2)) : "memory", "cc"); break; default: __add_wrong_size(); } __ret; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int arch_spin_is_locked(arch_spinlock_t *lock)
|
|
{
|
|
struct __raw_tickets tmp = ({ union { typeof(lock->tickets) __val; char __c[1]; } __u; __read_once_size(&(lock->tickets), __u.__c, sizeof(lock->tickets)); __u.__val; });
|
|
|
|
return !__tickets_equal(tmp.tail, tmp.head);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int arch_spin_is_contended(arch_spinlock_t *lock)
|
|
{
|
|
struct __raw_tickets tmp = ({ union { typeof(lock->tickets) __val; char __c[1]; } __u; __read_once_size(&(lock->tickets), __u.__c, sizeof(lock->tickets)); __u.__val; });
|
|
|
|
tmp.head &= ~((__ticket_t)1);
|
|
return (__ticket_t)(tmp.tail - tmp.head) > ((__ticket_t)2);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void arch_spin_lock_flags(arch_spinlock_t *lock,
|
|
unsigned long flags)
|
|
{
|
|
arch_spin_lock(lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_spin_unlock_wait(arch_spinlock_t *lock)
|
|
{
|
|
__ticket_t head = ({ union { typeof(lock->tickets.head) __val; char __c[1]; } __u; __read_once_size(&(lock->tickets.head), __u.__c, sizeof(lock->tickets.head)); __u.__val; });
|
|
|
|
for (;;) {
|
|
struct __raw_tickets tmp = ({ union { typeof(lock->tickets) __val; char __c[1]; } __u; __read_once_size(&(lock->tickets), __u.__c, sizeof(lock->tickets)); __u.__val; });
|
|
|
|
|
|
|
|
|
|
if (__tickets_equal(tmp.head, tmp.tail) ||
|
|
!__tickets_equal(tmp.head, head))
|
|
break;
|
|
|
|
cpu_relax();
|
|
}
|
|
}
|
|
# 214 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/qrwlock.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void queue_write_unlock(struct qrwlock *lock)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
(*({ __attribute__((unused)) typeof(*(u8 *)&lock->cnts) __var = ( typeof(*(u8 *)&lock->cnts)) 0; (volatile typeof(*(u8 *)&lock->cnts) *)&(*(u8 *)&lock->cnts); })) = 0;
|
|
}
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/qrwlock.h" 1
|
|
# 39 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/qrwlock.h"
|
|
extern void queue_read_lock_slowpath(struct qrwlock *lock);
|
|
extern void queue_write_lock_slowpath(struct qrwlock *lock);
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int queue_read_can_lock(struct qrwlock *lock)
|
|
{
|
|
return !(atomic_read(&lock->cnts) & 0xff);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int queue_write_can_lock(struct qrwlock *lock)
|
|
{
|
|
return !atomic_read(&lock->cnts);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int queue_read_trylock(struct qrwlock *lock)
|
|
{
|
|
u32 cnts;
|
|
|
|
cnts = atomic_read(&lock->cnts);
|
|
if (__builtin_expect(!!(!(cnts & 0xff)), 1)) {
|
|
cnts = (u32)atomic_add_return((1U << 8), &lock->cnts);
|
|
if (__builtin_expect(!!(!(cnts & 0xff)), 1))
|
|
return 1;
|
|
atomic_sub((1U << 8), &lock->cnts);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int queue_write_trylock(struct qrwlock *lock)
|
|
{
|
|
u32 cnts;
|
|
|
|
cnts = atomic_read(&lock->cnts);
|
|
if (__builtin_expect(!!(cnts), 0))
|
|
return 0;
|
|
|
|
return __builtin_expect(!!(atomic_cmpxchg(&lock->cnts, cnts, cnts | 0xff) == cnts), 1)
|
|
;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void queue_read_lock(struct qrwlock *lock)
|
|
{
|
|
u32 cnts;
|
|
|
|
cnts = atomic_add_return((1U << 8), &lock->cnts);
|
|
if (__builtin_expect(!!(!(cnts & 0xff)), 1))
|
|
return;
|
|
|
|
|
|
queue_read_lock_slowpath(lock);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void queue_write_lock(struct qrwlock *lock)
|
|
{
|
|
|
|
if (atomic_cmpxchg(&lock->cnts, 0, 0xff) == 0)
|
|
return;
|
|
|
|
queue_write_lock_slowpath(lock);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void queue_read_unlock(struct qrwlock *lock)
|
|
{
|
|
|
|
|
|
|
|
__asm__ __volatile__("": : :"memory");
|
|
atomic_sub((1U << 8), &lock->cnts);
|
|
}
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/qrwlock.h" 2
|
|
# 215 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/spinlock.h" 2
|
|
# 88 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h" 2
|
|
# 155 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h"
|
|
static 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__((no_instrument_function)) void
|
|
do_raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long *flags)
|
|
{
|
|
(void)0;
|
|
arch_spin_lock_flags(&lock->raw_lock, *flags);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int do_raw_spin_trylock(raw_spinlock_t *lock)
|
|
{
|
|
return arch_spin_trylock(&(lock)->raw_lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void do_raw_spin_unlock(raw_spinlock_t *lock)
|
|
{
|
|
arch_spin_unlock(&lock->raw_lock);
|
|
(void)0;
|
|
}
|
|
# 281 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwlock.h" 1
|
|
# 282 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_api_smp.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_api_smp.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_api_smp.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_api_smp.h"
|
|
do_raw_spin_lock_flags(lock, &flags);
|
|
|
|
return flags;
|
|
}
|
|
|
|
static 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__((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__((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__((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__((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__((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__((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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwlock_api_smp.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwlock_api_smp.h"
|
|
static inline __attribute__((no_instrument_function)) int __raw_read_trylock(rwlock_t *lock)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
if (queue_read_trylock(&(lock)->raw_lock)) {
|
|
do { } while (0);
|
|
return 1;
|
|
}
|
|
__asm__ __volatile__("": : :"memory");
|
|
return 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int __raw_write_trylock(rwlock_t *lock)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
if (queue_write_trylock(&(lock)->raw_lock)) {
|
|
do { } while (0);
|
|
return 1;
|
|
}
|
|
__asm__ __volatile__("": : :"memory");
|
|
return 0;
|
|
}
|
|
# 146 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwlock_api_smp.h"
|
|
static inline __attribute__((no_instrument_function)) void __raw_read_lock(rwlock_t *lock)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
do { } while (0);
|
|
do {(void)0; queue_read_lock(&(lock)->raw_lock); } while (0);
|
|
}
|
|
|
|
static 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; queue_read_lock(&((lock))->raw_lock); } while (0)
|
|
;
|
|
return flags;
|
|
}
|
|
|
|
static 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; queue_read_lock(&(lock)->raw_lock); } while (0);
|
|
}
|
|
|
|
static 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; queue_read_lock(&(lock)->raw_lock); } while (0);
|
|
}
|
|
|
|
static 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; queue_write_lock(&((lock))->raw_lock); } while (0)
|
|
;
|
|
return flags;
|
|
}
|
|
|
|
static 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; queue_write_lock(&(lock)->raw_lock); } while (0);
|
|
}
|
|
|
|
static 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; queue_write_lock(&(lock)->raw_lock); } while (0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __raw_write_lock(rwlock_t *lock)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
do { } while (0);
|
|
do {(void)0; queue_write_lock(&(lock)->raw_lock); } while (0);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __raw_write_unlock(rwlock_t *lock)
|
|
{
|
|
do { } while (0);
|
|
do {queue_write_unlock(&(lock)->raw_lock); (void)0; } while (0);
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __raw_read_unlock(rwlock_t *lock)
|
|
{
|
|
do { } while (0);
|
|
do {queue_read_unlock(&(lock)->raw_lock); (void)0; } while (0);
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
__raw_read_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
|
|
{
|
|
do { } while (0);
|
|
do {queue_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__((no_instrument_function)) void __raw_read_unlock_irq(rwlock_t *lock)
|
|
{
|
|
do { } while (0);
|
|
do {queue_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__((no_instrument_function)) void __raw_read_unlock_bh(rwlock_t *lock)
|
|
{
|
|
do { } while (0);
|
|
do {queue_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__((no_instrument_function)) void __raw_write_unlock_irqrestore(rwlock_t *lock,
|
|
unsigned long flags)
|
|
{
|
|
do { } while (0);
|
|
do {queue_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__((no_instrument_function)) void __raw_write_unlock_irq(rwlock_t *lock)
|
|
{
|
|
do { } while (0);
|
|
do {queue_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__((no_instrument_function)) void __raw_write_unlock_bh(rwlock_t *lock)
|
|
{
|
|
do { } while (0);
|
|
do {queue_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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock_api_smp.h" 2
|
|
# 288 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h" 2
|
|
# 296 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h"
|
|
static inline __attribute__((no_instrument_function)) raw_spinlock_t *spinlock_check(spinlock_t *lock)
|
|
{
|
|
return &lock->rlock;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void spin_lock(spinlock_t *lock)
|
|
{
|
|
_raw_spin_lock(&lock->rlock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void spin_lock_bh(spinlock_t *lock)
|
|
{
|
|
_raw_spin_lock_bh(&lock->rlock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int spin_trylock(spinlock_t *lock)
|
|
{
|
|
return (_raw_spin_trylock(&lock->rlock));
|
|
}
|
|
# 332 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h"
|
|
static inline __attribute__((no_instrument_function)) void spin_lock_irq(spinlock_t *lock)
|
|
{
|
|
_raw_spin_lock_irq(&lock->rlock);
|
|
}
|
|
# 347 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h"
|
|
static inline __attribute__((no_instrument_function)) void spin_unlock(spinlock_t *lock)
|
|
{
|
|
_raw_spin_unlock(&lock->rlock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void spin_unlock_bh(spinlock_t *lock)
|
|
{
|
|
_raw_spin_unlock_bh(&lock->rlock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void spin_unlock_irq(spinlock_t *lock)
|
|
{
|
|
__raw_spin_unlock_irq(&lock->rlock);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) int spin_trylock_bh(spinlock_t *lock)
|
|
{
|
|
return (_raw_spin_trylock_bh(&lock->rlock));
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void spin_unlock_wait(spinlock_t *lock)
|
|
{
|
|
arch_spin_unlock_wait(&(&lock->rlock)->raw_lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int spin_is_locked(spinlock_t *lock)
|
|
{
|
|
return arch_spin_is_locked(&(&lock->rlock)->raw_lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int spin_is_contended(spinlock_t *lock)
|
|
{
|
|
return arch_spin_is_contended(&(&lock->rlock)->raw_lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int spin_can_lock(spinlock_t *lock)
|
|
{
|
|
return (!arch_spin_is_locked(&(&lock->rlock)->raw_lock));
|
|
}
|
|
# 417 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/spinlock.h"
|
|
extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h" 2
|
|
# 46 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
typedef struct seqcount {
|
|
unsigned sequence;
|
|
|
|
|
|
|
|
} seqcount_t;
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned __read_seqcount_begin(const seqcount_t *s)
|
|
{
|
|
unsigned ret;
|
|
|
|
repeat:
|
|
ret = (*({ __attribute__((unused)) typeof(s->sequence) __var = ( typeof(s->sequence)) 0; (volatile typeof(s->sequence) *)&(s->sequence); }));
|
|
if (__builtin_expect(!!(ret & 1), 0)) {
|
|
cpu_relax();
|
|
goto repeat;
|
|
}
|
|
return ret;
|
|
}
|
|
# 128 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned raw_read_seqcount(const seqcount_t *s)
|
|
{
|
|
unsigned ret = (*({ __attribute__((unused)) typeof(s->sequence) __var = ( typeof(s->sequence)) 0; (volatile typeof(s->sequence) *)&(s->sequence); }));
|
|
__asm__ __volatile__("": : :"memory");
|
|
return ret;
|
|
}
|
|
# 144 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned read_seqcount_begin(const seqcount_t *s)
|
|
{
|
|
;
|
|
return raw_read_seqcount_begin(s);
|
|
}
|
|
# 180 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned raw_seqcount_begin(const seqcount_t *s)
|
|
{
|
|
unsigned ret = (*({ __attribute__((unused)) typeof(s->sequence) __var = ( typeof(s->sequence)) 0; (volatile typeof(s->sequence) *)&(s->sequence); }));
|
|
__asm__ __volatile__("": : :"memory");
|
|
return ret & ~1;
|
|
}
|
|
# 201 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
static inline __attribute__((no_instrument_function)) int __read_seqcount_retry(const seqcount_t *s, unsigned start)
|
|
{
|
|
return __builtin_expect(!!(s->sequence != start), 0);
|
|
}
|
|
# 216 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
static 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__((no_instrument_function)) void raw_write_seqcount_begin(seqcount_t *s)
|
|
{
|
|
s->sequence++;
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void raw_write_seqcount_end(seqcount_t *s)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
s->sequence++;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void raw_write_seqcount_latch(seqcount_t *s)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
s->sequence++;
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) void write_seqcount_begin(seqcount_t *s)
|
|
{
|
|
write_seqcount_begin_nested(s, 0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_seqcount_end(seqcount_t *s)
|
|
{
|
|
do { } while (0);
|
|
raw_write_seqcount_end(s);
|
|
}
|
|
# 275 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned read_seqbegin(const seqlock_t *sl)
|
|
{
|
|
return read_seqcount_begin(&sl->seqcount);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned read_seqretry(const seqlock_t *sl, unsigned start)
|
|
{
|
|
return read_seqcount_retry(&sl->seqcount, start);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_seqlock(seqlock_t *sl)
|
|
{
|
|
spin_lock(&sl->lock);
|
|
write_seqcount_begin(&sl->seqcount);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void write_sequnlock(seqlock_t *sl)
|
|
{
|
|
write_seqcount_end(&sl->seqcount);
|
|
spin_unlock(&sl->lock);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void write_sequnlock_bh(seqlock_t *sl)
|
|
{
|
|
write_seqcount_end(&sl->seqcount);
|
|
spin_unlock_bh(&sl->lock);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void write_sequnlock_irq(seqlock_t *sl)
|
|
{
|
|
write_seqcount_end(&sl->seqcount);
|
|
spin_unlock_irq(&sl->lock);
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) void read_seqlock_excl(seqlock_t *sl)
|
|
{
|
|
spin_lock(&sl->lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void read_sequnlock_excl(seqlock_t *sl)
|
|
{
|
|
spin_unlock(&sl->lock);
|
|
}
|
|
# 403 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seqlock.h"
|
|
static 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__((no_instrument_function)) int need_seqretry(seqlock_t *lock, int seq)
|
|
{
|
|
return !(seq & 1) && read_seqretry(lock, seq);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void done_seqretry(seqlock_t *lock, int seq)
|
|
{
|
|
if (seq & 1)
|
|
read_sequnlock_excl(lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void read_seqlock_excl_bh(seqlock_t *sl)
|
|
{
|
|
spin_lock_bh(&sl->lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void read_sequnlock_excl_bh(seqlock_t *sl)
|
|
{
|
|
spin_unlock_bh(&sl->lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void read_seqlock_excl_irq(seqlock_t *sl)
|
|
{
|
|
spin_lock_irq(&sl->lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void read_sequnlock_excl_irq(seqlock_t *sl)
|
|
{
|
|
spin_unlock_irq(&sl->lock);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void
|
|
read_sequnlock_excl_irqrestore(seqlock_t *sl, unsigned long flags)
|
|
{
|
|
spin_unlock_irqrestore(&sl->lock, flags);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void
|
|
done_seqretry_irqrestore(seqlock_t *lock, int seq, unsigned long flags)
|
|
{
|
|
if (seq & 1)
|
|
read_sequnlock_excl_irqrestore(lock, flags);
|
|
}
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/time.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/time64.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/time.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/time64.h" 2
|
|
|
|
typedef __s64 time64_t;
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/time64.h"
|
|
static inline __attribute__((no_instrument_function)) struct timespec timespec64_to_timespec(const struct timespec ts64)
|
|
{
|
|
return ts64;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct timespec timespec_to_timespec64(const struct timespec ts)
|
|
{
|
|
return ts;
|
|
}
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/time.h" 2
|
|
|
|
extern struct timezone sys_tz;
|
|
|
|
|
|
|
|
static 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__((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__((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 time64_t mktime64(const unsigned int year, const unsigned int mon,
|
|
const unsigned int day, const unsigned int hour,
|
|
const unsigned int min, const unsigned int sec);
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) 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)
|
|
{
|
|
return mktime64(year, mon, day, hour, min, 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__((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__((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__((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__((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__((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);
|
|
# 144 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 191 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/time.h"
|
|
static inline __attribute__((no_instrument_function)) s64 timespec_to_ns(const struct timespec *ts)
|
|
{
|
|
return ((s64) ts->tv_sec * 1000000000L) + ts->tv_nsec;
|
|
}
|
|
# 203 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/time.h"
|
|
static 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);
|
|
# 233 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/time.h"
|
|
static 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;
|
|
}
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/signal.h" 2
|
|
|
|
|
|
|
|
struct siginfo;
|
|
# 93 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/signal.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/signal-defs.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
# 94 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/signal.h" 2
|
|
# 127 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/signal.h"
|
|
typedef struct sigaltstack {
|
|
void *ss_sp;
|
|
int ss_flags;
|
|
size_t ss_size;
|
|
} stack_t;
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/signal.h" 2
|
|
|
|
extern void do_notify_resume(struct pt_regs *, void *, __u32);
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/signal.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/siginfo.h" 1
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/siginfo.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/siginfo.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/siginfo.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef union sigval {
|
|
int sival_int;
|
|
void *sival_ptr;
|
|
} sigval_t;
|
|
# 48 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/siginfo.h"
|
|
typedef struct siginfo {
|
|
int si_signo;
|
|
int si_errno;
|
|
int si_code;
|
|
|
|
union {
|
|
int _pad[((128 - (4 * sizeof(int))) / sizeof(int))];
|
|
|
|
|
|
struct {
|
|
__kernel_pid_t _pid;
|
|
__kernel_uid32_t _uid;
|
|
} _kill;
|
|
|
|
|
|
struct {
|
|
__kernel_timer_t _tid;
|
|
int _overrun;
|
|
char _pad[sizeof( __kernel_uid32_t) - sizeof(int)];
|
|
sigval_t _sigval;
|
|
int _sys_private;
|
|
} _timer;
|
|
|
|
|
|
struct {
|
|
__kernel_pid_t _pid;
|
|
__kernel_uid32_t _uid;
|
|
sigval_t _sigval;
|
|
} _rt;
|
|
|
|
|
|
struct {
|
|
__kernel_pid_t _pid;
|
|
__kernel_uid32_t _uid;
|
|
int _status;
|
|
__kernel_clock_t _utime;
|
|
__kernel_clock_t _stime;
|
|
} _sigchld;
|
|
|
|
|
|
struct {
|
|
void *_addr;
|
|
|
|
|
|
|
|
short _addr_lsb;
|
|
struct {
|
|
void *_lower;
|
|
void *_upper;
|
|
} _addr_bnd;
|
|
} _sigfault;
|
|
|
|
|
|
struct {
|
|
long _band;
|
|
int _fd;
|
|
} _sigpoll;
|
|
|
|
|
|
struct {
|
|
void *_call_addr;
|
|
int _syscall;
|
|
unsigned int _arch;
|
|
} _sigsys;
|
|
} _sifields;
|
|
} siginfo_t;
|
|
# 285 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/siginfo.h"
|
|
typedef struct sigevent {
|
|
sigval_t sigev_value;
|
|
int sigev_signo;
|
|
int sigev_notify;
|
|
union {
|
|
int _pad[((64 - (sizeof(int) * 2 + sizeof(sigval_t))) / sizeof(int))];
|
|
int _tid;
|
|
|
|
struct {
|
|
void (*_function)(sigval_t);
|
|
void *_attribute;
|
|
} _sigev_thread;
|
|
} _sigev_un;
|
|
} sigevent_t;
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/siginfo.h" 2
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/siginfo.h"
|
|
struct siginfo;
|
|
void do_schedule_next_timer(struct siginfo *info);
|
|
|
|
|
|
|
|
|
|
|
|
static 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, (4 * sizeof(int)) + sizeof(from->_sifields._sigchld));
|
|
}
|
|
|
|
|
|
|
|
extern int copy_siginfo_to_user(struct siginfo *to, const struct siginfo *from);
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/siginfo.h" 2
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/signal.h" 2
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/signal.h"
|
|
static inline __attribute__((no_instrument_function)) void sigaddset(sigset_t *set, int _sig)
|
|
{
|
|
unsigned long sig = _sig - 1;
|
|
if ((64 / 64) == 1)
|
|
set->sig[0] |= 1UL << sig;
|
|
else
|
|
set->sig[sig / 64] |= 1UL << (sig % 64);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void sigdelset(sigset_t *set, int _sig)
|
|
{
|
|
unsigned long sig = _sig - 1;
|
|
if ((64 / 64) == 1)
|
|
set->sig[0] &= ~(1UL << sig);
|
|
else
|
|
set->sig[sig / 64] &= ~(1UL << (sig % 64));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int sigismember(sigset_t *set, int _sig)
|
|
{
|
|
unsigned long sig = _sig - 1;
|
|
if ((64 / 64) == 1)
|
|
return 1 & (set->sig[0] >> sig);
|
|
else
|
|
return 1 & (set->sig[sig / 64] >> (sig % 64));
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int sigisemptyset(sigset_t *set)
|
|
{
|
|
switch ((64 / 64)) {
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/signal.h"
|
|
static 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 ((64 / 64)) { 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__((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 ((64 / 64)) { 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__((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 ((64 / 64)) { 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/signal.h"
|
|
static inline __attribute__((no_instrument_function)) void signotset(sigset_t *set) { switch ((64 / 64)) { 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__((no_instrument_function)) void sigemptyset(sigset_t *set)
|
|
{
|
|
switch ((64 / 64)) {
|
|
default:
|
|
memset(set, 0, sizeof(sigset_t));
|
|
break;
|
|
case 2: set->sig[1] = 0;
|
|
case 1: set->sig[0] = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void sigfillset(sigset_t *set)
|
|
{
|
|
switch ((64 / 64)) {
|
|
default:
|
|
memset(set, -1, sizeof(sigset_t));
|
|
break;
|
|
case 2: set->sig[1] = -1;
|
|
case 1: set->sig[0] = -1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void sigaddsetmask(sigset_t *set, unsigned long mask)
|
|
{
|
|
set->sig[0] |= mask;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void sigdelsetmask(sigset_t *set, unsigned long mask)
|
|
{
|
|
set->sig[0] &= ~mask;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int sigtestsetmask(sigset_t *set, unsigned long mask)
|
|
{
|
|
return (set->sig[0] & mask) != 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void siginitset(sigset_t *set, unsigned long mask)
|
|
{
|
|
set->sig[0] = mask;
|
|
switch ((64 / 64)) {
|
|
default:
|
|
memset(&set->sig[1], 0, sizeof(long)*((64 / 64)-1));
|
|
break;
|
|
case 2: set->sig[1] = 0;
|
|
case 1: ;
|
|
}
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void siginitsetinv(sigset_t *set, unsigned long mask)
|
|
{
|
|
set->sig[0] = ~mask;
|
|
switch ((64 / 64)) {
|
|
default:
|
|
memset(&set->sig[1], -1, sizeof(long)*((64 / 64)-1));
|
|
break;
|
|
case 2: set->sig[1] = -1;
|
|
case 1: ;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) int valid_signal(unsigned long sig)
|
|
{
|
|
return sig <= 64 ? 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;
|
|
|
|
struct sigaction {
|
|
|
|
__sighandler_t sa_handler;
|
|
unsigned long sa_flags;
|
|
|
|
|
|
|
|
|
|
|
|
__sigrestore_t sa_restorer;
|
|
|
|
sigset_t sa_mask;
|
|
};
|
|
|
|
struct k_sigaction {
|
|
struct sigaction sa;
|
|
|
|
|
|
|
|
};
|
|
# 273 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) void allow_signal(int sig)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
kernel_sigaction(sig, ( __sighandler_t)2);
|
|
}
|
|
|
|
static 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);
|
|
# 426 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/signal.h"
|
|
void signals_init(void);
|
|
|
|
int restore_altstack(const stack_t *);
|
|
int __save_altstack(stack_t *, unsigned long);
|
|
# 440 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/signal.h"
|
|
struct seq_file;
|
|
extern void render_sigset_t(struct seq_file *, const char *, sigset_t *);
|
|
# 74 "source/include/linux/syscalls.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sem.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h" 1
|
|
# 43 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/completion.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/completion.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/wait.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h"
|
|
extern void __init_waitqueue_head(wait_queue_head_t *q, const char *name, struct lock_class_key *);
|
|
# 90 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h"
|
|
static 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__((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__((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__((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__((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__((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__((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__((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);
|
|
# 896 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 935 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 *);
|
|
# 956 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h"
|
|
static inline __attribute__((no_instrument_function)) int
|
|
wait_on_bit(void *word, int bit, unsigned mode)
|
|
{
|
|
do { _cond_resched(); } while (0);
|
|
if (!(__builtin_constant_p((bit)) ? constant_test_bit((bit), (word)) : variable_test_bit((bit), (word))))
|
|
return 0;
|
|
return out_of_line_wait_on_bit(word, bit,
|
|
bit_wait,
|
|
mode);
|
|
}
|
|
# 981 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h"
|
|
static inline __attribute__((no_instrument_function)) int
|
|
wait_on_bit_io(void *word, int bit, unsigned mode)
|
|
{
|
|
do { _cond_resched(); } while (0);
|
|
if (!(__builtin_constant_p((bit)) ? constant_test_bit((bit), (word)) : variable_test_bit((bit), (word))))
|
|
return 0;
|
|
return out_of_line_wait_on_bit(word, bit,
|
|
bit_wait_io,
|
|
mode);
|
|
}
|
|
# 1008 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h"
|
|
static inline __attribute__((no_instrument_function)) int
|
|
wait_on_bit_action(void *word, int bit, wait_bit_action_f *action, unsigned mode)
|
|
{
|
|
do { _cond_resched(); } while (0);
|
|
if (!(__builtin_constant_p((bit)) ? constant_test_bit((bit), (word)) : variable_test_bit((bit), (word))))
|
|
return 0;
|
|
return out_of_line_wait_on_bit(word, bit, action, mode);
|
|
}
|
|
# 1036 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h"
|
|
static inline __attribute__((no_instrument_function)) int
|
|
wait_on_bit_lock(void *word, int bit, unsigned mode)
|
|
{
|
|
do { _cond_resched(); } while (0);
|
|
if (!test_and_set_bit(bit, word))
|
|
return 0;
|
|
return out_of_line_wait_on_bit_lock(word, bit, bit_wait, mode);
|
|
}
|
|
# 1060 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h"
|
|
static inline __attribute__((no_instrument_function)) int
|
|
wait_on_bit_lock_io(void *word, int bit, unsigned mode)
|
|
{
|
|
do { _cond_resched(); } while (0);
|
|
if (!test_and_set_bit(bit, word))
|
|
return 0;
|
|
return out_of_line_wait_on_bit_lock(word, bit, bit_wait_io, mode);
|
|
}
|
|
# 1086 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h"
|
|
static inline __attribute__((no_instrument_function)) int
|
|
wait_on_bit_lock_action(void *word, int bit, wait_bit_action_f *action, unsigned mode)
|
|
{
|
|
do { _cond_resched(); } while (0);
|
|
if (!test_and_set_bit(bit, word))
|
|
return 0;
|
|
return out_of_line_wait_on_bit_lock(word, bit, action, mode);
|
|
}
|
|
# 1105 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/wait.h"
|
|
static inline __attribute__((no_instrument_function))
|
|
int wait_on_atomic_t(atomic_t *val, int (*action)(atomic_t *), unsigned mode)
|
|
{
|
|
do { _cond_resched(); } while (0);
|
|
if (atomic_read(val) == 0)
|
|
return 0;
|
|
return out_of_line_wait_on_atomic_t(val, action, mode);
|
|
}
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/completion.h" 2
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/completion.h"
|
|
struct completion {
|
|
unsigned int done;
|
|
wait_queue_head_t wait;
|
|
};
|
|
# 73 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/completion.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/completion.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/debugobjects.h"
|
|
static inline __attribute__((no_instrument_function)) void
|
|
debug_object_init (void *addr, struct debug_obj_descr *descr) { }
|
|
static inline __attribute__((no_instrument_function)) void
|
|
debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr) { }
|
|
static inline __attribute__((no_instrument_function)) int
|
|
debug_object_activate (void *addr, struct debug_obj_descr *descr) { return 0; }
|
|
static inline __attribute__((no_instrument_function)) void
|
|
debug_object_deactivate(void *addr, struct debug_obj_descr *descr) { }
|
|
static inline __attribute__((no_instrument_function)) void
|
|
debug_object_destroy (void *addr, struct debug_obj_descr *descr) { }
|
|
static inline __attribute__((no_instrument_function)) void
|
|
debug_object_free (void *addr, struct debug_obj_descr *descr) { }
|
|
static inline __attribute__((no_instrument_function)) void
|
|
debug_object_assert_init(void *addr, struct debug_obj_descr *descr) { }
|
|
|
|
static inline __attribute__((no_instrument_function)) void debug_objects_early_init(void) { }
|
|
static inline __attribute__((no_instrument_function)) void debug_objects_mem_init(void) { }
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
debug_check_no_obj_freed(const void *address, unsigned long size) { }
|
|
# 45 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
void call_rcu_bh(struct callback_head *head,
|
|
void (*func)(struct callback_head *head));
|
|
# 193 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
void call_rcu_sched(struct callback_head *head,
|
|
void (*func)(struct callback_head *rcu));
|
|
|
|
void synchronize_sched(void);
|
|
# 216 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
static inline __attribute__((no_instrument_function)) void __rcu_read_lock(void)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __rcu_read_unlock(void)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void synchronize_rcu(void)
|
|
{
|
|
synchronize_sched();
|
|
}
|
|
|
|
static 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 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);
|
|
# 283 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
void rcu_user_enter(void);
|
|
void rcu_user_exit(void);
|
|
# 293 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
void rcu_init_nohz(void);
|
|
# 356 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcutree.h" 1
|
|
# 33 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcutree.h"
|
|
void rcu_note_context_switch(void);
|
|
|
|
|
|
|
|
void rcu_cpu_stall_reset(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void rcu_virt_note_context_switch(int cpu)
|
|
{
|
|
rcu_note_context_switch();
|
|
}
|
|
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcutree.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h" 2
|
|
# 388 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
static inline __attribute__((no_instrument_function)) void init_rcu_head(struct callback_head *head)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void destroy_rcu_head(struct callback_head *head)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void init_rcu_head_on_stack(struct callback_head *head)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void destroy_rcu_head_on_stack(struct callback_head *head)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool rcu_lockdep_current_cpu_online(void)
|
|
{
|
|
return true;
|
|
}
|
|
# 493 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
static inline __attribute__((no_instrument_function)) int rcu_read_lock_held(void)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int rcu_read_lock_bh_held(void)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int rcu_read_lock_sched_held(void)
|
|
{
|
|
return 1;
|
|
}
|
|
# 877 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
static inline __attribute__((no_instrument_function)) void rcu_read_lock(void)
|
|
{
|
|
__rcu_read_lock();
|
|
(void)0;
|
|
do { } while (0);
|
|
do { } while (0)
|
|
;
|
|
}
|
|
# 931 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
static inline __attribute__((no_instrument_function)) void rcu_read_unlock(void)
|
|
{
|
|
do { } while (0)
|
|
;
|
|
do { } while (0);
|
|
(void)0;
|
|
__rcu_read_unlock();
|
|
}
|
|
# 957 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
static 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__((no_instrument_function)) void rcu_read_unlock_bh(void)
|
|
{
|
|
do { } while (0)
|
|
;
|
|
do { } while (0);
|
|
(void)0;
|
|
local_bh_enable();
|
|
}
|
|
# 993 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
static 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__((no_instrument_function)) __attribute__((no_instrument_function)) void rcu_read_lock_sched_notrace(void)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
(void)0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) __attribute__((no_instrument_function)) void rcu_read_unlock_sched_notrace(void)
|
|
{
|
|
(void)0;
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
# 1124 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
static inline __attribute__((no_instrument_function)) int rcu_needs_cpu(unsigned long *delta_jiffies)
|
|
{
|
|
*delta_jiffies = (~0UL);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool rcu_is_nocb_cpu(int cpu) { return true; }
|
|
# 1146 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rcupdate.h"
|
|
static inline __attribute__((no_instrument_function)) bool rcu_sys_is_idle(void)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void rcu_sysidle_force_exit(void)
|
|
{
|
|
}
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sem.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/sem.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ipc.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/uidgid.h" 1
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/uidgid.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/highuid.h" 1
|
|
# 34 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/highuid.h"
|
|
extern int overflowuid;
|
|
extern int overflowgid;
|
|
|
|
extern void __bad_uid(void);
|
|
extern void __bad_gid(void);
|
|
# 81 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/highuid.h"
|
|
extern int fs_overflowuid;
|
|
extern int fs_overflowgid;
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) uid_t __kuid_val(kuid_t uid)
|
|
{
|
|
return uid.val;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) gid_t __kgid_val(kgid_t gid)
|
|
{
|
|
return gid.val;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool uid_eq(kuid_t left, kuid_t right)
|
|
{
|
|
return __kuid_val(left) == __kuid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool gid_eq(kgid_t left, kgid_t right)
|
|
{
|
|
return __kgid_val(left) == __kgid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool uid_gt(kuid_t left, kuid_t right)
|
|
{
|
|
return __kuid_val(left) > __kuid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool gid_gt(kgid_t left, kgid_t right)
|
|
{
|
|
return __kgid_val(left) > __kgid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool uid_gte(kuid_t left, kuid_t right)
|
|
{
|
|
return __kuid_val(left) >= __kuid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool gid_gte(kgid_t left, kgid_t right)
|
|
{
|
|
return __kgid_val(left) >= __kgid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool uid_lt(kuid_t left, kuid_t right)
|
|
{
|
|
return __kuid_val(left) < __kuid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool gid_lt(kgid_t left, kgid_t right)
|
|
{
|
|
return __kgid_val(left) < __kgid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool uid_lte(kuid_t left, kuid_t right)
|
|
{
|
|
return __kuid_val(left) <= __kuid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool gid_lte(kgid_t left, kgid_t right)
|
|
{
|
|
return __kgid_val(left) <= __kgid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool uid_valid(kuid_t uid)
|
|
{
|
|
return !uid_eq(uid, (kuid_t){ -1 });
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) bool kgid_has_mapping(struct user_namespace *ns, kgid_t gid)
|
|
{
|
|
return from_kgid(ns, gid) != (gid_t) -1;
|
|
}
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ipc.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/ipc.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/ipcbuf.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/ipcbuf.h" 1
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/ipcbuf.h" 2
|
|
# 22 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/ipc.h" 2
|
|
# 57 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/ipc.h"
|
|
struct ipc_kludge {
|
|
struct msgbuf *msgp;
|
|
long msgtyp;
|
|
};
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/sem.h" 2
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/sembuf.h" 1
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/sembuf.h"
|
|
struct semid64_ds {
|
|
struct ipc64_perm sem_perm;
|
|
__kernel_time_t sem_otime;
|
|
__kernel_ulong_t __unused1;
|
|
__kernel_time_t sem_ctime;
|
|
__kernel_ulong_t __unused2;
|
|
__kernel_ulong_t sem_nsems;
|
|
__kernel_ulong_t __unused3;
|
|
__kernel_ulong_t __unused4;
|
|
};
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sem.h" 2
|
|
|
|
struct task_struct;
|
|
|
|
|
|
struct sem_array {
|
|
struct kern_ipc_perm __attribute__((__aligned__((1 << (6)))))
|
|
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);
|
|
# 77 "source/include/linux/syscalls.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/unistd.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/unistd.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/unistd.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/unistd.h" 2
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/unistd.h"
|
|
# 1 "arch/x86/include/generated/uapi/asm/unistd_64.h" 1
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/unistd.h" 2
|
|
# 1 "arch/x86/include/generated/asm/unistd_64_x32.h" 1
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/unistd.h" 2
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/unistd.h" 2
|
|
# 79 "source/include/linux/syscalls.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h" 1
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mutex.h" 1
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mutex.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/osq_lock.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/osq_lock.h"
|
|
struct optimistic_spin_queue {
|
|
|
|
|
|
|
|
|
|
atomic_t tail;
|
|
};
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void osq_lock_init(struct optimistic_spin_queue *lock)
|
|
{
|
|
atomic_set(&lock->tail, (0));
|
|
}
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mutex.h" 2
|
|
# 50 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mutex.h"
|
|
struct mutex {
|
|
|
|
atomic_t count;
|
|
spinlock_t wait_lock;
|
|
struct list_head wait_list;
|
|
|
|
struct task_struct *owner;
|
|
|
|
|
|
struct optimistic_spin_queue osq;
|
|
# 68 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mutex.h"
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct mutex_waiter {
|
|
struct list_head list;
|
|
struct task_struct *task;
|
|
|
|
|
|
|
|
};
|
|
# 100 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mutex.h"
|
|
static inline __attribute__((no_instrument_function)) void mutex_destroy(struct mutex *lock) {}
|
|
# 120 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mutex.h"
|
|
extern void __mutex_init(struct mutex *lock, const char *name,
|
|
struct lock_class_key *key);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int mutex_is_locked(struct mutex *lock)
|
|
{
|
|
return atomic_read(&lock->count) != 1;
|
|
}
|
|
# 158 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mutex.h"
|
|
extern void mutex_lock(struct mutex *lock);
|
|
extern int mutex_lock_interruptible(struct mutex *lock);
|
|
extern int mutex_lock_killable(struct mutex *lock);
|
|
# 174 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 37 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwsem.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwsem.h"
|
|
struct rw_semaphore;
|
|
|
|
|
|
|
|
|
|
|
|
struct rw_semaphore {
|
|
long count;
|
|
struct list_head wait_list;
|
|
raw_spinlock_t wait_lock;
|
|
|
|
struct optimistic_spin_queue osq;
|
|
|
|
|
|
|
|
|
|
struct task_struct *owner;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
extern struct rw_semaphore *rwsem_down_read_failed(struct rw_semaphore *sem);
|
|
extern struct rw_semaphore *rwsem_down_write_failed(struct rw_semaphore *sem);
|
|
extern struct rw_semaphore *rwsem_wake(struct rw_semaphore *);
|
|
extern struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem);
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/rwsem.h" 1
|
|
# 63 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/rwsem.h"
|
|
static inline __attribute__((no_instrument_function)) void __down_read(struct rw_semaphore *sem)
|
|
{
|
|
asm volatile("# beginning down_read\n\t"
|
|
".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " " " "incq" " " "(%1)\n\t"
|
|
|
|
" jns 1f\n"
|
|
" call call_rwsem_down_read_failed\n"
|
|
"1:\n\t"
|
|
"# ending down_read\n\t"
|
|
: "+m" (sem->count)
|
|
: "a" (sem)
|
|
: "memory", "cc");
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int __down_read_trylock(struct rw_semaphore *sem)
|
|
{
|
|
long result, tmp;
|
|
asm volatile("# beginning __down_read_trylock\n\t"
|
|
" mov %0,%1\n\t"
|
|
"1:\n\t"
|
|
" mov %1,%2\n\t"
|
|
" add %3,%2\n\t"
|
|
" jle 2f\n\t"
|
|
".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " " cmpxchg %2,%0\n\t"
|
|
" jnz 1b\n\t"
|
|
"2:\n\t"
|
|
"# ending __down_read_trylock\n\t"
|
|
: "+m" (sem->count), "=&a" (result), "=&r" (tmp)
|
|
: "i" (0x00000001L)
|
|
: "memory", "cc");
|
|
return result >= 0 ? 1 : 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __down_write_nested(struct rw_semaphore *sem, int subclass)
|
|
{
|
|
long tmp;
|
|
asm volatile("# beginning down_write\n\t"
|
|
".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " " xadd %1,(%2)\n\t"
|
|
|
|
" test " " " "%k1" " " "," " " "%k1" " " "\n\t"
|
|
|
|
" jz 1f\n"
|
|
" call call_rwsem_down_write_failed\n"
|
|
"1:\n"
|
|
"# ending down_write"
|
|
: "+m" (sem->count), "=d" (tmp)
|
|
: "a" (sem), "1" (((-0xffffffffL -1) + 0x00000001L))
|
|
: "memory", "cc");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __down_write(struct rw_semaphore *sem)
|
|
{
|
|
__down_write_nested(sem, 0);
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int __down_write_trylock(struct rw_semaphore *sem)
|
|
{
|
|
long result, tmp;
|
|
asm volatile("# beginning __down_write_trylock\n\t"
|
|
" mov %0,%1\n\t"
|
|
"1:\n\t"
|
|
" test " " " "%k1" " " "," " " "%k1" " " "\n\t"
|
|
|
|
" jnz 2f\n\t"
|
|
" mov %1,%2\n\t"
|
|
" add %3,%2\n\t"
|
|
".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " " cmpxchg %2,%0\n\t"
|
|
" jnz 1b\n\t"
|
|
"2:\n\t"
|
|
" sete %b1\n\t"
|
|
" movzbl %b1, %k1\n\t"
|
|
"# ending __down_write_trylock\n\t"
|
|
: "+m" (sem->count), "=&a" (result), "=&r" (tmp)
|
|
: "er" (((-0xffffffffL -1) + 0x00000001L))
|
|
: "memory", "cc");
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __up_read(struct rw_semaphore *sem)
|
|
{
|
|
long tmp;
|
|
asm volatile("# beginning __up_read\n\t"
|
|
".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " " xadd %1,(%2)\n\t"
|
|
|
|
" jns 1f\n\t"
|
|
" call call_rwsem_wake\n"
|
|
"1:\n"
|
|
"# ending __up_read\n"
|
|
: "+m" (sem->count), "=d" (tmp)
|
|
: "a" (sem), "1" (-0x00000001L)
|
|
: "memory", "cc");
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __up_write(struct rw_semaphore *sem)
|
|
{
|
|
long tmp;
|
|
asm volatile("# beginning __up_write\n\t"
|
|
".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " " xadd %1,(%2)\n\t"
|
|
|
|
" jns 1f\n\t"
|
|
" call call_rwsem_wake\n"
|
|
"1:\n\t"
|
|
"# ending __up_write\n"
|
|
: "+m" (sem->count), "=d" (tmp)
|
|
: "a" (sem), "1" (-((-0xffffffffL -1) + 0x00000001L))
|
|
: "memory", "cc");
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __downgrade_write(struct rw_semaphore *sem)
|
|
{
|
|
asm volatile("# beginning __downgrade_write\n\t"
|
|
".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " " " "addq" " " "%2,(%1)\n\t"
|
|
|
|
|
|
|
|
|
|
" jns 1f\n\t"
|
|
" call call_rwsem_downgrade_wake\n"
|
|
"1:\n\t"
|
|
"# ending __downgrade_write\n"
|
|
: "+m" (sem->count)
|
|
: "a" (sem), "er" (-(-0xffffffffL -1))
|
|
: "memory", "cc");
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void rwsem_atomic_add(long delta, struct rw_semaphore *sem)
|
|
{
|
|
asm volatile(".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " " " "addq" " " "%1,%0"
|
|
: "+m" (sem->count)
|
|
: "er" (delta));
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) long rwsem_atomic_update(long delta, struct rw_semaphore *sem)
|
|
{
|
|
return delta + ({ __typeof__ (*(((&sem->count)))) __ret = (((delta))); switch (sizeof(*(((&sem->count))))) { case 1: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "b %b0, %1\n" : "+q" (__ret), "+m" (*(((&sem->count)))) : : "memory", "cc"); break; case 2: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "w %w0, %1\n" : "+r" (__ret), "+m" (*(((&sem->count)))) : : "memory", "cc"); break; case 4: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "l %0, %1\n" : "+r" (__ret), "+m" (*(((&sem->count)))) : : "memory", "cc"); break; case 8: asm volatile (".pushsection .smp_locks,\"a\"\n" ".balign 4\n" ".long 671f - .\n" ".popsection\n" "671:" "\n\tlock; " "xadd" "q %q0, %1\n" : "+r" (__ret), "+m" (*(((&sem->count)))) : : "memory", "cc"); break; default: __xadd_wrong_size(); } __ret; });
|
|
}
|
|
# 51 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwsem.h" 2
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int rwsem_is_locked(struct rw_semaphore *sem)
|
|
{
|
|
return sem->count != 0;
|
|
}
|
|
# 84 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwsem.h"
|
|
extern void __init_rwsem(struct rw_semaphore *sem, const char *name,
|
|
struct lock_class_key *key);
|
|
# 100 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rwsem.h"
|
|
static 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);
|
|
# 38 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu_counter.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu_counter.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/smp.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/smp.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/errno.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/errno.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/errno.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/errno.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/errno.h" 2
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/smp.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/llist.h" 1
|
|
# 61 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/llist.h"
|
|
struct llist_head {
|
|
struct llist_node *first;
|
|
};
|
|
|
|
struct llist_node {
|
|
struct llist_node *next;
|
|
};
|
|
# 76 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/llist.h"
|
|
static inline __attribute__((no_instrument_function)) void init_llist_head(struct llist_head *list)
|
|
{
|
|
list->first = ((void *)0);
|
|
}
|
|
# 158 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/llist.h"
|
|
static inline __attribute__((no_instrument_function)) bool llist_empty(const struct llist_head *head)
|
|
{
|
|
return (*({ __attribute__((unused)) typeof(head->first) __var = ( typeof(head->first)) 0; (volatile typeof(head->first) *)&(head->first); })) == ((void *)0);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) bool llist_add(struct llist_node *new, struct llist_head *head)
|
|
{
|
|
return llist_add_batch(new, new, head);
|
|
}
|
|
# 191 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/llist.h"
|
|
static inline __attribute__((no_instrument_function)) struct llist_node *llist_del_all(struct llist_head *head)
|
|
{
|
|
return ({ __typeof__ (*((&head->first))) __ret = ((((void *)0))); switch (sizeof(*((&head->first)))) { case 1: asm volatile ("" "xchg" "b %b0, %1\n" : "+q" (__ret), "+m" (*((&head->first))) : : "memory", "cc"); break; case 2: asm volatile ("" "xchg" "w %w0, %1\n" : "+r" (__ret), "+m" (*((&head->first))) : : "memory", "cc"); break; case 4: asm volatile ("" "xchg" "l %0, %1\n" : "+r" (__ret), "+m" (*((&head->first))) : : "memory", "cc"); break; case 8: asm volatile ("" "xchg" "q %q0, %1\n" : "+r" (__ret), "+m" (*((&head->first))) : : "memory", "cc"); break; default: __xchg_wrong_size(); } __ret; });
|
|
}
|
|
|
|
extern struct llist_node *llist_del_first(struct llist_head *head);
|
|
|
|
struct llist_node *llist_reverse_order(struct llist_node *head);
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/smp.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/smp.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec_def.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec_def.h"
|
|
struct mpf_intel {
|
|
char signature[4];
|
|
unsigned int physptr;
|
|
unsigned char length;
|
|
unsigned char specification;
|
|
unsigned char checksum;
|
|
unsigned char feature1;
|
|
unsigned char feature2;
|
|
unsigned char feature3;
|
|
unsigned char feature4;
|
|
unsigned char feature5;
|
|
};
|
|
|
|
|
|
|
|
struct mpc_table {
|
|
char signature[4];
|
|
unsigned short length;
|
|
char spec;
|
|
char checksum;
|
|
char oem[8];
|
|
char productid[12];
|
|
unsigned int oemptr;
|
|
unsigned short oemsize;
|
|
unsigned short oemcount;
|
|
unsigned int lapic;
|
|
unsigned int reserved;
|
|
};
|
|
# 67 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec_def.h"
|
|
struct mpc_cpu {
|
|
unsigned char type;
|
|
unsigned char apicid;
|
|
unsigned char apicver;
|
|
unsigned char cpuflag;
|
|
unsigned int cpufeature;
|
|
unsigned int featureflag;
|
|
unsigned int reserved[2];
|
|
};
|
|
|
|
struct mpc_bus {
|
|
unsigned char type;
|
|
unsigned char busid;
|
|
unsigned char bustype[6];
|
|
};
|
|
# 105 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec_def.h"
|
|
struct mpc_ioapic {
|
|
unsigned char type;
|
|
unsigned char apicid;
|
|
unsigned char apicver;
|
|
unsigned char flags;
|
|
unsigned int apicaddr;
|
|
};
|
|
|
|
struct mpc_intsrc {
|
|
unsigned char type;
|
|
unsigned char irqtype;
|
|
unsigned short irqflag;
|
|
unsigned char srcbus;
|
|
unsigned char srcbusirq;
|
|
unsigned char dstapic;
|
|
unsigned char dstirq;
|
|
};
|
|
|
|
enum mp_irq_source_types {
|
|
mp_INT = 0,
|
|
mp_NMI = 1,
|
|
mp_SMI = 2,
|
|
mp_ExtINT = 3
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct mpc_lintsrc {
|
|
unsigned char type;
|
|
unsigned char irqtype;
|
|
unsigned short irqflag;
|
|
unsigned char srcbusid;
|
|
unsigned char srcbusirq;
|
|
unsigned char destapic;
|
|
unsigned char destapiclint;
|
|
};
|
|
|
|
|
|
|
|
struct mpc_oemtable {
|
|
char signature[4];
|
|
unsigned short length;
|
|
char rev;
|
|
char checksum;
|
|
char mpc[8];
|
|
};
|
|
# 168 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec_def.h"
|
|
enum mp_bustype {
|
|
MP_BUS_ISA = 1,
|
|
MP_BUS_EISA,
|
|
MP_BUS_PCI,
|
|
};
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/x86_init.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bootparam.h" 1
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bootparam.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/screen_info.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/screen_info.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/screen_info.h"
|
|
struct screen_info {
|
|
__u8 orig_x;
|
|
__u8 orig_y;
|
|
__u16 ext_mem_k;
|
|
__u16 orig_video_page;
|
|
__u8 orig_video_mode;
|
|
__u8 orig_video_cols;
|
|
__u8 flags;
|
|
__u8 unused2;
|
|
__u16 orig_video_ega_bx;
|
|
__u16 unused3;
|
|
__u8 orig_video_lines;
|
|
__u8 orig_video_isVGA;
|
|
__u16 orig_video_points;
|
|
|
|
|
|
__u16 lfb_width;
|
|
__u16 lfb_height;
|
|
__u16 lfb_depth;
|
|
__u32 lfb_base;
|
|
__u32 lfb_size;
|
|
__u16 cl_magic, cl_offset;
|
|
__u16 lfb_linelength;
|
|
__u8 red_size;
|
|
__u8 red_pos;
|
|
__u8 green_size;
|
|
__u8 green_pos;
|
|
__u8 blue_size;
|
|
__u8 blue_pos;
|
|
__u8 rsvd_size;
|
|
__u8 rsvd_pos;
|
|
__u16 vesapm_seg;
|
|
__u16 vesapm_off;
|
|
__u16 pages;
|
|
__u16 vesa_attributes;
|
|
__u32 capabilities;
|
|
__u8 _reserved[6];
|
|
} __attribute__((packed));
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/screen_info.h" 2
|
|
|
|
extern struct screen_info screen_info;
|
|
# 33 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bootparam.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/apm_bios.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/apm_bios.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/apm_bios.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/apm_bios.h"
|
|
typedef unsigned short apm_event_t;
|
|
typedef unsigned short apm_eventinfo_t;
|
|
|
|
struct apm_bios_info {
|
|
__u16 version;
|
|
__u16 cseg;
|
|
__u32 offset;
|
|
__u16 cseg_16;
|
|
__u16 dseg;
|
|
__u16 flags;
|
|
__u16 cseg_len;
|
|
__u16 cseg_16_len;
|
|
__u16 dseg_len;
|
|
};
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/apm_bios.h" 2
|
|
# 35 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/apm_bios.h"
|
|
struct apm_info {
|
|
struct apm_bios_info bios;
|
|
unsigned short connection_version;
|
|
int get_power_status_broken;
|
|
int get_power_status_swabinminutes;
|
|
int allow_ints;
|
|
int forbid_idle;
|
|
int realmode_power_off;
|
|
int disabled;
|
|
};
|
|
# 94 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/apm_bios.h"
|
|
extern struct apm_info apm_info;
|
|
# 34 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bootparam.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/edd.h" 1
|
|
# 33 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/edd.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/edd.h" 1
|
|
# 71 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/edd.h"
|
|
struct edd_device_params {
|
|
__u16 length;
|
|
__u16 info_flags;
|
|
__u32 num_default_cylinders;
|
|
__u32 num_default_heads;
|
|
__u32 sectors_per_track;
|
|
__u64 number_of_sectors;
|
|
__u16 bytes_per_sector;
|
|
__u32 dpte_ptr;
|
|
__u16 key;
|
|
__u8 device_path_info_length;
|
|
__u8 reserved2;
|
|
__u16 reserved3;
|
|
__u8 host_bus_type[4];
|
|
__u8 interface_type[8];
|
|
union {
|
|
struct {
|
|
__u16 base_address;
|
|
__u16 reserved1;
|
|
__u32 reserved2;
|
|
} __attribute__ ((packed)) isa;
|
|
struct {
|
|
__u8 bus;
|
|
__u8 slot;
|
|
__u8 function;
|
|
__u8 channel;
|
|
__u32 reserved;
|
|
} __attribute__ ((packed)) pci;
|
|
|
|
struct {
|
|
__u64 reserved;
|
|
} __attribute__ ((packed)) ibnd;
|
|
struct {
|
|
__u64 reserved;
|
|
} __attribute__ ((packed)) xprs;
|
|
struct {
|
|
__u64 reserved;
|
|
} __attribute__ ((packed)) htpt;
|
|
struct {
|
|
__u64 reserved;
|
|
} __attribute__ ((packed)) unknown;
|
|
} interface_path;
|
|
union {
|
|
struct {
|
|
__u8 device;
|
|
__u8 reserved1;
|
|
__u16 reserved2;
|
|
__u32 reserved3;
|
|
__u64 reserved4;
|
|
} __attribute__ ((packed)) ata;
|
|
struct {
|
|
__u8 device;
|
|
__u8 lun;
|
|
__u8 reserved1;
|
|
__u8 reserved2;
|
|
__u32 reserved3;
|
|
__u64 reserved4;
|
|
} __attribute__ ((packed)) atapi;
|
|
struct {
|
|
__u16 id;
|
|
__u64 lun;
|
|
__u16 reserved1;
|
|
__u32 reserved2;
|
|
} __attribute__ ((packed)) scsi;
|
|
struct {
|
|
__u64 serial_number;
|
|
__u64 reserved;
|
|
} __attribute__ ((packed)) usb;
|
|
struct {
|
|
__u64 eui;
|
|
__u64 reserved;
|
|
} __attribute__ ((packed)) i1394;
|
|
struct {
|
|
__u64 wwid;
|
|
__u64 lun;
|
|
} __attribute__ ((packed)) fibre;
|
|
struct {
|
|
__u64 identity_tag;
|
|
__u64 reserved;
|
|
} __attribute__ ((packed)) i2o;
|
|
struct {
|
|
__u32 array_number;
|
|
__u32 reserved1;
|
|
__u64 reserved2;
|
|
} __attribute__ ((packed)) raid;
|
|
struct {
|
|
__u8 device;
|
|
__u8 reserved1;
|
|
__u16 reserved2;
|
|
__u32 reserved3;
|
|
__u64 reserved4;
|
|
} __attribute__ ((packed)) sata;
|
|
struct {
|
|
__u64 reserved1;
|
|
__u64 reserved2;
|
|
} __attribute__ ((packed)) unknown;
|
|
} device_path;
|
|
__u8 reserved4;
|
|
__u8 checksum;
|
|
} __attribute__ ((packed));
|
|
|
|
struct edd_info {
|
|
__u8 device;
|
|
__u8 version;
|
|
__u16 interface_support;
|
|
__u16 legacy_max_cylinder;
|
|
__u8 legacy_max_head;
|
|
__u8 legacy_sectors_per_track;
|
|
struct edd_device_params params;
|
|
} __attribute__ ((packed));
|
|
|
|
struct edd {
|
|
unsigned int mbr_signature[16];
|
|
struct edd_info edd_info[6];
|
|
unsigned char mbr_signature_nr;
|
|
unsigned char edd_info_nr;
|
|
};
|
|
# 34 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/edd.h" 2
|
|
|
|
|
|
extern struct edd edd;
|
|
# 35 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bootparam.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/e820.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/numa.h" 1
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/e820.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/e820.h" 1
|
|
# 47 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/e820.h"
|
|
struct e820entry {
|
|
__u64 addr;
|
|
__u64 size;
|
|
__u32 type;
|
|
} __attribute__((packed));
|
|
|
|
struct e820map {
|
|
__u32 nr_map;
|
|
struct e820entry map[(128 + 3 * (1 << 6))];
|
|
};
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/e820.h" 2
|
|
|
|
|
|
extern struct e820map e820;
|
|
extern struct e820map e820_saved;
|
|
|
|
extern unsigned long pci_mem_start;
|
|
extern int e820_any_mapped(u64 start, u64 end, unsigned type);
|
|
extern int e820_all_mapped(u64 start, u64 end, unsigned type);
|
|
extern void e820_add_region(u64 start, u64 size, int type);
|
|
extern void e820_print_map(char *who);
|
|
extern int
|
|
sanitize_e820_map(struct e820entry *biosmap, int max_nr_map, u32 *pnr_map);
|
|
extern u64 e820_update_range(u64 start, u64 size, unsigned old_type,
|
|
unsigned new_type);
|
|
extern u64 e820_remove_range(u64 start, u64 size, unsigned old_type,
|
|
int checktype);
|
|
extern void update_e820(void);
|
|
extern void e820_setup_gap(void);
|
|
extern int e820_search_gap(unsigned long *gapstart, unsigned long *gapsize,
|
|
unsigned long start_addr, unsigned long long end_addr);
|
|
struct setup_data;
|
|
extern void parse_e820_ext(u64 phys_addr, u32 data_len);
|
|
|
|
|
|
|
|
extern void e820_mark_nosave_regions(unsigned long limit_pfn);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern void early_memtest(unsigned long start, unsigned long end);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern unsigned long e820_end_of_ram_pfn(void);
|
|
extern unsigned long e820_end_of_low_ram_pfn(void);
|
|
extern u64 early_reserve_e820(u64 sizet, u64 align);
|
|
|
|
void memblock_x86_fill(void);
|
|
void memblock_find_dma_reserve(void);
|
|
|
|
extern void finish_e820_parsing(void);
|
|
extern void e820_reserve_resources(void);
|
|
extern void e820_reserve_resources_late(void);
|
|
extern void setup_memory_map(void);
|
|
extern char *default_machine_specific_memory_setup(void);
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool is_ISA_range(u64 s, u64 e)
|
|
{
|
|
return s >= 0xa0000 && e <= 0x100000;
|
|
}
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ioport.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) resource_size_t resource_size(const struct resource *res)
|
|
{
|
|
return res->end - res->start + 1;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) unsigned long resource_type(const struct resource *res)
|
|
{
|
|
return res->flags & 0x00001f00;
|
|
}
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
extern int release_mem_region_adjustable(struct resource *, resource_size_t,
|
|
resource_size_t);
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int 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__((no_instrument_function)) bool resource_overlaps(struct resource *r1, struct resource *r2)
|
|
{
|
|
return (r1->start <= r2->end && r1->end >= r2->start);
|
|
}
|
|
# 75 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/e820.h" 2
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bootparam.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ist.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ist.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/ist.h" 1
|
|
# 22 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/ist.h"
|
|
struct ist_info {
|
|
__u32 signature;
|
|
__u32 command;
|
|
__u32 event;
|
|
__u32 perf_level;
|
|
};
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ist.h" 2
|
|
|
|
|
|
extern struct ist_info ist_info;
|
|
# 37 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bootparam.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/video/edid.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/video/edid.h" 1
|
|
|
|
|
|
|
|
struct edid_info {
|
|
unsigned char dummy[128];
|
|
};
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/video/edid.h" 2
|
|
|
|
|
|
extern struct edid_info edid_info;
|
|
# 38 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bootparam.h" 2
|
|
|
|
|
|
struct setup_data {
|
|
__u64 next;
|
|
__u32 type;
|
|
__u32 len;
|
|
__u8 data[0];
|
|
};
|
|
|
|
struct setup_header {
|
|
__u8 setup_sects;
|
|
__u16 root_flags;
|
|
__u32 syssize;
|
|
__u16 ram_size;
|
|
__u16 vid_mode;
|
|
__u16 root_dev;
|
|
__u16 boot_flag;
|
|
__u16 jump;
|
|
__u32 header;
|
|
__u16 version;
|
|
__u32 realmode_swtch;
|
|
__u16 start_sys;
|
|
__u16 kernel_version;
|
|
__u8 type_of_loader;
|
|
__u8 loadflags;
|
|
__u16 setup_move_size;
|
|
__u32 code32_start;
|
|
__u32 ramdisk_image;
|
|
__u32 ramdisk_size;
|
|
__u32 bootsect_kludge;
|
|
__u16 heap_end_ptr;
|
|
__u8 ext_loader_ver;
|
|
__u8 ext_loader_type;
|
|
__u32 cmd_line_ptr;
|
|
__u32 initrd_addr_max;
|
|
__u32 kernel_alignment;
|
|
__u8 relocatable_kernel;
|
|
__u8 min_alignment;
|
|
__u16 xloadflags;
|
|
__u32 cmdline_size;
|
|
__u32 hardware_subarch;
|
|
__u64 hardware_subarch_data;
|
|
__u32 payload_offset;
|
|
__u32 payload_length;
|
|
__u64 setup_data;
|
|
__u64 pref_address;
|
|
__u32 init_size;
|
|
__u32 handover_offset;
|
|
} __attribute__((packed));
|
|
|
|
struct sys_desc_table {
|
|
__u16 length;
|
|
__u8 table[14];
|
|
};
|
|
|
|
|
|
struct olpc_ofw_header {
|
|
__u32 ofw_magic;
|
|
__u32 ofw_version;
|
|
__u32 cif_handler;
|
|
__u32 irq_desc_table;
|
|
} __attribute__((packed));
|
|
|
|
struct efi_info {
|
|
__u32 efi_loader_signature;
|
|
__u32 efi_systab;
|
|
__u32 efi_memdesc_size;
|
|
__u32 efi_memdesc_version;
|
|
__u32 efi_memmap;
|
|
__u32 efi_memmap_size;
|
|
__u32 efi_systab_hi;
|
|
__u32 efi_memmap_hi;
|
|
};
|
|
|
|
|
|
struct boot_params {
|
|
struct screen_info screen_info;
|
|
struct apm_bios_info apm_bios_info;
|
|
__u8 _pad2[4];
|
|
__u64 tboot_addr;
|
|
struct ist_info ist_info;
|
|
__u8 _pad3[16];
|
|
__u8 hd0_info[16];
|
|
__u8 hd1_info[16];
|
|
struct sys_desc_table sys_desc_table;
|
|
struct olpc_ofw_header olpc_ofw_header;
|
|
__u32 ext_ramdisk_image;
|
|
__u32 ext_ramdisk_size;
|
|
__u32 ext_cmd_line_ptr;
|
|
__u8 _pad4[116];
|
|
struct edid_info edid_info;
|
|
struct efi_info efi_info;
|
|
__u32 alt_mem_k;
|
|
__u32 scratch;
|
|
__u8 e820_entries;
|
|
__u8 eddbuf_entries;
|
|
__u8 edd_mbr_sig_buf_entries;
|
|
__u8 kbd_status;
|
|
__u8 _pad5[3];
|
|
# 148 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/bootparam.h"
|
|
__u8 sentinel;
|
|
__u8 _pad6[1];
|
|
struct setup_header hdr;
|
|
__u8 _pad7[0x290-0x1f1-sizeof(struct setup_header)];
|
|
__u32 edd_mbr_sig_buffer[16];
|
|
struct e820entry e820_map[128];
|
|
__u8 _pad8[48];
|
|
struct edd_info eddbuf[6];
|
|
__u8 _pad9[276];
|
|
} __attribute__((packed));
|
|
|
|
enum {
|
|
X86_SUBARCH_PC = 0,
|
|
X86_SUBARCH_LGUEST,
|
|
X86_SUBARCH_XEN,
|
|
X86_SUBARCH_INTEL_MID,
|
|
X86_SUBARCH_CE4100,
|
|
X86_NR_SUBARCHS,
|
|
};
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/x86_init.h" 2
|
|
|
|
struct mpc_bus;
|
|
struct mpc_cpu;
|
|
struct mpc_table;
|
|
struct cpuinfo_x86;
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/x86_init.h"
|
|
struct x86_init_mpparse {
|
|
void (*mpc_record)(unsigned int mode);
|
|
void (*setup_ioapic_ids)(void);
|
|
int (*mpc_apic_id)(struct mpc_cpu *m);
|
|
void (*smp_read_mpc_oem)(struct mpc_table *mpc);
|
|
void (*mpc_oem_pci_bus)(struct mpc_bus *m);
|
|
void (*mpc_oem_bus_info)(struct mpc_bus *m, char *name);
|
|
void (*find_smp_config)(void);
|
|
void (*get_smp_config)(unsigned int early);
|
|
};
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/x86_init.h"
|
|
struct x86_init_resources {
|
|
void (*probe_roms)(void);
|
|
void (*reserve_resources)(void);
|
|
char *(*memory_setup)(void);
|
|
};
|
|
# 55 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/x86_init.h"
|
|
struct x86_init_irqs {
|
|
void (*pre_vector_init)(void);
|
|
void (*intr_init)(void);
|
|
void (*trap_init)(void);
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct x86_init_oem {
|
|
void (*arch_setup)(void);
|
|
void (*banner)(void);
|
|
};
|
|
# 78 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/x86_init.h"
|
|
struct x86_init_paging {
|
|
void (*pagetable_init)(void);
|
|
};
|
|
# 90 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/x86_init.h"
|
|
struct x86_init_timers {
|
|
void (*setup_percpu_clockev)(void);
|
|
void (*tsc_pre_init)(void);
|
|
void (*timer_init)(void);
|
|
void (*wallclock_init)(void);
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct x86_init_iommu {
|
|
int (*iommu_init)(void);
|
|
};
|
|
# 112 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/x86_init.h"
|
|
struct x86_init_pci {
|
|
int (*arch_init)(void);
|
|
int (*init)(void);
|
|
void (*init_irq)(void);
|
|
void (*fixup_irqs)(void);
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct x86_init_ops {
|
|
struct x86_init_resources resources;
|
|
struct x86_init_mpparse mpparse;
|
|
struct x86_init_irqs irqs;
|
|
struct x86_init_oem oem;
|
|
struct x86_init_paging paging;
|
|
struct x86_init_timers timers;
|
|
struct x86_init_iommu iommu;
|
|
struct x86_init_pci pci;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct x86_cpuinit_ops {
|
|
void (*setup_percpu_clockev)(void);
|
|
void (*early_percpu_clock_init)(void);
|
|
void (*fixup_cpu_id)(struct cpuinfo_x86 *c, int node);
|
|
};
|
|
|
|
struct timespec;
|
|
# 159 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/x86_init.h"
|
|
struct x86_platform_ops {
|
|
unsigned long (*calibrate_tsc)(void);
|
|
void (*get_wallclock)(struct timespec *ts);
|
|
int (*set_wallclock)(const struct timespec *ts);
|
|
void (*iommu_shutdown)(void);
|
|
bool (*is_untracked_pat_range)(u64 start, u64 end);
|
|
void (*nmi_init)(void);
|
|
unsigned char (*get_nmi_reason)(void);
|
|
int (*i8042_detect)(void);
|
|
void (*save_sched_clock_state)(void);
|
|
void (*restore_sched_clock_state)(void);
|
|
void (*apic_post_init)(void);
|
|
};
|
|
|
|
struct pci_dev;
|
|
struct msi_msg;
|
|
|
|
struct x86_msi_ops {
|
|
int (*setup_msi_irqs)(struct pci_dev *dev, int nvec, int type);
|
|
void (*compose_msi_msg)(struct pci_dev *dev, unsigned int irq,
|
|
unsigned int dest, struct msi_msg *msg,
|
|
u8 hpet_id);
|
|
void (*teardown_msi_irq)(unsigned int irq);
|
|
void (*teardown_msi_irqs)(struct pci_dev *dev);
|
|
void (*restore_msi_irqs)(struct pci_dev *dev);
|
|
int (*setup_hpet_msi)(unsigned int irq, unsigned int id);
|
|
};
|
|
|
|
struct IO_APIC_route_entry;
|
|
struct io_apic_irq_attr;
|
|
struct irq_data;
|
|
struct cpumask;
|
|
|
|
struct x86_io_apic_ops {
|
|
void (*init) (void);
|
|
unsigned int (*read) (unsigned int apic, unsigned int reg);
|
|
void (*write) (unsigned int apic, unsigned int reg, unsigned int value);
|
|
void (*modify) (unsigned int apic, unsigned int reg, unsigned int value);
|
|
void (*disable)(void);
|
|
void (*print_entries)(unsigned int apic, unsigned int nr_entries);
|
|
int (*set_affinity)(struct irq_data *data,
|
|
const struct cpumask *mask,
|
|
bool force);
|
|
int (*setup_entry)(int irq, struct IO_APIC_route_entry *entry,
|
|
unsigned int destination, int vector,
|
|
struct io_apic_irq_attr *attr);
|
|
void (*eoi_ioapic_pin)(int apic, int pin, int vector);
|
|
};
|
|
|
|
extern struct x86_init_ops x86_init;
|
|
extern struct x86_cpuinit_ops x86_cpuinit;
|
|
extern struct x86_platform_ops x86_platform;
|
|
extern struct x86_msi_ops x86_msi;
|
|
extern struct x86_io_apic_ops x86_io_apic_ops;
|
|
extern void x86_init_noop(void);
|
|
extern void x86_init_uint_noop(unsigned int unused);
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apicdef.h" 1
|
|
# 178 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apicdef.h"
|
|
struct local_apic {
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_01;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_02;
|
|
|
|
struct {
|
|
unsigned int __reserved_1 : 24,
|
|
phys_apic_id : 4,
|
|
__reserved_2 : 4;
|
|
unsigned int __reserved[3];
|
|
} id;
|
|
|
|
const
|
|
struct {
|
|
unsigned int version : 8,
|
|
__reserved_1 : 8,
|
|
max_lvt : 8,
|
|
__reserved_2 : 8;
|
|
unsigned int __reserved[3];
|
|
} version;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_03;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_04;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_05;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_06;
|
|
|
|
struct {
|
|
unsigned int priority : 8,
|
|
__reserved_1 : 24;
|
|
unsigned int __reserved_2[3];
|
|
} tpr;
|
|
|
|
const
|
|
struct {
|
|
unsigned int priority : 8,
|
|
__reserved_1 : 24;
|
|
unsigned int __reserved_2[3];
|
|
} apr;
|
|
|
|
const
|
|
struct {
|
|
unsigned int priority : 8,
|
|
__reserved_1 : 24;
|
|
unsigned int __reserved_2[3];
|
|
} ppr;
|
|
|
|
struct {
|
|
unsigned int eoi;
|
|
unsigned int __reserved[3];
|
|
} eoi;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_07;
|
|
|
|
struct {
|
|
unsigned int __reserved_1 : 24,
|
|
logical_dest : 8;
|
|
unsigned int __reserved_2[3];
|
|
} ldr;
|
|
|
|
struct {
|
|
unsigned int __reserved_1 : 28,
|
|
model : 4;
|
|
unsigned int __reserved_2[3];
|
|
} dfr;
|
|
|
|
struct {
|
|
unsigned int spurious_vector : 8,
|
|
apic_enabled : 1,
|
|
focus_cpu : 1,
|
|
__reserved_2 : 22;
|
|
unsigned int __reserved_3[3];
|
|
} svr;
|
|
|
|
struct {
|
|
unsigned int bitfield;
|
|
unsigned int __reserved[3];
|
|
} isr [8];
|
|
|
|
struct {
|
|
unsigned int bitfield;
|
|
unsigned int __reserved[3];
|
|
} tmr [8];
|
|
|
|
struct {
|
|
unsigned int bitfield;
|
|
unsigned int __reserved[3];
|
|
} irr [8];
|
|
|
|
union {
|
|
struct {
|
|
unsigned int send_cs_error : 1,
|
|
receive_cs_error : 1,
|
|
send_accept_error : 1,
|
|
receive_accept_error : 1,
|
|
__reserved_1 : 1,
|
|
send_illegal_vector : 1,
|
|
receive_illegal_vector : 1,
|
|
illegal_register_address : 1,
|
|
__reserved_2 : 24;
|
|
unsigned int __reserved_3[3];
|
|
} error_bits;
|
|
struct {
|
|
unsigned int errors;
|
|
unsigned int __reserved_3[3];
|
|
} all_errors;
|
|
} esr;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_08;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_09;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_10;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_11;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_12;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_13;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_14;
|
|
|
|
struct {
|
|
unsigned int vector : 8,
|
|
delivery_mode : 3,
|
|
destination_mode : 1,
|
|
delivery_status : 1,
|
|
__reserved_1 : 1,
|
|
level : 1,
|
|
trigger : 1,
|
|
__reserved_2 : 2,
|
|
shorthand : 2,
|
|
__reserved_3 : 12;
|
|
unsigned int __reserved_4[3];
|
|
} icr1;
|
|
|
|
struct {
|
|
union {
|
|
unsigned int __reserved_1 : 24,
|
|
phys_dest : 4,
|
|
__reserved_2 : 4;
|
|
unsigned int __reserved_3 : 24,
|
|
logical_dest : 8;
|
|
} dest;
|
|
unsigned int __reserved_4[3];
|
|
} icr2;
|
|
|
|
struct {
|
|
unsigned int vector : 8,
|
|
__reserved_1 : 4,
|
|
delivery_status : 1,
|
|
__reserved_2 : 3,
|
|
mask : 1,
|
|
timer_mode : 1,
|
|
__reserved_3 : 14;
|
|
unsigned int __reserved_4[3];
|
|
} lvt_timer;
|
|
|
|
struct {
|
|
unsigned int vector : 8,
|
|
delivery_mode : 3,
|
|
__reserved_1 : 1,
|
|
delivery_status : 1,
|
|
__reserved_2 : 3,
|
|
mask : 1,
|
|
__reserved_3 : 15;
|
|
unsigned int __reserved_4[3];
|
|
} lvt_thermal;
|
|
|
|
struct {
|
|
unsigned int vector : 8,
|
|
delivery_mode : 3,
|
|
__reserved_1 : 1,
|
|
delivery_status : 1,
|
|
__reserved_2 : 3,
|
|
mask : 1,
|
|
__reserved_3 : 15;
|
|
unsigned int __reserved_4[3];
|
|
} lvt_pc;
|
|
|
|
struct {
|
|
unsigned int vector : 8,
|
|
delivery_mode : 3,
|
|
__reserved_1 : 1,
|
|
delivery_status : 1,
|
|
polarity : 1,
|
|
remote_irr : 1,
|
|
trigger : 1,
|
|
mask : 1,
|
|
__reserved_2 : 15;
|
|
unsigned int __reserved_3[3];
|
|
} lvt_lint0;
|
|
|
|
struct {
|
|
unsigned int vector : 8,
|
|
delivery_mode : 3,
|
|
__reserved_1 : 1,
|
|
delivery_status : 1,
|
|
polarity : 1,
|
|
remote_irr : 1,
|
|
trigger : 1,
|
|
mask : 1,
|
|
__reserved_2 : 15;
|
|
unsigned int __reserved_3[3];
|
|
} lvt_lint1;
|
|
|
|
struct {
|
|
unsigned int vector : 8,
|
|
__reserved_1 : 4,
|
|
delivery_status : 1,
|
|
__reserved_2 : 3,
|
|
mask : 1,
|
|
__reserved_3 : 15;
|
|
unsigned int __reserved_4[3];
|
|
} lvt_error;
|
|
|
|
struct {
|
|
unsigned int initial_count;
|
|
unsigned int __reserved_2[3];
|
|
} timer_icr;
|
|
|
|
const
|
|
struct {
|
|
unsigned int curr_count;
|
|
unsigned int __reserved_2[3];
|
|
} timer_ccr;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_16;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_17;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_18;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_19;
|
|
|
|
struct {
|
|
unsigned int divisor : 4,
|
|
__reserved_1 : 28;
|
|
unsigned int __reserved_2[3];
|
|
} timer_dcr;
|
|
|
|
struct { unsigned int __reserved[4]; } __reserved_20;
|
|
|
|
} __attribute__ ((packed));
|
|
# 434 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apicdef.h"
|
|
enum ioapic_irq_destination_types {
|
|
dest_Fixed = 0,
|
|
dest_LowestPrio = 1,
|
|
dest_SMI = 2,
|
|
dest__reserved_1 = 3,
|
|
dest_NMI = 4,
|
|
dest_INIT = 5,
|
|
dest__reserved_2 = 6,
|
|
dest_ExtINT = 7
|
|
};
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec.h" 2
|
|
|
|
extern int apic_version[];
|
|
extern int pic_mode;
|
|
# 40 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec.h"
|
|
extern unsigned long mp_bus_not_pci[(((256) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
|
|
|
|
extern unsigned int boot_cpu_physical_apicid;
|
|
extern unsigned long mp_lapic_addr;
|
|
|
|
|
|
extern int smp_found_config;
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void get_smp_config(void)
|
|
{
|
|
x86_init.mpparse.get_smp_config(0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void early_get_smp_config(void)
|
|
{
|
|
x86_init.mpparse.get_smp_config(1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void find_smp_config(void)
|
|
{
|
|
x86_init.mpparse.find_smp_config();
|
|
}
|
|
|
|
|
|
extern void early_reserve_e820_mpc_new(void);
|
|
extern int enable_update_mptable;
|
|
extern int default_mpc_apic_id(struct mpc_cpu *m);
|
|
extern void default_smp_read_mpc_oem(struct mpc_table *mpc);
|
|
|
|
extern void default_mpc_oem_bus_info(struct mpc_bus *m, char *str);
|
|
|
|
|
|
|
|
extern void default_find_smp_config(void);
|
|
extern void default_get_smp_config(unsigned int early);
|
|
# 88 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec.h"
|
|
int generic_processor_info(int apicid, int version);
|
|
|
|
|
|
|
|
struct physid_mask {
|
|
unsigned long mask[(((32768) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
|
|
};
|
|
|
|
typedef struct physid_mask physid_mask_t;
|
|
# 131 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mpspec.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long physids_coerce(physid_mask_t *map)
|
|
{
|
|
return map->mask[0];
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void physids_promote(unsigned long physids, physid_mask_t *map)
|
|
{
|
|
bitmap_zero((*map).mask, 32768);
|
|
map->mask[0] = physids;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void physid_set_mask_of_physid(int physid, physid_mask_t *map)
|
|
{
|
|
bitmap_zero((*map).mask, 32768);
|
|
set_bit(physid, (*map).mask);
|
|
}
|
|
|
|
|
|
|
|
|
|
extern physid_mask_t phys_cpu_present_map;
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/smp.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pm.h" 1
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pm.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/workqueue.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timer.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h" 1
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jiffies.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timex.h" 1
|
|
# 56 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timex.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/timex.h" 1
|
|
# 64 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timex.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/param.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/param.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/param.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/param.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/param.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/param.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/param.h" 2
|
|
# 64 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timex.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/timex.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/tsc.h" 1
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/tsc.h"
|
|
typedef unsigned long long cycles_t;
|
|
|
|
extern unsigned int cpu_khz;
|
|
extern unsigned int tsc_khz;
|
|
|
|
extern void disable_TSC(void);
|
|
|
|
static inline __attribute__((no_instrument_function)) cycles_t get_cycles(void)
|
|
{
|
|
unsigned long long ret = 0;
|
|
|
|
|
|
|
|
|
|
|
|
(ret = paravirt_read_tsc());
|
|
|
|
return ret;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) cycles_t vget_cycles(void)
|
|
{
|
|
# 45 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/tsc.h"
|
|
return (cycles_t)__native_read_tsc();
|
|
}
|
|
|
|
extern void tsc_init(void);
|
|
extern void mark_tsc_unstable(char *reason);
|
|
extern int unsynchronized_tsc(void);
|
|
extern int check_tsc_unstable(void);
|
|
extern int check_tsc_disabled(void);
|
|
extern unsigned long native_calibrate_tsc(void);
|
|
|
|
extern int tsc_clocksource_reliable;
|
|
|
|
|
|
|
|
|
|
|
|
extern void check_tsc_sync_source(int cpu);
|
|
extern void check_tsc_sync_target(void);
|
|
|
|
extern int notsc_setup(char *);
|
|
extern void tsc_save_sched_clock_state(void);
|
|
extern void tsc_restore_sched_clock_state(void);
|
|
|
|
|
|
unsigned long try_msr_calibrate_tsc(void);
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/timex.h" 2
|
|
# 66 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timex.h" 2
|
|
# 139 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timex.h"
|
|
extern unsigned long tick_usec;
|
|
extern unsigned long tick_nsec;
|
|
# 154 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jiffies.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/param.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jiffies.h" 2
|
|
# 57 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jiffies.h"
|
|
extern int register_refined_jiffies(long clock_tick_rate);
|
|
# 76 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jiffies.h"
|
|
extern u64 __attribute__((section(".data"))) jiffies_64;
|
|
extern unsigned long volatile __attribute__((section(".data"))) jiffies;
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 get_jiffies_64(void)
|
|
{
|
|
return (u64)jiffies;
|
|
}
|
|
# 182 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jiffies.h"
|
|
extern unsigned long preset_lpj;
|
|
# 283 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h" 2
|
|
# 37 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
union ktime {
|
|
s64 tv64;
|
|
};
|
|
|
|
typedef union ktime ktime_t;
|
|
# 50 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
static 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__((no_instrument_function)) ktime_t timespec64_to_ktime(struct timespec ts)
|
|
{
|
|
return ktime_set(ts.tv_sec, ts.tv_nsec);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) ktime_t timeval_to_ktime(struct timeval tv)
|
|
{
|
|
return ktime_set(tv.tv_sec, tv.tv_usec * 1000L);
|
|
}
|
|
# 120 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
static inline __attribute__((no_instrument_function)) int ktime_equal(const ktime_t cmp1, const ktime_t cmp2)
|
|
{
|
|
return cmp1.tv64 == cmp2.tv64;
|
|
}
|
|
# 135 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
static inline __attribute__((no_instrument_function)) bool ktime_after(const ktime_t cmp1, const ktime_t cmp2)
|
|
{
|
|
return ktime_compare(cmp1, cmp2) > 0;
|
|
}
|
|
# 163 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
static inline __attribute__((no_instrument_function)) bool ktime_before(const ktime_t cmp1, const ktime_t cmp2)
|
|
{
|
|
return ktime_compare(cmp1, cmp2) < 0;
|
|
}
|
|
# 188 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
static inline __attribute__((no_instrument_function)) s64 ktime_divns(const ktime_t kt, s64 div)
|
|
{
|
|
|
|
|
|
|
|
|
|
({ int __ret_warn_on = !!(div < 0); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h", 194); __builtin_expect(!!(__ret_warn_on), 0); });
|
|
return kt.tv64 / div;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) s64 ktime_to_us(const ktime_t kt)
|
|
{
|
|
return ktime_divns(kt, 1000L);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) s64 ktime_to_ms(const ktime_t kt)
|
|
{
|
|
return ktime_divns(kt, 1000000L);
|
|
}
|
|
|
|
static 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__((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__((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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
static inline __attribute__((no_instrument_function)) 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
static inline __attribute__((no_instrument_function)) bool ktime_to_timespec64_cond(const ktime_t kt,
|
|
struct timespec *ts)
|
|
{
|
|
if (kt.tv64) {
|
|
*ts = ns_to_timespec((kt).tv64);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
# 278 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h"
|
|
static 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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timekeeping.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
void timekeeping_init(void);
|
|
extern int timekeeping_suspended;
|
|
|
|
|
|
|
|
|
|
extern void do_gettimeofday(struct timeval *tv);
|
|
extern int do_settimeofday64(const struct timespec *ts);
|
|
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_coarse64(void);
|
|
extern void getrawmonotonic64(struct timespec *ts);
|
|
extern void ktime_get_ts64(struct timespec *ts);
|
|
extern time64_t ktime_get_seconds(void);
|
|
extern time64_t ktime_get_real_seconds(void);
|
|
|
|
extern int __getnstimeofday64(struct timespec *tv);
|
|
extern void getnstimeofday64(struct timespec *tv);
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int do_settimeofday(const struct timespec *ts)
|
|
{
|
|
return do_settimeofday64(ts);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int __getnstimeofday(struct timespec *ts)
|
|
{
|
|
return __getnstimeofday64(ts);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void getnstimeofday(struct timespec *ts)
|
|
{
|
|
getnstimeofday64(ts);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void ktime_get_ts(struct timespec *ts)
|
|
{
|
|
ktime_get_ts64(ts);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void ktime_get_real_ts(struct timespec *ts)
|
|
{
|
|
getnstimeofday64(ts);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void getrawmonotonic(struct timespec *ts)
|
|
{
|
|
getrawmonotonic64(ts);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct timespec get_monotonic_coarse(void)
|
|
{
|
|
return get_monotonic_coarse64();
|
|
}
|
|
# 134 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timekeeping.h"
|
|
extern void getboottime(struct timespec *ts);
|
|
# 143 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) ktime_t ktime_get_real(void)
|
|
{
|
|
return ktime_get_with_offset(TK_OFFS_REAL);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) ktime_t ktime_get_boottime(void)
|
|
{
|
|
return ktime_get_with_offset(TK_OFFS_BOOT);
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) ktime_t ktime_get_clocktai(void)
|
|
{
|
|
return ktime_get_with_offset(TK_OFFS_TAI);
|
|
}
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) u64 ktime_get_ns(void)
|
|
{
|
|
return ((ktime_get()).tv64);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 ktime_get_real_ns(void)
|
|
{
|
|
return ((ktime_get_real()).tv64);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 ktime_get_boot_ns(void)
|
|
{
|
|
return ((ktime_get_boottime()).tv64);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void get_monotonic_boottime(struct timespec *ts)
|
|
{
|
|
*ts = ns_to_timespec((ktime_get_boottime()).tv64);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void timekeeping_clocktai(struct timespec *ts)
|
|
{
|
|
*ts = ns_to_timespec((ktime_get_clocktai()).tv64);
|
|
}
|
|
|
|
|
|
|
|
|
|
extern void timekeeping_inject_sleeptime64(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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ktime.h" 2
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
|
|
int start_pid;
|
|
void *start_site;
|
|
char start_comm[16];
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
extern struct tvec_base boot_tvec_bases;
|
|
# 94 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) void destroy_timer_on_stack(struct timer_list *timer) { }
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timer.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timer.h"
|
|
extern unsigned long get_next_timer_interrupt(unsigned long now);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern int timer_stats_active;
|
|
|
|
|
|
|
|
extern void init_timer_stats(void);
|
|
|
|
extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
|
|
void *timerf, char *comm,
|
|
unsigned int timer_flag);
|
|
|
|
extern void __timer_stats_timer_set_start_info(struct timer_list *timer,
|
|
void *addr);
|
|
|
|
static inline __attribute__((no_instrument_function)) void timer_stats_timer_set_start_info(struct timer_list *timer)
|
|
{
|
|
if (__builtin_expect(!!(!timer_stats_active), 1))
|
|
return;
|
|
__timer_stats_timer_set_start_info(timer, __builtin_return_address(0));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void timer_stats_timer_clear_start_info(struct timer_list *timer)
|
|
{
|
|
timer->start_site = ((void *)0);
|
|
}
|
|
# 240 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timer.h"
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 = 256,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 = 64 - 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/workqueue.h"
|
|
struct workqueue_attrs {
|
|
int nice;
|
|
cpumask_var_t cpumask;
|
|
bool no_numa;
|
|
};
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/workqueue.h"
|
|
static inline __attribute__((no_instrument_function)) void __init_work(struct work_struct *work, int onstack) { }
|
|
static inline __attribute__((no_instrument_function)) void destroy_work_on_stack(struct work_struct *work) { }
|
|
static inline __attribute__((no_instrument_function)) void destroy_delayed_work_on_stack(struct delayed_work *work) { }
|
|
static inline __attribute__((no_instrument_function)) unsigned int work_static(struct work_struct *work) { return 0; }
|
|
# 281 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/workqueue.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/workqueue.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/workqueue.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/workqueue.h"
|
|
static inline __attribute__((no_instrument_function)) bool schedule_work_on(int cpu, struct work_struct *work)
|
|
{
|
|
return queue_work_on(cpu, system_wq, work);
|
|
}
|
|
# 531 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/workqueue.h"
|
|
static inline __attribute__((no_instrument_function)) bool schedule_work(struct work_struct *work)
|
|
{
|
|
return queue_work(system_wq, work);
|
|
}
|
|
# 545 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/workqueue.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/workqueue.h"
|
|
static 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__((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);
|
|
# 26 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pm.h" 2
|
|
# 34 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pm.h"
|
|
extern void (*pm_power_off)(void);
|
|
extern void (*pm_power_off_prepare)(void);
|
|
|
|
struct device;
|
|
|
|
extern void pm_vt_switch_required(struct device *dev, bool required);
|
|
extern void pm_vt_switch_unregister(struct device *dev);
|
|
# 54 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pm.h"
|
|
struct device;
|
|
|
|
|
|
extern const char power_group_name[];
|
|
|
|
|
|
|
|
|
|
typedef struct pm_message {
|
|
int event;
|
|
} pm_message_t;
|
|
# 295 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
};
|
|
# 501 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pm.h"
|
|
enum rpm_status {
|
|
RPM_ACTIVE = 0,
|
|
RPM_RESUMING,
|
|
RPM_SUSPENDED,
|
|
RPM_SUSPENDING,
|
|
};
|
|
# 523 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 pm_subsys_data {
|
|
spinlock_t lock;
|
|
unsigned int refcount;
|
|
|
|
struct list_head clock_list;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
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;
|
|
|
|
struct list_head entry;
|
|
struct completion completion;
|
|
struct wakeup_source *wakeup;
|
|
bool wakeup_path:1;
|
|
bool syscore:1;
|
|
|
|
|
|
|
|
|
|
struct timer_list suspend_timer;
|
|
unsigned long timer_expires;
|
|
struct work_struct work;
|
|
wait_queue_head_t wait_queue;
|
|
atomic_t usage_count;
|
|
atomic_t child_count;
|
|
unsigned int disable_depth:3;
|
|
unsigned int idle_notification:1;
|
|
unsigned int request_pending:1;
|
|
unsigned int deferred_resume:1;
|
|
unsigned int run_wake:1;
|
|
unsigned int runtime_auto:1;
|
|
unsigned int no_callbacks:1;
|
|
unsigned int irq_safe:1;
|
|
unsigned int use_autosuspend:1;
|
|
unsigned int timer_autosuspends:1;
|
|
unsigned int memalloc_noio:1;
|
|
enum rpm_request request;
|
|
enum rpm_status runtime_status;
|
|
int runtime_error;
|
|
int autosuspend_delay;
|
|
unsigned long last_busy;
|
|
unsigned long active_jiffies;
|
|
unsigned long suspended_jiffies;
|
|
unsigned long accounting_timestamp;
|
|
|
|
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);
|
|
};
|
|
# 667 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pm.h"
|
|
extern void device_pm_lock(void);
|
|
extern void dpm_resume_start(pm_message_t state);
|
|
extern void dpm_resume_end(pm_message_t state);
|
|
extern void dpm_resume_noirq(pm_message_t state);
|
|
extern void dpm_resume_early(pm_message_t state);
|
|
extern void dpm_resume(pm_message_t state);
|
|
extern void dpm_complete(pm_message_t state);
|
|
|
|
extern void device_pm_unlock(void);
|
|
extern int dpm_suspend_end(pm_message_t state);
|
|
extern int dpm_suspend_start(pm_message_t state);
|
|
extern int dpm_suspend_noirq(pm_message_t state);
|
|
extern int dpm_suspend_late(pm_message_t state);
|
|
extern int dpm_suspend(pm_message_t state);
|
|
extern int dpm_prepare(pm_message_t state);
|
|
|
|
extern void __suspend_report_result(const char *function, void *fn, int ret);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern int device_pm_wait_for_dev(struct device *sub, struct device *dev);
|
|
extern void dpm_for_each_dev(void *data, void (*fn)(struct device *, void *));
|
|
|
|
extern int pm_generic_prepare(struct device *dev);
|
|
extern int pm_generic_suspend_late(struct device *dev);
|
|
extern int pm_generic_suspend_noirq(struct device *dev);
|
|
extern int pm_generic_suspend(struct device *dev);
|
|
extern int pm_generic_resume_early(struct device *dev);
|
|
extern int pm_generic_resume_noirq(struct device *dev);
|
|
extern int pm_generic_resume(struct device *dev);
|
|
extern int pm_generic_freeze_noirq(struct device *dev);
|
|
extern int pm_generic_freeze_late(struct device *dev);
|
|
extern int pm_generic_freeze(struct device *dev);
|
|
extern int pm_generic_thaw_noirq(struct device *dev);
|
|
extern int pm_generic_thaw_early(struct device *dev);
|
|
extern int pm_generic_thaw(struct device *dev);
|
|
extern int pm_generic_restore_noirq(struct device *dev);
|
|
extern int pm_generic_restore_early(struct device *dev);
|
|
extern int pm_generic_restore(struct device *dev);
|
|
extern int pm_generic_poweroff_noirq(struct device *dev);
|
|
extern int pm_generic_poweroff_late(struct device *dev);
|
|
extern int pm_generic_poweroff(struct device *dev);
|
|
extern void pm_generic_complete(struct device *dev);
|
|
# 758 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pm.h"
|
|
enum dpm_order {
|
|
DPM_ORDER_NONE,
|
|
DPM_ORDER_DEV_AFTER_PARENT,
|
|
DPM_ORDER_PARENT_BEFORE_DEV,
|
|
DPM_ORDER_DEV_LAST,
|
|
};
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h" 1
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/acpi.h" 1
|
|
# 26 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/acpi.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/acpi/pdc_intel.h" 1
|
|
# 27 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/acpi.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/numa.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/nodemask.h" 1
|
|
# 98 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/nodemask.h"
|
|
typedef struct { unsigned long bits[((((1 << 6)) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))]; } nodemask_t;
|
|
extern nodemask_t _unused_nodemask_arg_;
|
|
# 111 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/nodemask.h"
|
|
static 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__((no_instrument_function)) void __node_clear(int node, volatile nodemask_t *dstp)
|
|
{
|
|
clear_bit(node, dstp->bits);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __nodes_setall(nodemask_t *dstp, int nbits)
|
|
{
|
|
bitmap_fill(dstp->bits, nbits);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void __nodes_clear(nodemask_t *dstp, int nbits)
|
|
{
|
|
bitmap_zero(dstp->bits, nbits);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((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__((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__((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__((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__((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__((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__((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__((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__((no_instrument_function)) int __nodes_empty(const nodemask_t *srcp, int nbits)
|
|
{
|
|
return bitmap_empty(srcp->bits, nbits);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int __nodes_full(const nodemask_t *srcp, int nbits)
|
|
{
|
|
return bitmap_full(srcp->bits, nbits);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int __nodes_weight(const nodemask_t *srcp, int nbits)
|
|
{
|
|
return bitmap_weight(srcp->bits, nbits);
|
|
}
|
|
|
|
|
|
|
|
static 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__((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__((no_instrument_function)) int __first_node(const nodemask_t *srcp)
|
|
{
|
|
return ({ int __min1 = ((1 << 6)); int __min2 = (find_first_bit(srcp->bits, (1 << 6))); __min1 < __min2 ? __min1: __min2; });
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int __next_node(int n, const nodemask_t *srcp)
|
|
{
|
|
return ({ int __min1 = ((1 << 6)); int __min2 = (find_next_bit(srcp->bits, (1 << 6), n+1)); __min1 < __min2 ? __min1: __min2; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void init_nodemask_of_node(nodemask_t *mask, int node)
|
|
{
|
|
__nodes_clear(&(*mask), (1 << 6));
|
|
__node_set((node), &(*mask));
|
|
}
|
|
# 275 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/nodemask.h"
|
|
static inline __attribute__((no_instrument_function)) int __first_unset_node(const nodemask_t *maskp)
|
|
{
|
|
return ({ int __min1 = ((1 << 6)); int __min2 = (find_first_zero_bit(maskp->bits, (1 << 6))); __min1 < __min2 ? __min1: __min2; })
|
|
;
|
|
}
|
|
# 309 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/nodemask.h"
|
|
static 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__((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__((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__((no_instrument_function)) int __nodelist_parse(const char *buf, nodemask_t *dstp, int nbits)
|
|
{
|
|
return bitmap_parselist(buf, dstp->bits, nbits);
|
|
}
|
|
|
|
|
|
|
|
static 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__((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__((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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/nodemask.h"
|
|
enum node_states {
|
|
N_POSSIBLE,
|
|
N_ONLINE,
|
|
N_NORMAL_MEMORY,
|
|
|
|
|
|
|
|
N_HIGH_MEMORY = N_NORMAL_MEMORY,
|
|
|
|
|
|
N_MEMORY,
|
|
|
|
|
|
|
|
N_CPU,
|
|
NR_NODE_STATES
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern nodemask_t node_states[NR_NODE_STATES];
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int node_state(int node, enum node_states state)
|
|
{
|
|
return (__builtin_constant_p(((node))) ? constant_test_bit(((node)), ((node_states[state]).bits)) : variable_test_bit(((node)), ((node_states[state]).bits)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void node_set_state(int node, enum node_states state)
|
|
{
|
|
__node_set(node, &node_states[state]);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void node_clear_state(int node, enum node_states state)
|
|
{
|
|
__node_clear(node, &node_states[state]);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int num_node_state(enum node_states state)
|
|
{
|
|
return __nodes_weight(&(node_states[state]), (1 << 6));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int next_online_node(int nid)
|
|
{
|
|
return __next_node((nid), &(node_states[N_ONLINE]));
|
|
}
|
|
static inline __attribute__((no_instrument_function)) int next_memory_node(int nid)
|
|
{
|
|
return __next_node((nid), &(node_states[N_MEMORY]));
|
|
}
|
|
|
|
extern int nr_node_ids;
|
|
extern int nr_online_nodes;
|
|
|
|
static inline __attribute__((no_instrument_function)) void node_set_online(int nid)
|
|
{
|
|
node_set_state(nid, N_ONLINE);
|
|
nr_online_nodes = num_node_state(N_ONLINE);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void node_set_offline(int nid)
|
|
{
|
|
node_clear_state(nid, N_ONLINE);
|
|
nr_online_nodes = num_node_state(N_ONLINE);
|
|
}
|
|
# 493 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/nodemask.h"
|
|
extern int node_random(const nodemask_t *maskp);
|
|
# 527 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/nodemask.h"
|
|
struct nodemask_scratch {
|
|
nodemask_t mask1;
|
|
nodemask_t mask2;
|
|
};
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/numa.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/topology.h" 1
|
|
# 51 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/topology.h"
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(int) x86_cpu_to_node_map; extern __typeof__(int) *x86_cpu_to_node_map_early_ptr; extern __typeof__(int) x86_cpu_to_node_map_early_map[];
|
|
# 65 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/topology.h"
|
|
static inline __attribute__((no_instrument_function)) int early_cpu_to_node(int cpu)
|
|
{
|
|
return *((x86_cpu_to_node_map_early_ptr) ? &(x86_cpu_to_node_map_early_ptr)[cpu] : &(*({ do { const void *__vpp_verify = (typeof((&(x86_cpu_to_node_map)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((&(x86_cpu_to_node_map)))) *)((&(x86_cpu_to_node_map))))); (typeof((typeof(*((&(x86_cpu_to_node_map)))) *)((&(x86_cpu_to_node_map))))) (__ptr + (((__per_cpu_offset[(cpu)])))); }); })));
|
|
}
|
|
|
|
|
|
|
|
|
|
extern cpumask_var_t node_to_cpumask_map[(1 << 6)];
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) const struct cpumask *cpumask_of_node(int node)
|
|
{
|
|
return node_to_cpumask_map[node];
|
|
}
|
|
|
|
|
|
extern void setup_node_to_cpumask_map(void);
|
|
# 95 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/topology.h"
|
|
extern int __node_distance(int, int);
|
|
# 118 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/topology.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/topology.h" 1
|
|
# 119 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/topology.h" 2
|
|
|
|
extern const struct cpumask *cpu_coregroup_mask(int cpu);
|
|
# 130 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/topology.h"
|
|
static inline __attribute__((no_instrument_function)) void arch_fix_phys_package_id(int num, u32 slot)
|
|
{
|
|
}
|
|
|
|
struct pci_bus;
|
|
int x86_pci_root_bus_node(int bus);
|
|
void x86_pci_root_bus_resources(int bus, struct list_head *resources);
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/numa.h" 2
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/numa.h"
|
|
extern int numa_off;
|
|
# 30 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/numa.h"
|
|
extern s16 __apicid_to_node[32768];
|
|
extern nodemask_t numa_nodes_parsed __attribute__ ((__section__(".init.data")));
|
|
|
|
extern int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) numa_add_memblk(int nodeid, u64 start, u64 end);
|
|
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) numa_set_distance(int from, int to, int distance);
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_apicid_to_node(int apicid, s16 node)
|
|
{
|
|
__apicid_to_node[apicid] = node;
|
|
}
|
|
|
|
extern int numa_cpu_node(int cpu);
|
|
# 59 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/numa.h"
|
|
extern void numa_set_node(int cpu, int node);
|
|
extern void numa_clear_node(int cpu);
|
|
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) init_cpu_to_node(void);
|
|
extern void numa_add_cpu(int cpu);
|
|
extern void numa_remove_cpu(int cpu);
|
|
# 29 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/acpi.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h" 1
|
|
# 30 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/acpi.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mmu.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mmu.h"
|
|
typedef struct {
|
|
struct ldt_struct *ldt;
|
|
|
|
|
|
|
|
unsigned short ia32_compat;
|
|
|
|
|
|
struct mutex lock;
|
|
void *vdso;
|
|
} mm_context_t;
|
|
|
|
|
|
void leave_mm(int cpu);
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/acpi.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/realmode.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h" 1
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h"
|
|
# 1 "arch/x86/include/generated/asm/early_ioremap.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/early_ioremap.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/early_ioremap.h"
|
|
extern void *early_ioremap(resource_size_t phys_addr,
|
|
unsigned long size);
|
|
extern void *early_memremap(resource_size_t phys_addr,
|
|
unsigned long size);
|
|
extern void early_iounmap(void *addr, unsigned long size);
|
|
extern void early_memunmap(void *addr, unsigned long size);
|
|
|
|
|
|
|
|
|
|
|
|
extern void early_ioremap_shutdown(void);
|
|
|
|
|
|
|
|
extern void early_ioremap_init(void);
|
|
|
|
|
|
extern void early_ioremap_setup(void);
|
|
|
|
|
|
|
|
|
|
|
|
extern void early_ioremap_reset(void);
|
|
# 1 "arch/x86/include/generated/asm/early_ioremap.h" 2
|
|
# 43 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h" 2
|
|
# 54 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned char readb(const volatile void *addr) { unsigned char ret; asm volatile("mov" "b" " %1,%0":"=q" (ret) :"m" (*(volatile unsigned char *)addr) :"memory"); return ret; }
|
|
static inline __attribute__((no_instrument_function)) unsigned short readw(const volatile void *addr) { unsigned short ret; asm volatile("mov" "w" " %1,%0":"=r" (ret) :"m" (*(volatile unsigned short *)addr) :"memory"); return ret; }
|
|
static inline __attribute__((no_instrument_function)) unsigned int readl(const volatile void *addr) { unsigned int ret; asm volatile("mov" "l" " %1,%0":"=r" (ret) :"m" (*(volatile unsigned int *)addr) :"memory"); return ret; }
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned char __readb(const volatile void *addr) { unsigned char ret; asm volatile("mov" "b" " %1,%0":"=q" (ret) :"m" (*(volatile unsigned char *)addr) ); return ret; }
|
|
static inline __attribute__((no_instrument_function)) unsigned short __readw(const volatile void *addr) { unsigned short ret; asm volatile("mov" "w" " %1,%0":"=r" (ret) :"m" (*(volatile unsigned short *)addr) ); return ret; }
|
|
static inline __attribute__((no_instrument_function)) unsigned int __readl(const volatile void *addr) { unsigned int ret; asm volatile("mov" "l" " %1,%0":"=r" (ret) :"m" (*(volatile unsigned int *)addr) ); return ret; }
|
|
|
|
static inline __attribute__((no_instrument_function)) void writeb(unsigned char val, volatile void *addr) { asm volatile("mov" "b" " %0,%1": :"q" (val), "m" (*(volatile unsigned char *)addr) :"memory"); }
|
|
static inline __attribute__((no_instrument_function)) void writew(unsigned short val, volatile void *addr) { asm volatile("mov" "w" " %0,%1": :"r" (val), "m" (*(volatile unsigned short *)addr) :"memory"); }
|
|
static inline __attribute__((no_instrument_function)) void writel(unsigned int val, volatile void *addr) { asm volatile("mov" "l" " %0,%1": :"r" (val), "m" (*(volatile unsigned int *)addr) :"memory"); }
|
|
|
|
static inline __attribute__((no_instrument_function)) void __writeb(unsigned char val, volatile void *addr) { asm volatile("mov" "b" " %0,%1": :"q" (val), "m" (*(volatile unsigned char *)addr) ); }
|
|
static inline __attribute__((no_instrument_function)) void __writew(unsigned short val, volatile void *addr) { asm volatile("mov" "w" " %0,%1": :"r" (val), "m" (*(volatile unsigned short *)addr) ); }
|
|
static inline __attribute__((no_instrument_function)) void __writel(unsigned int val, volatile void *addr) { asm volatile("mov" "l" " %0,%1": :"r" (val), "m" (*(volatile unsigned int *)addr) ); }
|
|
# 88 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long readq(const volatile void *addr) { unsigned long ret; asm volatile("mov" "q" " %1,%0":"=r" (ret) :"m" (*(volatile unsigned long *)addr) :"memory"); return ret; }
|
|
static inline __attribute__((no_instrument_function)) void writeq(unsigned long val, volatile void *addr) { asm volatile("mov" "q" " %0,%1": :"r" (val), "m" (*(volatile unsigned long *)addr) :"memory"); }
|
|
# 116 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h"
|
|
static inline __attribute__((no_instrument_function)) phys_addr_t virt_to_phys(volatile void *address)
|
|
{
|
|
return __phys_addr_nodebug((unsigned long)(address));
|
|
}
|
|
# 134 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h"
|
|
static inline __attribute__((no_instrument_function)) void *phys_to_virt(phys_addr_t address)
|
|
{
|
|
return ((void *)((unsigned long)(address)+((unsigned long)(0xffff880000000000UL))));
|
|
}
|
|
# 149 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned int isa_virt_to_bus(volatile void *address)
|
|
{
|
|
return (unsigned int)virt_to_phys(address);
|
|
}
|
|
# 179 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h"
|
|
extern void *ioremap_nocache(resource_size_t offset, unsigned long size);
|
|
extern void *ioremap_cache(resource_size_t offset, unsigned long size);
|
|
extern void *ioremap_prot(resource_size_t offset, unsigned long size,
|
|
unsigned long prot_val);
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void *ioremap(resource_size_t offset, unsigned long size)
|
|
{
|
|
return ioremap_nocache(offset, size);
|
|
}
|
|
|
|
extern void iounmap(volatile void *addr);
|
|
|
|
extern void set_iounmap_nonlazy(void);
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/iomap.h" 1
|
|
# 28 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/iomap.h"
|
|
struct pci_dev;
|
|
extern void pci_iounmap(struct pci_dev *dev, void *);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pci_iomap.h" 1
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pci_iomap.h"
|
|
struct pci_dev;
|
|
|
|
|
|
extern void *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
|
|
# 80 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/iomap.h" 2
|
|
# 199 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vmalloc.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rbtree.h" 1
|
|
# 35 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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;
|
|
}
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vmalloc.h" 2
|
|
|
|
struct vm_area_struct;
|
|
# 29 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vmalloc.h"
|
|
struct vm_struct {
|
|
struct vm_struct *next;
|
|
void *addr;
|
|
unsigned long size;
|
|
unsigned long flags;
|
|
struct page **pages;
|
|
unsigned int nr_pages;
|
|
phys_addr_t phys_addr;
|
|
const void *caller;
|
|
};
|
|
|
|
struct vmap_area {
|
|
unsigned long va_start;
|
|
unsigned long va_end;
|
|
unsigned long flags;
|
|
struct rb_node rb_node;
|
|
struct list_head list;
|
|
struct list_head purge_list;
|
|
struct vm_struct *vm;
|
|
struct callback_head callback_head;
|
|
};
|
|
|
|
|
|
|
|
|
|
extern void vm_unmap_ram(const void *mem, unsigned int count);
|
|
extern void *vm_map_ram(struct page **pages, unsigned int count,
|
|
int node, pgprot_t prot);
|
|
extern void vm_unmap_aliases(void);
|
|
|
|
|
|
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) vmalloc_init(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern void *vmalloc(unsigned long size);
|
|
extern void *vzalloc(unsigned long size);
|
|
extern void *vmalloc_user(unsigned long size);
|
|
extern void *vmalloc_node(unsigned long size, int node);
|
|
extern void *vzalloc_node(unsigned long size, int node);
|
|
extern void *vmalloc_exec(unsigned long size);
|
|
extern void *vmalloc_32(unsigned long size);
|
|
extern void *vmalloc_32_user(unsigned long size);
|
|
extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
|
|
extern void *__vmalloc_node_range(unsigned long size, unsigned long align,
|
|
unsigned long start, unsigned long end, gfp_t gfp_mask,
|
|
pgprot_t prot, int node, const void *caller);
|
|
extern void vfree(const void *addr);
|
|
|
|
extern void *vmap(struct page **pages, unsigned int count,
|
|
unsigned long flags, pgprot_t prot);
|
|
extern void vunmap(const void *addr);
|
|
|
|
extern int remap_vmalloc_range_partial(struct vm_area_struct *vma,
|
|
unsigned long uaddr, void *kaddr,
|
|
unsigned long size);
|
|
|
|
extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
|
|
unsigned long pgoff);
|
|
void vmalloc_sync_all(void);
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) size_t get_vm_area_size(const struct vm_struct *area)
|
|
{
|
|
|
|
return area->size - ((1UL) << 12);
|
|
}
|
|
|
|
extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags);
|
|
extern struct vm_struct *get_vm_area_caller(unsigned long size,
|
|
unsigned long flags, const void *caller);
|
|
extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
|
|
unsigned long start, unsigned long end);
|
|
extern struct vm_struct *__get_vm_area_caller(unsigned long size,
|
|
unsigned long flags,
|
|
unsigned long start, unsigned long end,
|
|
const void *caller);
|
|
extern struct vm_struct *remove_vm_area(const void *addr);
|
|
extern struct vm_struct *find_vm_area(const void *addr);
|
|
|
|
extern int map_vm_area(struct vm_struct *area, pgprot_t prot,
|
|
struct page **pages);
|
|
|
|
extern int map_kernel_range_noflush(unsigned long start, unsigned long size,
|
|
pgprot_t prot, struct page **pages);
|
|
extern void unmap_kernel_range_noflush(unsigned long addr, unsigned long size);
|
|
extern void unmap_kernel_range(unsigned long addr, unsigned long size);
|
|
# 140 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vmalloc.h"
|
|
extern struct vm_struct *alloc_vm_area(size_t size, pte_t **ptes);
|
|
extern void free_vm_area(struct vm_struct *area);
|
|
|
|
|
|
extern long vread(char *buf, char *addr, unsigned long count);
|
|
extern long vwrite(char *buf, char *addr, unsigned long count);
|
|
|
|
|
|
|
|
|
|
extern struct list_head vmap_area_list;
|
|
extern __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) void vm_area_add_early(struct vm_struct *vm);
|
|
extern __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) void vm_area_register_early(struct vm_struct *vm, size_t align);
|
|
|
|
|
|
|
|
struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets,
|
|
const size_t *sizes, int nr_vms,
|
|
size_t align);
|
|
|
|
void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms);
|
|
# 177 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vmalloc.h"
|
|
struct vmalloc_info {
|
|
unsigned long used;
|
|
unsigned long largest_chunk;
|
|
};
|
|
|
|
|
|
|
|
extern void get_vmalloc_info(struct vmalloc_info *vmi);
|
|
# 201 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
memset_io(volatile void *addr, unsigned char val, size_t count)
|
|
{
|
|
memset((void *)addr, val, count);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
memcpy_fromio(void *dst, const volatile void *src, size_t count)
|
|
{
|
|
memcpy(dst, (const void *)src, count);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
memcpy_toio(volatile void *dst, const void *src, size_t count)
|
|
{
|
|
memcpy((void *)dst, src, count);
|
|
}
|
|
# 243 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h"
|
|
static inline __attribute__((no_instrument_function)) void flush_write_buffers(void)
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
extern void native_io_delay(void);
|
|
|
|
extern int io_delay_type;
|
|
extern void io_delay_init(void);
|
|
# 313 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h"
|
|
static inline __attribute__((no_instrument_function)) void outb(unsigned char value, int port) { asm volatile("out" "b" " %" "b" "0, %w1" : : "a"(value), "Nd"(port)); } static inline __attribute__((no_instrument_function)) unsigned char inb(int port) { unsigned char value; asm volatile("in" "b" " %w1, %" "b" "0" : "=a"(value) : "Nd"(port)); return value; } static inline __attribute__((no_instrument_function)) void outb_p(unsigned char value, int port) { outb(value, port); slow_down_io(); } static inline __attribute__((no_instrument_function)) unsigned char inb_p(int port) { unsigned char value = inb(port); slow_down_io(); return value; } static inline __attribute__((no_instrument_function)) void outsb(int port, const void *addr, unsigned long count) { asm volatile("rep; outs" "b" : "+S"(addr), "+c"(count) : "d"(port)); } static inline __attribute__((no_instrument_function)) void insb(int port, void *addr, unsigned long count) { asm volatile("rep; ins" "b" : "+D"(addr), "+c"(count) : "d"(port)); }
|
|
static inline __attribute__((no_instrument_function)) void outw(unsigned short value, int port) { asm volatile("out" "w" " %" "w" "0, %w1" : : "a"(value), "Nd"(port)); } static inline __attribute__((no_instrument_function)) unsigned short inw(int port) { unsigned short value; asm volatile("in" "w" " %w1, %" "w" "0" : "=a"(value) : "Nd"(port)); return value; } static inline __attribute__((no_instrument_function)) void outw_p(unsigned short value, int port) { outw(value, port); slow_down_io(); } static inline __attribute__((no_instrument_function)) unsigned short inw_p(int port) { unsigned short value = inw(port); slow_down_io(); return value; } static inline __attribute__((no_instrument_function)) void outsw(int port, const void *addr, unsigned long count) { asm volatile("rep; outs" "w" : "+S"(addr), "+c"(count) : "d"(port)); } static inline __attribute__((no_instrument_function)) void insw(int port, void *addr, unsigned long count) { asm volatile("rep; ins" "w" : "+D"(addr), "+c"(count) : "d"(port)); }
|
|
static inline __attribute__((no_instrument_function)) void outl(unsigned int value, int port) { asm volatile("out" "l" " %" "" "0, %w1" : : "a"(value), "Nd"(port)); } static inline __attribute__((no_instrument_function)) unsigned int inl(int port) { unsigned int value; asm volatile("in" "l" " %w1, %" "" "0" : "=a"(value) : "Nd"(port)); return value; } static inline __attribute__((no_instrument_function)) void outl_p(unsigned int value, int port) { outl(value, port); slow_down_io(); } static inline __attribute__((no_instrument_function)) unsigned int inl_p(int port) { unsigned int value = inl(port); slow_down_io(); return value; } static inline __attribute__((no_instrument_function)) void outsl(int port, const void *addr, unsigned long count) { asm volatile("rep; outs" "l" : "+S"(addr), "+c"(count) : "d"(port)); } static inline __attribute__((no_instrument_function)) void insl(int port, void *addr, unsigned long count) { asm volatile("rep; ins" "l" : "+D"(addr), "+c"(count) : "d"(port)); }
|
|
|
|
extern void *xlate_dev_mem_ptr(phys_addr_t phys);
|
|
extern void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr);
|
|
|
|
extern int ioremap_change_attr(unsigned long vaddr, unsigned long size,
|
|
enum page_cache_mode pcm);
|
|
extern void *ioremap_wc(resource_size_t offset, unsigned long size);
|
|
|
|
extern bool is_early_ioremap_ptep(pte_t *ptep);
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/xen.h" 1
|
|
|
|
|
|
|
|
enum xen_domain_type {
|
|
XEN_NATIVE,
|
|
XEN_PV_DOMAIN,
|
|
XEN_HVM_DOMAIN,
|
|
};
|
|
|
|
|
|
extern enum xen_domain_type xen_domain_type;
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/xen.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h" 1
|
|
# 30 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/xen/interface.h" 1
|
|
# 53 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/xen/interface.h"
|
|
typedef unsigned long xen_pfn_t;
|
|
|
|
typedef unsigned long xen_ulong_t;
|
|
|
|
typedef long xen_long_t;
|
|
|
|
|
|
|
|
typedef unsigned char * __guest_handle_uchar;
|
|
typedef unsigned int * __guest_handle_uint;
|
|
typedef char * __guest_handle_char;
|
|
typedef int * __guest_handle_int;
|
|
typedef void * __guest_handle_void;
|
|
typedef uint64_t * __guest_handle_uint64_t;
|
|
typedef uint32_t * __guest_handle_uint32_t;
|
|
typedef xen_pfn_t * __guest_handle_xen_pfn_t;
|
|
typedef xen_ulong_t * __guest_handle_xen_ulong_t;
|
|
# 112 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/xen/interface.h"
|
|
struct trap_info {
|
|
uint8_t vector;
|
|
uint8_t flags;
|
|
uint16_t cs;
|
|
unsigned long address;
|
|
};
|
|
typedef struct trap_info * __guest_handle_trap_info;
|
|
|
|
struct arch_shared_info {
|
|
unsigned long max_pfn;
|
|
|
|
unsigned long pfn_to_mfn_frame_list_list;
|
|
unsigned long nmi_reason;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/xen/interface_64.h" 1
|
|
# 81 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/xen/interface_64.h"
|
|
struct iret_context {
|
|
|
|
uint64_t rax, r11, rcx, flags, rip, cs, rflags, rsp, ss;
|
|
|
|
};
|
|
# 98 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/xen/interface_64.h"
|
|
struct cpu_user_regs {
|
|
uint64_t r15;
|
|
uint64_t r14;
|
|
uint64_t r13;
|
|
uint64_t r12;
|
|
union { uint64_t rbp, ebp; uint32_t _ebp; };
|
|
union { uint64_t rbx, ebx; uint32_t _ebx; };
|
|
uint64_t r11;
|
|
uint64_t r10;
|
|
uint64_t r9;
|
|
uint64_t r8;
|
|
union { uint64_t rax, eax; uint32_t _eax; };
|
|
union { uint64_t rcx, ecx; uint32_t _ecx; };
|
|
union { uint64_t rdx, edx; uint32_t _edx; };
|
|
union { uint64_t rsi, esi; uint32_t _esi; };
|
|
union { uint64_t rdi, edi; uint32_t _edi; };
|
|
uint32_t error_code;
|
|
uint32_t entry_vector;
|
|
union { uint64_t rip, eip; uint32_t _eip; };
|
|
uint16_t cs, _pad0[1];
|
|
uint8_t saved_upcall_mask;
|
|
uint8_t _pad1[3];
|
|
union { uint64_t rflags, eflags; uint32_t _eflags; };
|
|
union { uint64_t rsp, esp; uint32_t _esp; };
|
|
uint16_t ss, _pad2[3];
|
|
uint16_t es, _pad3[3];
|
|
uint16_t ds, _pad4[3];
|
|
uint16_t fs, _pad5[3];
|
|
uint16_t gs, _pad6[3];
|
|
};
|
|
typedef struct cpu_user_regs * __guest_handle_cpu_user_regs;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct arch_vcpu_info {
|
|
unsigned long cr2;
|
|
unsigned long pad;
|
|
};
|
|
|
|
typedef unsigned long xen_callback_t;
|
|
# 132 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/xen/interface.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pvclock-abi.h" 1
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pvclock-abi.h"
|
|
struct pvclock_vcpu_time_info {
|
|
u32 version;
|
|
u32 pad0;
|
|
u64 tsc_timestamp;
|
|
u64 system_time;
|
|
u32 tsc_to_system_mul;
|
|
s8 tsc_shift;
|
|
u8 flags;
|
|
u8 pad[2];
|
|
} __attribute__((__packed__));
|
|
|
|
struct pvclock_wall_clock {
|
|
u32 version;
|
|
u32 sec;
|
|
u32 nsec;
|
|
} __attribute__((__packed__));
|
|
# 135 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/xen/interface.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct vcpu_guest_context {
|
|
|
|
struct { char x[512]; } fpu_ctxt;
|
|
|
|
|
|
|
|
unsigned long flags;
|
|
struct cpu_user_regs user_regs;
|
|
struct trap_info trap_ctxt[256];
|
|
unsigned long ldt_base, ldt_ents;
|
|
unsigned long gdt_frames[16], gdt_ents;
|
|
unsigned long kernel_ss, kernel_sp;
|
|
|
|
unsigned long ctrlreg[8];
|
|
unsigned long debugreg[8];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long event_callback_eip;
|
|
unsigned long failsafe_callback_eip;
|
|
unsigned long syscall_callback_eip;
|
|
|
|
unsigned long vm_assist;
|
|
|
|
|
|
uint64_t fs_base;
|
|
uint64_t gs_base_kernel;
|
|
uint64_t gs_base_user;
|
|
|
|
};
|
|
typedef struct vcpu_guest_context * __guest_handle_vcpu_guest_context;
|
|
# 31 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h" 2
|
|
# 350 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h"
|
|
struct mmuext_op {
|
|
unsigned int cmd;
|
|
union {
|
|
|
|
|
|
xen_pfn_t mfn;
|
|
|
|
unsigned long linear_addr;
|
|
} arg1;
|
|
union {
|
|
|
|
unsigned int nr_ents;
|
|
|
|
void *vcpumask;
|
|
|
|
xen_pfn_t src_mfn;
|
|
} arg2;
|
|
};
|
|
typedef struct mmuext_op * __guest_handle_mmuext_op;
|
|
# 414 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h"
|
|
typedef uint16_t domid_t;
|
|
# 454 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h"
|
|
struct mmu_update {
|
|
uint64_t ptr;
|
|
uint64_t val;
|
|
};
|
|
typedef struct mmu_update * __guest_handle_mmu_update;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct multicall_entry {
|
|
xen_ulong_t op;
|
|
xen_long_t result;
|
|
xen_ulong_t args[6];
|
|
};
|
|
typedef struct multicall_entry * __guest_handle_multicall_entry;
|
|
|
|
struct vcpu_time_info {
|
|
# 484 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h"
|
|
uint32_t version;
|
|
uint32_t pad0;
|
|
uint64_t tsc_timestamp;
|
|
uint64_t system_time;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t tsc_to_system_mul;
|
|
int8_t tsc_shift;
|
|
int8_t pad1[3];
|
|
};
|
|
|
|
struct vcpu_info {
|
|
# 525 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h"
|
|
uint8_t evtchn_upcall_pending;
|
|
uint8_t evtchn_upcall_mask;
|
|
xen_ulong_t evtchn_pending_sel;
|
|
struct arch_vcpu_info arch;
|
|
struct pvclock_vcpu_time_info time;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct shared_info {
|
|
struct vcpu_info vcpu_info[32];
|
|
# 570 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h"
|
|
xen_ulong_t evtchn_pending[sizeof(xen_ulong_t) * 8];
|
|
xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
|
|
|
|
|
|
|
|
|
|
|
|
struct pvclock_wall_clock wc;
|
|
|
|
struct arch_shared_info arch;
|
|
|
|
};
|
|
# 609 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h"
|
|
struct start_info {
|
|
|
|
char magic[32];
|
|
unsigned long nr_pages;
|
|
unsigned long shared_info;
|
|
uint32_t flags;
|
|
xen_pfn_t store_mfn;
|
|
uint32_t store_evtchn;
|
|
union {
|
|
struct {
|
|
xen_pfn_t mfn;
|
|
uint32_t evtchn;
|
|
} domU;
|
|
struct {
|
|
uint32_t info_off;
|
|
uint32_t info_size;
|
|
} dom0;
|
|
} console;
|
|
|
|
unsigned long pt_base;
|
|
unsigned long nr_pt_frames;
|
|
unsigned long mfn_list;
|
|
unsigned long mod_start;
|
|
unsigned long mod_len;
|
|
int8_t cmd_line[1024];
|
|
|
|
unsigned long first_p2m_pfn;
|
|
unsigned long nr_p2m_frames;
|
|
};
|
|
# 660 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/xen.h"
|
|
struct xen_multiboot_mod_list {
|
|
|
|
uint32_t mod_start;
|
|
|
|
uint32_t mod_end;
|
|
|
|
uint32_t cmdline;
|
|
|
|
uint32_t pad;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct dom0_vga_console_info {
|
|
uint8_t video_type;
|
|
|
|
|
|
|
|
|
|
union {
|
|
struct {
|
|
|
|
uint16_t font_height;
|
|
|
|
uint16_t cursor_x, cursor_y;
|
|
|
|
uint16_t rows, columns;
|
|
} text_mode_3;
|
|
|
|
struct {
|
|
|
|
uint16_t width, height;
|
|
|
|
uint16_t bytes_per_line;
|
|
|
|
uint16_t bits_per_pixel;
|
|
|
|
uint32_t lfb_base;
|
|
uint32_t lfb_size;
|
|
|
|
uint8_t red_pos, red_size;
|
|
uint8_t green_pos, green_size;
|
|
uint8_t blue_pos, blue_size;
|
|
uint8_t rsvd_pos, rsvd_size;
|
|
|
|
|
|
uint32_t gbl_caps;
|
|
|
|
uint16_t mode_attrs;
|
|
} vesa_lfb;
|
|
} u;
|
|
};
|
|
|
|
typedef uint64_t cpumap_t;
|
|
|
|
typedef uint8_t xen_domain_handle_t[16];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct tmem_op {
|
|
uint32_t cmd;
|
|
int32_t pool_id;
|
|
union {
|
|
struct {
|
|
uint64_t uuid[2];
|
|
uint32_t flags;
|
|
} new;
|
|
struct {
|
|
uint64_t oid[3];
|
|
uint32_t index;
|
|
uint32_t tmem_offset;
|
|
uint32_t pfn_offset;
|
|
uint32_t len;
|
|
__guest_handle_void gmfn;
|
|
} gen;
|
|
} u;
|
|
};
|
|
|
|
typedef u64 * __guest_handle_u64;
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/xen.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/xen/hypervisor.h" 1
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/xen/hypervisor.h"
|
|
extern struct shared_info *HYPERVISOR_shared_info;
|
|
extern struct start_info *xen_start_info;
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) uint32_t xen_cpuid_base(void)
|
|
{
|
|
return hypervisor_cpuid_base("XenVMMXenVMM", 2);
|
|
}
|
|
|
|
|
|
extern bool xen_hvm_need_lapic(void);
|
|
|
|
static inline __attribute__((no_instrument_function)) bool xen_x2apic_para_available(void)
|
|
{
|
|
return xen_hvm_need_lapic();
|
|
}
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/xen.h" 2
|
|
# 39 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/xen.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/features.h" 1
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/features.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/interface/features.h" 1
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/features.h" 2
|
|
|
|
void xen_setup_features(void);
|
|
|
|
extern u8 xen_features[1 * 32];
|
|
|
|
static inline __attribute__((no_instrument_function)) int xen_feature(int flag)
|
|
{
|
|
return xen_features[flag];
|
|
}
|
|
# 40 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/xen/xen.h" 2
|
|
# 328 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h" 2
|
|
struct bio_vec;
|
|
|
|
extern bool xen_biovec_phys_mergeable(const struct bio_vec *vec1,
|
|
const struct bio_vec *vec2);
|
|
# 341 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io.h"
|
|
extern int arch_phys_wc_add(unsigned long base,
|
|
unsigned long size);
|
|
extern void arch_phys_wc_del(int handle);
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/realmode.h" 2
|
|
|
|
|
|
struct real_mode_header {
|
|
u32 text_start;
|
|
u32 ro_end;
|
|
|
|
u32 trampoline_start;
|
|
u32 trampoline_status;
|
|
u32 trampoline_header;
|
|
|
|
u32 trampoline_pgd;
|
|
|
|
|
|
|
|
u32 wakeup_start;
|
|
u32 wakeup_header;
|
|
|
|
|
|
u32 machine_real_restart_asm;
|
|
|
|
u32 machine_real_restart_seg;
|
|
|
|
};
|
|
|
|
|
|
struct trampoline_header {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u64 start;
|
|
u64 efer;
|
|
u32 cr4;
|
|
|
|
};
|
|
|
|
extern struct real_mode_header *real_mode_header;
|
|
extern unsigned char real_mode_blob_end[];
|
|
|
|
extern unsigned long init_rsp;
|
|
extern unsigned long initial_code;
|
|
extern unsigned long initial_gs;
|
|
|
|
extern unsigned char real_mode_blob[];
|
|
extern unsigned char real_mode_relocs[];
|
|
|
|
|
|
|
|
|
|
|
|
extern unsigned char secondary_startup_64[];
|
|
|
|
|
|
void reserve_real_mode(void);
|
|
void setup_real_mode(void);
|
|
# 34 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/acpi.h" 2
|
|
|
|
|
|
extern int acpi_lapic;
|
|
extern int acpi_ioapic;
|
|
extern int acpi_noirq;
|
|
extern int acpi_strict;
|
|
extern int acpi_disabled;
|
|
extern int acpi_pci_disabled;
|
|
extern int acpi_skip_timer_override;
|
|
extern int acpi_use_timer_override;
|
|
extern int acpi_fix_pin2_polarity;
|
|
extern int acpi_disable_cmcff;
|
|
|
|
extern u8 acpi_sci_flags;
|
|
extern int acpi_sci_override_gsi;
|
|
void acpi_pic_sci_set_trigger(unsigned int, u16);
|
|
|
|
extern int (*__acpi_register_gsi)(struct device *dev, u32 gsi,
|
|
int trigger, int polarity);
|
|
extern void (*__acpi_unregister_gsi)(u32 gsi);
|
|
|
|
static inline __attribute__((no_instrument_function)) void disable_acpi(void)
|
|
{
|
|
acpi_disabled = 1;
|
|
acpi_pci_disabled = 1;
|
|
acpi_noirq = 1;
|
|
}
|
|
|
|
extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
|
|
|
|
static inline __attribute__((no_instrument_function)) void acpi_noirq_set(void) { acpi_noirq = 1; }
|
|
static inline __attribute__((no_instrument_function)) void acpi_disable_pci(void)
|
|
{
|
|
acpi_pci_disabled = 1;
|
|
acpi_noirq_set();
|
|
}
|
|
|
|
|
|
extern int (*acpi_suspend_lowlevel)(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int acpi_processor_cstate_check(unsigned int max_cstate)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (boot_cpu_data.x86 == 0x0F &&
|
|
boot_cpu_data.x86_vendor == 2 &&
|
|
boot_cpu_data.x86_model <= 0x05 &&
|
|
boot_cpu_data.x86_mask < 0x0A)
|
|
return 1;
|
|
else if (amd_e400_c1e_detected)
|
|
return 1;
|
|
else
|
|
return max_cstate;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool arch_has_acpi_pdc(void)
|
|
{
|
|
struct cpuinfo_x86 *c = &(*({ do { const void *__vpp_verify = (typeof((&(cpu_info)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((&(cpu_info)))) *)((&(cpu_info))))); (typeof((typeof(*((&(cpu_info)))) *)((&(cpu_info))))) (__ptr + (((__per_cpu_offset[(0)])))); }); }));
|
|
return (c->x86_vendor == 0 ||
|
|
c->x86_vendor == 5);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_acpi_set_pdc_bits(u32 *buf)
|
|
{
|
|
struct cpuinfo_x86 *c = &(*({ do { const void *__vpp_verify = (typeof((&(cpu_info)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((&(cpu_info)))) *)((&(cpu_info))))); (typeof((typeof(*((&(cpu_info)))) *)((&(cpu_info))))) (__ptr + (((__per_cpu_offset[(0)])))); }); }));
|
|
|
|
buf[2] |= ((0x0010) | (0x0008) | (0x0002) | (0x0100) | (0x0200));
|
|
|
|
if ((__builtin_constant_p(( 4*32+ 7)) && ( (((( 4*32+ 7))>>5)==0 && (1UL<<((( 4*32+ 7))&31) & ((1<<(( 0*32+ 0) & 31))|0|(1<<(( 0*32+ 5) & 31))|(1<<(( 0*32+ 6) & 31))| (1<<(( 0*32+ 8) & 31))|0|(1<<(( 0*32+24) & 31))|(1<<(( 0*32+15) & 31))| (1<<(( 0*32+25) & 31))|(1<<(( 0*32+26) & 31))))) || (((( 4*32+ 7))>>5)==1 && (1UL<<((( 4*32+ 7))&31) & ((1<<(( 1*32+29) & 31))|0))) || (((( 4*32+ 7))>>5)==2 && (1UL<<((( 4*32+ 7))&31) & 0)) || (((( 4*32+ 7))>>5)==3 && (1UL<<((( 4*32+ 7))&31) & ((1<<(( 3*32+20) & 31))))) || (((( 4*32+ 7))>>5)==4 && (1UL<<((( 4*32+ 7))&31) & (0))) || (((( 4*32+ 7))>>5)==5 && (1UL<<((( 4*32+ 7))&31) & 0)) || (((( 4*32+ 7))>>5)==6 && (1UL<<((( 4*32+ 7))&31) & 0)) || (((( 4*32+ 7))>>5)==7 && (1UL<<((( 4*32+ 7))&31) & 0)) || (((( 4*32+ 7))>>5)==8 && (1UL<<((( 4*32+ 7))&31) & 0)) || (((( 4*32+ 7))>>5)==9 && (1UL<<((( 4*32+ 7))&31) & 0)) ) ? 1 : (__builtin_constant_p((( 4*32+ 7))) ? constant_test_bit((( 4*32+ 7)), ((unsigned long *)((c)->x86_capability))) : variable_test_bit((( 4*32+ 7)), ((unsigned long *)((c)->x86_capability))))))
|
|
buf[2] |= ((0x0008) | (0x0002) | (0x0020) | (0x0800) | (0x0001));
|
|
|
|
if ((__builtin_constant_p(( 0*32+22)) && ( (((( 0*32+22))>>5)==0 && (1UL<<((( 0*32+22))&31) & ((1<<(( 0*32+ 0) & 31))|0|(1<<(( 0*32+ 5) & 31))|(1<<(( 0*32+ 6) & 31))| (1<<(( 0*32+ 8) & 31))|0|(1<<(( 0*32+24) & 31))|(1<<(( 0*32+15) & 31))| (1<<(( 0*32+25) & 31))|(1<<(( 0*32+26) & 31))))) || (((( 0*32+22))>>5)==1 && (1UL<<((( 0*32+22))&31) & ((1<<(( 1*32+29) & 31))|0))) || (((( 0*32+22))>>5)==2 && (1UL<<((( 0*32+22))&31) & 0)) || (((( 0*32+22))>>5)==3 && (1UL<<((( 0*32+22))&31) & ((1<<(( 3*32+20) & 31))))) || (((( 0*32+22))>>5)==4 && (1UL<<((( 0*32+22))&31) & (0))) || (((( 0*32+22))>>5)==5 && (1UL<<((( 0*32+22))&31) & 0)) || (((( 0*32+22))>>5)==6 && (1UL<<((( 0*32+22))&31) & 0)) || (((( 0*32+22))>>5)==7 && (1UL<<((( 0*32+22))&31) & 0)) || (((( 0*32+22))>>5)==8 && (1UL<<((( 0*32+22))&31) & 0)) || (((( 0*32+22))>>5)==9 && (1UL<<((( 0*32+22))&31) & 0)) ) ? 1 : (__builtin_constant_p((( 0*32+22))) ? constant_test_bit((( 0*32+22)), ((unsigned long *)((c)->x86_capability))) : variable_test_bit((( 0*32+22)), ((unsigned long *)((c)->x86_capability))))))
|
|
buf[2] |= (0x0004);
|
|
|
|
|
|
|
|
|
|
if (!(__builtin_constant_p(( 4*32+ 3)) && ( (((( 4*32+ 3))>>5)==0 && (1UL<<((( 4*32+ 3))&31) & ((1<<(( 0*32+ 0) & 31))|0|(1<<(( 0*32+ 5) & 31))|(1<<(( 0*32+ 6) & 31))| (1<<(( 0*32+ 8) & 31))|0|(1<<(( 0*32+24) & 31))|(1<<(( 0*32+15) & 31))| (1<<(( 0*32+25) & 31))|(1<<(( 0*32+26) & 31))))) || (((( 4*32+ 3))>>5)==1 && (1UL<<((( 4*32+ 3))&31) & ((1<<(( 1*32+29) & 31))|0))) || (((( 4*32+ 3))>>5)==2 && (1UL<<((( 4*32+ 3))&31) & 0)) || (((( 4*32+ 3))>>5)==3 && (1UL<<((( 4*32+ 3))&31) & ((1<<(( 3*32+20) & 31))))) || (((( 4*32+ 3))>>5)==4 && (1UL<<((( 4*32+ 3))&31) & (0))) || (((( 4*32+ 3))>>5)==5 && (1UL<<((( 4*32+ 3))&31) & 0)) || (((( 4*32+ 3))>>5)==6 && (1UL<<((( 4*32+ 3))&31) & 0)) || (((( 4*32+ 3))>>5)==7 && (1UL<<((( 4*32+ 3))&31) & 0)) || (((( 4*32+ 3))>>5)==8 && (1UL<<((( 4*32+ 3))&31) & 0)) || (((( 4*32+ 3))>>5)==9 && (1UL<<((( 4*32+ 3))&31) & 0)) ) ? 1 : (__builtin_constant_p((( 4*32+ 3))) ? constant_test_bit((( 4*32+ 3)), ((unsigned long *)((c)->x86_capability))) : variable_test_bit((( 4*32+ 3)), ((unsigned long *)((c)->x86_capability))))))
|
|
buf[2] &= ~((0x0200));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool acpi_has_cpu_in_madt(void)
|
|
{
|
|
return !!acpi_lapic;
|
|
}
|
|
# 144 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/acpi.h"
|
|
extern int acpi_numa;
|
|
extern int x86_acpi_numa_init(void);
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pvclock.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h" 1
|
|
# 22 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
typedef u64 cycle_t;
|
|
struct clocksource;
|
|
struct module;
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/clocksource.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/clocksource.h"
|
|
struct arch_clocksource_data {
|
|
int vclock_mode;
|
|
};
|
|
# 28 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h" 2
|
|
# 44 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
struct cyclecounter {
|
|
cycle_t (*read)(const struct cyclecounter *cc);
|
|
cycle_t mask;
|
|
u32 mult;
|
|
u32 shift;
|
|
};
|
|
# 67 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
struct timecounter {
|
|
const struct cyclecounter *cc;
|
|
cycle_t cycle_last;
|
|
u64 nsec;
|
|
};
|
|
# 81 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
static inline __attribute__((no_instrument_function)) u64 cyclecounter_cyc2ns(const struct cyclecounter *cc,
|
|
cycle_t cycles)
|
|
{
|
|
u64 ret = (u64)cycles;
|
|
ret = (ret * cc->mult) >> cc->shift;
|
|
return ret;
|
|
}
|
|
# 99 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
extern void timecounter_init(struct timecounter *tc,
|
|
const struct cyclecounter *cc,
|
|
u64 start_tstamp);
|
|
# 111 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
extern u64 timecounter_read(struct timecounter *tc);
|
|
# 127 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
extern u64 timecounter_cyc2time(struct timecounter *tc,
|
|
cycle_t cycle_tstamp);
|
|
# 167 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
struct clocksource {
|
|
|
|
|
|
|
|
|
|
cycle_t (*read)(struct clocksource *cs);
|
|
cycle_t mask;
|
|
u32 mult;
|
|
u32 shift;
|
|
u64 max_idle_ns;
|
|
u32 maxadj;
|
|
|
|
struct arch_clocksource_data archdata;
|
|
|
|
|
|
const char *name;
|
|
struct list_head list;
|
|
int rating;
|
|
int (*enable)(struct clocksource *cs);
|
|
void (*disable)(struct clocksource *cs);
|
|
unsigned long flags;
|
|
void (*suspend)(struct clocksource *cs);
|
|
void (*resume)(struct clocksource *cs);
|
|
|
|
|
|
|
|
|
|
struct list_head wd_list;
|
|
cycle_t cs_last;
|
|
cycle_t wd_last;
|
|
|
|
struct module *owner;
|
|
} __attribute__((__aligned__((1 << (6)))));
|
|
# 224 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
static inline __attribute__((no_instrument_function)) u32 clocksource_khz2mult(u32 khz, u32 shift_constant)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u64 tmp = ((u64)1000000) << shift_constant;
|
|
|
|
tmp += khz/2;
|
|
({ uint32_t __base = (khz); uint32_t __rem; __rem = ((uint64_t)(tmp)) % __base; (tmp) = ((uint64_t)(tmp)) / __base; __rem; });
|
|
|
|
return (u32)tmp;
|
|
}
|
|
# 250 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
static inline __attribute__((no_instrument_function)) u32 clocksource_hz2mult(u32 hz, u32 shift_constant)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u64 tmp = ((u64)1000000000) << shift_constant;
|
|
|
|
tmp += hz/2;
|
|
({ uint32_t __base = (hz); uint32_t __rem; __rem = ((uint64_t)(tmp)) % __base; (tmp) = ((uint64_t)(tmp)) / __base; __rem; });
|
|
|
|
return (u32)tmp;
|
|
}
|
|
# 277 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/clocksource.h"
|
|
static inline __attribute__((no_instrument_function)) s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift)
|
|
{
|
|
return ((u64) cycles * mult) >> shift;
|
|
}
|
|
|
|
|
|
extern int clocksource_register(struct clocksource*);
|
|
extern int clocksource_unregister(struct clocksource*);
|
|
extern void clocksource_touch_watchdog(void);
|
|
extern struct clocksource* clocksource_get_next(void);
|
|
extern void clocksource_change_rating(struct clocksource *cs, int rating);
|
|
extern void clocksource_suspend(void);
|
|
extern void clocksource_resume(void);
|
|
extern struct clocksource * __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) clocksource_default_clock(void);
|
|
extern void clocksource_mark_unstable(struct clocksource *cs);
|
|
|
|
extern u64
|
|
clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask);
|
|
extern void
|
|
clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec);
|
|
|
|
|
|
|
|
|
|
|
|
extern int
|
|
__clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq);
|
|
extern void
|
|
__clocksource_updatefreq_scale(struct clocksource *cs, u32 scale, u32 freq);
|
|
|
|
static inline __attribute__((no_instrument_function)) int clocksource_register_hz(struct clocksource *cs, u32 hz)
|
|
{
|
|
return __clocksource_register_scale(cs, 1, hz);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int clocksource_register_khz(struct clocksource *cs, u32 khz)
|
|
{
|
|
return __clocksource_register_scale(cs, 1000, khz);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __clocksource_updatefreq_hz(struct clocksource *cs, u32 hz)
|
|
{
|
|
__clocksource_updatefreq_scale(cs, 1, hz);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __clocksource_updatefreq_khz(struct clocksource *cs, u32 khz)
|
|
{
|
|
__clocksource_updatefreq_scale(cs, 1000, khz);
|
|
}
|
|
|
|
|
|
extern int timekeeping_notify(struct clocksource *clock);
|
|
|
|
extern cycle_t clocksource_mmio_readl_up(struct clocksource *);
|
|
extern cycle_t clocksource_mmio_readl_down(struct clocksource *);
|
|
extern cycle_t clocksource_mmio_readw_up(struct clocksource *);
|
|
extern cycle_t clocksource_mmio_readw_down(struct clocksource *);
|
|
|
|
extern int clocksource_mmio_init(void *, const char *,
|
|
unsigned long, int, unsigned, cycle_t (*)(struct clocksource *));
|
|
|
|
extern int clocksource_i8253_init(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void clocksource_of_init(void) {}
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pvclock.h" 2
|
|
|
|
|
|
|
|
cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src);
|
|
u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src);
|
|
void pvclock_set_flags(u8 flags);
|
|
unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src);
|
|
void pvclock_read_wallclock(struct pvclock_wall_clock *wall,
|
|
struct pvclock_vcpu_time_info *vcpu,
|
|
struct timespec *ts);
|
|
void pvclock_resume(void);
|
|
|
|
void pvclock_touch_watchdogs(void);
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift)
|
|
{
|
|
u64 product;
|
|
|
|
|
|
|
|
ulong tmp;
|
|
|
|
|
|
if (shift < 0)
|
|
delta >>= -shift;
|
|
else
|
|
delta <<= shift;
|
|
# 49 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pvclock.h"
|
|
__asm__ (
|
|
"mulq %[mul_frac] ; shrd $32, %[hi], %[lo]"
|
|
: [lo]"=a"(product),
|
|
[hi]"=d"(tmp)
|
|
: "0"(delta),
|
|
[mul_frac]"rm"((u64)mul_frac));
|
|
|
|
|
|
|
|
|
|
return product;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline))
|
|
u64 pvclock_get_nsec_offset(const struct pvclock_vcpu_time_info *src)
|
|
{
|
|
u64 delta = __native_read_tsc() - src->tsc_timestamp;
|
|
return pvclock_scale_delta(delta, src->tsc_to_system_mul,
|
|
src->tsc_shift);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline))
|
|
unsigned __pvclock_read_cycles(const struct pvclock_vcpu_time_info *src,
|
|
cycle_t *cycles, u8 *flags)
|
|
{
|
|
unsigned version;
|
|
cycle_t ret, offset;
|
|
u8 ret_flags;
|
|
|
|
version = src->version;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rdtsc_barrier();
|
|
offset = pvclock_get_nsec_offset(src);
|
|
ret = src->system_time + offset;
|
|
ret_flags = src->flags;
|
|
rdtsc_barrier();
|
|
|
|
*cycles = ret;
|
|
*flags = ret_flags;
|
|
return version;
|
|
}
|
|
|
|
struct pvclock_vsyscall_time_info {
|
|
struct pvclock_vcpu_time_info pvti;
|
|
u32 migrate_count;
|
|
} __attribute__((__aligned__((1 << (6)))));
|
|
|
|
|
|
|
|
|
|
int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) pvclock_init_vsyscall(struct pvclock_vsyscall_time_info *i,
|
|
int size);
|
|
struct pvclock_vcpu_time_info *pvclock_get_vsyscall_time_info(int cpu);
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/vsyscall.h" 1
|
|
|
|
|
|
|
|
enum vsyscall_num {
|
|
__NR_vgettimeofday,
|
|
__NR_vtime,
|
|
__NR_vgetcpu,
|
|
};
|
|
# 28 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h" 2
|
|
# 68 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h"
|
|
enum fixed_addresses {
|
|
|
|
|
|
|
|
|
|
VSYSCALL_PAGE = (((((((-10UL << 20) + ((1UL) << 12))-1) | ((__typeof__((-10UL << 20) + ((1UL) << 12)))((1<<21)-1)))+1) - ((1UL) << 12)) - (-10UL << 20)) >> 12,
|
|
|
|
|
|
PVCLOCK_FIXMAP_BEGIN,
|
|
PVCLOCK_FIXMAP_END = PVCLOCK_FIXMAP_BEGIN+(((256 -1)/(((1UL) << 12)/sizeof(struct pvclock_vsyscall_time_info)))+1)-1,
|
|
|
|
|
|
FIX_DBGP_BASE,
|
|
FIX_EARLYCON_MEM_BASE,
|
|
|
|
|
|
|
|
|
|
FIX_APIC_BASE,
|
|
|
|
|
|
FIX_IO_APIC_BASE_0,
|
|
FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + 128 - 1,
|
|
|
|
FIX_RO_IDT,
|
|
# 101 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h"
|
|
FIX_PARAVIRT_BOOTMAP,
|
|
|
|
FIX_TEXT_POKE1,
|
|
FIX_TEXT_POKE0,
|
|
|
|
|
|
|
|
__end_of_permanent_fixed_addresses,
|
|
# 120 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h"
|
|
FIX_BTMAP_END =
|
|
(__end_of_permanent_fixed_addresses ^
|
|
(__end_of_permanent_fixed_addresses + (64 * 8) - 1)) &
|
|
-512
|
|
? __end_of_permanent_fixed_addresses + (64 * 8) -
|
|
(__end_of_permanent_fixed_addresses & ((64 * 8) - 1))
|
|
: __end_of_permanent_fixed_addresses,
|
|
FIX_BTMAP_BEGIN = FIX_BTMAP_END + (64 * 8) - 1,
|
|
|
|
|
|
|
|
|
|
FIX_TBOOT_BASE,
|
|
|
|
__end_of_fixed_addresses
|
|
};
|
|
|
|
|
|
extern void reserve_top_address(unsigned long reserve);
|
|
|
|
|
|
|
|
|
|
extern int fixmaps_set;
|
|
|
|
extern pte_t *kmap_pte;
|
|
extern pgprot_t kmap_prot;
|
|
extern pte_t *pkmap_page_table;
|
|
|
|
void __native_set_fixmap(enum fixed_addresses idx, pte_t pte);
|
|
void native_set_fixmap(enum fixed_addresses idx,
|
|
phys_addr_t phys, pgprot_t flags);
|
|
# 161 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/fixmap.h" 1
|
|
# 29 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/fixmap.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) unsigned long fix_to_virt(const unsigned int idx)
|
|
{
|
|
do { bool __cond = !(!(idx >= __end_of_fixed_addresses)); extern void __compiletime_assert_31(void) __attribute__((error("BUILD_BUG_ON failed: " "idx >= __end_of_fixed_addresses"))); if (__cond) __compiletime_assert_31(); do { } while (0); } while (0);
|
|
return (((((((-10UL << 20) + ((1UL) << 12))-1) | ((__typeof__((-10UL << 20) + ((1UL) << 12)))((1<<21)-1)))+1) - ((1UL) << 12)) - ((idx) << 12));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long virt_to_fix(const unsigned long vaddr)
|
|
{
|
|
do { if (__builtin_expect(!!(vaddr >= ((((((-10UL << 20) + ((1UL) << 12))-1) | ((__typeof__((-10UL << 20) + ((1UL) << 12)))((1<<21)-1)))+1) - ((1UL) << 12)) || vaddr < (((((((-10UL << 20) + ((1UL) << 12))-1) | ((__typeof__((-10UL << 20) + ((1UL) << 12)))((1<<21)-1)))+1) - ((1UL) << 12)) - (__end_of_permanent_fixed_addresses << 12))), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/fixmap.h"), "i" (37), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0); } while (0);
|
|
return ((((((((-10UL << 20) + ((1UL) << 12))-1) | ((__typeof__((-10UL << 20) + ((1UL) << 12)))((1<<21)-1)))+1) - ((1UL) << 12)) - ((vaddr)&(~(((1UL) << 12)-1)))) >> 12);
|
|
}
|
|
# 162 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/fixmap.h" 2
|
|
|
|
|
|
|
|
|
|
void __early_set_fixmap(enum fixed_addresses idx,
|
|
phys_addr_t phys, pgprot_t flags);
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/idle.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct notifier_block;
|
|
void idle_notifier_register(struct notifier_block *n);
|
|
void idle_notifier_unregister(struct notifier_block *n);
|
|
|
|
|
|
void enter_idle(void);
|
|
void exit_idle(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void amd_e400_remove_cpu(int cpu);
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h" 2
|
|
# 41 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
static inline __attribute__((no_instrument_function)) void generic_apic_probe(void)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
|
|
extern unsigned int apic_verbosity;
|
|
extern int local_apic_timer_c2_ok;
|
|
|
|
extern int disable_apic;
|
|
extern unsigned int lapic_timer_frequency;
|
|
|
|
|
|
extern void __inquire_remote_apic(int apicid);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void default_inquire_remote_apic(int apicid)
|
|
{
|
|
if (apic_verbosity >= 2)
|
|
__inquire_remote_apic(apicid);
|
|
}
|
|
# 76 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
static inline __attribute__((no_instrument_function)) bool apic_from_smp_config(void)
|
|
{
|
|
return smp_found_config && !disable_apic;
|
|
}
|
|
# 88 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
extern int setup_profiling_timer(unsigned int);
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_apic_mem_write(u32 reg, u32 v)
|
|
{
|
|
volatile u32 *addr = (volatile u32 *)((fix_to_virt(FIX_APIC_BASE)) + reg);
|
|
|
|
asm volatile ("661:\n\t" "movl %0, %1" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "(11*32 + (5))" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" "xchgl %0, %1" "\n" "664""1" ":\n\t" ".popsection" : "=r" (v), "=m" (*addr) : "i" (0), "0" (v), "m" (*addr))
|
|
|
|
;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u32 native_apic_mem_read(u32 reg)
|
|
{
|
|
return *((volatile u32 *)((fix_to_virt(FIX_APIC_BASE)) + reg));
|
|
}
|
|
|
|
extern void native_apic_wait_icr_idle(void);
|
|
extern u32 native_safe_apic_wait_icr_idle(void);
|
|
extern void native_apic_icr_write(u32 low, u32 id);
|
|
extern u64 native_apic_icr_read(void);
|
|
|
|
extern int x2apic_mode;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void x2apic_wrmsr_fence(void)
|
|
{
|
|
asm volatile("mfence" : : : "memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_apic_msr_write(u32 reg, u32 v)
|
|
{
|
|
if (reg == 0xE0 || reg == 0x20 || reg == 0xD0 ||
|
|
reg == 0x30)
|
|
return;
|
|
|
|
do { paravirt_write_msr(0x800 + (reg >> 4), v, 0); } while (0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_apic_msr_eoi_write(u32 reg, u32 v)
|
|
{
|
|
do { paravirt_write_msr(0x800 + (0xB0 >> 4), 0x0, 0); } while (0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u32 native_apic_msr_read(u32 reg)
|
|
{
|
|
u64 msr;
|
|
|
|
if (reg == 0xE0)
|
|
return -1;
|
|
|
|
do { int _err; msr = paravirt_read_msr(0x800 + (reg >> 4), &_err); } while (0);
|
|
return (u32)msr;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_x2apic_wait_icr_idle(void)
|
|
{
|
|
|
|
return;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u32 native_safe_x2apic_wait_icr_idle(void)
|
|
{
|
|
|
|
return 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_x2apic_icr_write(u32 low, u32 id)
|
|
{
|
|
do { paravirt_write_msr(0x800 + (0x300 >> 4), (u32)((u64)(((__u64) id) << 32 | low)), ((u64)(((__u64) id) << 32 | low))>>32); } while (0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 native_x2apic_icr_read(void)
|
|
{
|
|
unsigned long val;
|
|
|
|
do { int _err; val = paravirt_read_msr(0x800 + (0x300 >> 4), &_err); } while (0);
|
|
return val;
|
|
}
|
|
|
|
extern int x2apic_phys;
|
|
extern int x2apic_preenabled;
|
|
extern void check_x2apic(void);
|
|
extern void enable_x2apic(void);
|
|
static inline __attribute__((no_instrument_function)) int x2apic_enabled(void)
|
|
{
|
|
u64 msr;
|
|
|
|
if (!(__builtin_constant_p(( 4*32+21)) && ( (((( 4*32+21))>>5)==0 && (1UL<<((( 4*32+21))&31) & ((1<<(( 0*32+ 0) & 31))|0|(1<<(( 0*32+ 5) & 31))|(1<<(( 0*32+ 6) & 31))| (1<<(( 0*32+ 8) & 31))|0|(1<<(( 0*32+24) & 31))|(1<<(( 0*32+15) & 31))| (1<<(( 0*32+25) & 31))|(1<<(( 0*32+26) & 31))))) || (((( 4*32+21))>>5)==1 && (1UL<<((( 4*32+21))&31) & ((1<<(( 1*32+29) & 31))|0))) || (((( 4*32+21))>>5)==2 && (1UL<<((( 4*32+21))&31) & 0)) || (((( 4*32+21))>>5)==3 && (1UL<<((( 4*32+21))&31) & ((1<<(( 3*32+20) & 31))))) || (((( 4*32+21))>>5)==4 && (1UL<<((( 4*32+21))&31) & (0))) || (((( 4*32+21))>>5)==5 && (1UL<<((( 4*32+21))&31) & 0)) || (((( 4*32+21))>>5)==6 && (1UL<<((( 4*32+21))&31) & 0)) || (((( 4*32+21))>>5)==7 && (1UL<<((( 4*32+21))&31) & 0)) || (((( 4*32+21))>>5)==8 && (1UL<<((( 4*32+21))&31) & 0)) || (((( 4*32+21))>>5)==9 && (1UL<<((( 4*32+21))&31) & 0)) ) ? 1 : (__builtin_constant_p((( 4*32+21))) ? constant_test_bit((( 4*32+21)), ((unsigned long *)((&boot_cpu_data)->x86_capability))) : variable_test_bit((( 4*32+21)), ((unsigned long *)((&boot_cpu_data)->x86_capability))))))
|
|
return 0;
|
|
|
|
do { int _err; msr = paravirt_read_msr(0x0000001b, &_err); } while (0);
|
|
if (msr & (1UL << 10))
|
|
return 1;
|
|
return 0;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void x2apic_force_phys(void)
|
|
{
|
|
x2apic_phys = 1;
|
|
}
|
|
# 216 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
extern void enable_IR_x2apic(void);
|
|
|
|
extern int get_physical_broadcast(void);
|
|
|
|
extern int lapic_get_maxlvt(void);
|
|
extern void clear_local_APIC(void);
|
|
extern void connect_bsp_APIC(void);
|
|
extern void disconnect_bsp_APIC(int virt_wire_setup);
|
|
extern void disable_local_APIC(void);
|
|
extern void lapic_shutdown(void);
|
|
extern int verify_local_APIC(void);
|
|
extern void sync_Arb_IDs(void);
|
|
extern void init_bsp_APIC(void);
|
|
extern void setup_local_APIC(void);
|
|
extern void end_local_APIC_setup(void);
|
|
extern void bsp_end_local_APIC_setup(void);
|
|
extern void init_apic_mappings(void);
|
|
void register_lapic_address(unsigned long address);
|
|
extern void setup_boot_APIC_clock(void);
|
|
extern void setup_secondary_APIC_clock(void);
|
|
extern int APIC_init_uniprocessor(void);
|
|
extern int apic_force_enable(unsigned long addr);
|
|
|
|
|
|
|
|
|
|
|
|
extern int apic_is_clustered_box(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern int setup_APIC_eilvt(u8 lvt_off, u8 vector, u8 msg_type, u8 mask);
|
|
# 278 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
struct apic {
|
|
char *name;
|
|
|
|
int (*probe)(void);
|
|
int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id);
|
|
int (*apic_id_valid)(int apicid);
|
|
int (*apic_id_registered)(void);
|
|
|
|
u32 irq_delivery_mode;
|
|
u32 irq_dest_mode;
|
|
|
|
const struct cpumask *(*target_cpus)(void);
|
|
|
|
int disable_esr;
|
|
|
|
int dest_logical;
|
|
unsigned long (*check_apicid_used)(physid_mask_t *map, int apicid);
|
|
|
|
void (*vector_allocation_domain)(int cpu, struct cpumask *retmask,
|
|
const struct cpumask *mask);
|
|
void (*init_apic_ldr)(void);
|
|
|
|
void (*ioapic_phys_id_map)(physid_mask_t *phys_map, physid_mask_t *retmap);
|
|
|
|
void (*setup_apic_routing)(void);
|
|
int (*cpu_present_to_apicid)(int mps_cpu);
|
|
void (*apicid_to_cpu_present)(int phys_apicid, physid_mask_t *retmap);
|
|
int (*check_phys_apicid_present)(int phys_apicid);
|
|
int (*phys_pkg_id)(int cpuid_apic, int index_msb);
|
|
|
|
unsigned int (*get_apic_id)(unsigned long x);
|
|
unsigned long (*set_apic_id)(unsigned int id);
|
|
unsigned long apic_id_mask;
|
|
|
|
int (*cpu_mask_to_apicid_and)(const struct cpumask *cpumask,
|
|
const struct cpumask *andmask,
|
|
unsigned int *apicid);
|
|
|
|
|
|
void (*send_IPI_mask)(const struct cpumask *mask, int vector);
|
|
void (*send_IPI_mask_allbutself)(const struct cpumask *mask,
|
|
int vector);
|
|
void (*send_IPI_allbutself)(int vector);
|
|
void (*send_IPI_all)(int vector);
|
|
void (*send_IPI_self)(int vector);
|
|
|
|
|
|
int (*wakeup_secondary_cpu)(int apicid, unsigned long start_eip);
|
|
|
|
bool wait_for_init_deassert;
|
|
void (*inquire_remote_apic)(int apicid);
|
|
|
|
|
|
u32 (*read)(u32 reg);
|
|
void (*write)(u32 reg, u32 v);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void (*eoi_write)(u32 reg, u32 v);
|
|
u64 (*icr_read)(void);
|
|
void (*icr_write)(u32 low, u32 high);
|
|
void (*wait_icr_idle)(void);
|
|
u32 (*safe_wait_icr_idle)(void);
|
|
# 359 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern struct apic *apic;
|
|
# 386 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
extern struct apic *__apicdrivers[], *__apicdrivers_end[];
|
|
|
|
|
|
|
|
|
|
|
|
extern atomic_t init_deasserted;
|
|
extern int wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip);
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) u32 apic_read(u32 reg)
|
|
{
|
|
return apic->read(reg);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void apic_write(u32 reg, u32 val)
|
|
{
|
|
apic->write(reg, val);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void apic_eoi(void)
|
|
{
|
|
apic->eoi_write(0xB0, 0x0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 apic_icr_read(void)
|
|
{
|
|
return apic->icr_read();
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void apic_icr_write(u32 low, u32 high)
|
|
{
|
|
apic->icr_write(low, high);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void apic_wait_icr_idle(void)
|
|
{
|
|
apic->wait_icr_idle();
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u32 safe_apic_wait_icr_idle(void)
|
|
{
|
|
return apic->safe_wait_icr_idle();
|
|
}
|
|
|
|
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) apic_set_eoi_write(void (*eoi_write)(u32 reg, u32 v));
|
|
# 448 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
static inline __attribute__((no_instrument_function)) void ack_APIC_irq(void)
|
|
{
|
|
|
|
|
|
|
|
|
|
apic_eoi();
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned default_get_apic_id(unsigned long x)
|
|
{
|
|
unsigned int ver = ((apic_read(0x30)) & 0xFFu);
|
|
|
|
if (((ver) >= 0x14) || (__builtin_constant_p(( 3*32+26)) && ( (((( 3*32+26))>>5)==0 && (1UL<<((( 3*32+26))&31) & ((1<<(( 0*32+ 0) & 31))|0|(1<<(( 0*32+ 5) & 31))|(1<<(( 0*32+ 6) & 31))| (1<<(( 0*32+ 8) & 31))|0|(1<<(( 0*32+24) & 31))|(1<<(( 0*32+15) & 31))| (1<<(( 0*32+25) & 31))|(1<<(( 0*32+26) & 31))))) || (((( 3*32+26))>>5)==1 && (1UL<<((( 3*32+26))&31) & ((1<<(( 1*32+29) & 31))|0))) || (((( 3*32+26))>>5)==2 && (1UL<<((( 3*32+26))&31) & 0)) || (((( 3*32+26))>>5)==3 && (1UL<<((( 3*32+26))&31) & ((1<<(( 3*32+20) & 31))))) || (((( 3*32+26))>>5)==4 && (1UL<<((( 3*32+26))&31) & (0))) || (((( 3*32+26))>>5)==5 && (1UL<<((( 3*32+26))&31) & 0)) || (((( 3*32+26))>>5)==6 && (1UL<<((( 3*32+26))&31) & 0)) || (((( 3*32+26))>>5)==7 && (1UL<<((( 3*32+26))&31) & 0)) || (((( 3*32+26))>>5)==8 && (1UL<<((( 3*32+26))&31) & 0)) || (((( 3*32+26))>>5)==9 && (1UL<<((( 3*32+26))&31) & 0)) ) ? 1 : (__builtin_constant_p((( 3*32+26))) ? constant_test_bit((( 3*32+26)), ((unsigned long *)((&boot_cpu_data)->x86_capability))) : variable_test_bit((( 3*32+26)), ((unsigned long *)((&boot_cpu_data)->x86_capability))))))
|
|
return (x >> 24) & 0xFF;
|
|
else
|
|
return (x >> 24) & 0x0F;
|
|
}
|
|
# 474 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
extern void apic_send_IPI_self(int vector);
|
|
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(int) x2apic_extra_bits;
|
|
|
|
extern int default_cpu_present_to_apicid(int mps_cpu);
|
|
extern int default_check_phys_apicid_present(int phys_apicid);
|
|
|
|
|
|
extern void generic_bigsmp_probe(void);
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/smp.h" 1
|
|
# 488 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h" 2
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) const struct cpumask *default_target_cpus(void)
|
|
{
|
|
|
|
return cpu_online_mask;
|
|
|
|
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) const struct cpumask *online_target_cpus(void)
|
|
{
|
|
return cpu_online_mask;
|
|
}
|
|
|
|
extern __attribute__((section(".data..percpu" "..read_mostly"))) __typeof__(u16) x86_bios_cpu_apicid; extern __typeof__(u16) *x86_bios_cpu_apicid_early_ptr; extern __typeof__(u16) x86_bios_cpu_apicid_early_map[];
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int read_apic_id(void)
|
|
{
|
|
unsigned int reg;
|
|
|
|
reg = apic_read(0x20);
|
|
|
|
return apic->get_apic_id(reg);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int default_apic_id_valid(int apicid)
|
|
{
|
|
return (apicid < 255);
|
|
}
|
|
|
|
extern int default_acpi_madt_oem_check(char *, char *);
|
|
|
|
extern void default_setup_apic_routing(void);
|
|
|
|
extern struct apic apic_noop;
|
|
# 556 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
static inline __attribute__((no_instrument_function)) int
|
|
flat_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
|
|
const struct cpumask *andmask,
|
|
unsigned int *apicid)
|
|
{
|
|
unsigned long cpu_mask = ((cpumask)->bits)[0] &
|
|
((andmask)->bits)[0] &
|
|
((cpu_online_mask)->bits)[0] &
|
|
0xFFu;
|
|
|
|
if (__builtin_expect(!!(cpu_mask), 1)) {
|
|
*apicid = (unsigned int)cpu_mask;
|
|
return 0;
|
|
} else {
|
|
return -22;
|
|
}
|
|
}
|
|
|
|
extern int
|
|
default_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
|
|
const struct cpumask *andmask,
|
|
unsigned int *apicid);
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
flat_vector_allocation_domain(int cpu, struct cpumask *retmask,
|
|
const struct cpumask *mask)
|
|
{
|
|
# 591 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
cpumask_clear(retmask);
|
|
((retmask)->bits)[0] = 0xFFu;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
default_vector_allocation_domain(int cpu, struct cpumask *retmask,
|
|
const struct cpumask *mask)
|
|
{
|
|
cpumask_copy(retmask, (get_cpu_mask(cpu)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long default_check_apicid_used(physid_mask_t *map, int apicid)
|
|
{
|
|
return (__builtin_constant_p((apicid)) ? constant_test_bit((apicid), ((*map).mask)) : variable_test_bit((apicid), ((*map).mask)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void default_ioapic_phys_id_map(physid_mask_t *phys_map, physid_mask_t *retmap)
|
|
{
|
|
*retmap = *phys_map;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int __default_cpu_present_to_apicid(int mps_cpu)
|
|
{
|
|
if (mps_cpu < nr_cpu_ids && (__builtin_constant_p((cpumask_check((mps_cpu)))) ? constant_test_bit((cpumask_check((mps_cpu))), ((((cpu_present_mask))->bits))) : variable_test_bit((cpumask_check((mps_cpu))), ((((cpu_present_mask))->bits)))))
|
|
return (int)(*({ do { const void *__vpp_verify = (typeof((&(x86_bios_cpu_apicid)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((&(x86_bios_cpu_apicid)))) *)((&(x86_bios_cpu_apicid))))); (typeof((typeof(*((&(x86_bios_cpu_apicid)))) *)((&(x86_bios_cpu_apicid))))) (__ptr + (((__per_cpu_offset[(mps_cpu)])))); }); }));
|
|
else
|
|
return 0xFFFFu;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int
|
|
__default_check_phys_apicid_present(int phys_apicid)
|
|
{
|
|
return (__builtin_constant_p((phys_apicid)) ? constant_test_bit((phys_apicid), ((phys_cpu_present_map).mask)) : variable_test_bit((phys_apicid), ((phys_cpu_present_map).mask)));
|
|
}
|
|
# 638 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/apic.h"
|
|
extern int default_cpu_present_to_apicid(int mps_cpu);
|
|
extern int default_check_phys_apicid_present(int phys_apicid);
|
|
|
|
|
|
|
|
extern void irq_enter(void);
|
|
extern void irq_exit(void);
|
|
|
|
static inline __attribute__((no_instrument_function)) void entering_irq(void)
|
|
{
|
|
irq_enter();
|
|
exit_idle();
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void entering_ack_irq(void)
|
|
{
|
|
ack_APIC_irq();
|
|
entering_irq();
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void exiting_irq(void)
|
|
{
|
|
irq_exit();
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void exiting_ack_irq(void)
|
|
{
|
|
irq_exit();
|
|
|
|
ack_APIC_irq();
|
|
}
|
|
|
|
extern void ioapic_zap_locks(void);
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/smp.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io_apic.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irq_vectors.h" 1
|
|
# 141 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irq_vectors.h"
|
|
static inline __attribute__((no_instrument_function)) int invalid_vm86_irq(int irq)
|
|
{
|
|
return irq < 3 || irq > 15;
|
|
}
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io_apic.h" 2
|
|
# 27 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io_apic.h"
|
|
union IO_APIC_reg_00 {
|
|
u32 raw;
|
|
struct {
|
|
u32 __reserved_2 : 14,
|
|
LTS : 1,
|
|
delivery_type : 1,
|
|
__reserved_1 : 8,
|
|
ID : 8;
|
|
} __attribute__ ((packed)) bits;
|
|
};
|
|
|
|
union IO_APIC_reg_01 {
|
|
u32 raw;
|
|
struct {
|
|
u32 version : 8,
|
|
__reserved_2 : 7,
|
|
PRQ : 1,
|
|
entries : 8,
|
|
__reserved_1 : 8;
|
|
} __attribute__ ((packed)) bits;
|
|
};
|
|
|
|
union IO_APIC_reg_02 {
|
|
u32 raw;
|
|
struct {
|
|
u32 __reserved_2 : 24,
|
|
arbitration : 4,
|
|
__reserved_1 : 4;
|
|
} __attribute__ ((packed)) bits;
|
|
};
|
|
|
|
union IO_APIC_reg_03 {
|
|
u32 raw;
|
|
struct {
|
|
u32 boot_DT : 1,
|
|
__reserved_1 : 31;
|
|
} __attribute__ ((packed)) bits;
|
|
};
|
|
|
|
struct IO_APIC_route_entry {
|
|
__u32 vector : 8,
|
|
delivery_mode : 3,
|
|
|
|
|
|
|
|
dest_mode : 1,
|
|
delivery_status : 1,
|
|
polarity : 1,
|
|
irr : 1,
|
|
trigger : 1,
|
|
mask : 1,
|
|
__reserved_2 : 15;
|
|
|
|
__u32 __reserved_3 : 24,
|
|
dest : 8;
|
|
} __attribute__ ((packed));
|
|
|
|
struct IR_IO_APIC_route_entry {
|
|
__u64 vector : 8,
|
|
zero : 3,
|
|
index2 : 1,
|
|
delivery_status : 1,
|
|
polarity : 1,
|
|
irr : 1,
|
|
trigger : 1,
|
|
mask : 1,
|
|
reserved : 31,
|
|
format : 1,
|
|
index : 15;
|
|
} __attribute__ ((packed));
|
|
# 109 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io_apic.h"
|
|
extern int nr_ioapics;
|
|
|
|
extern int mpc_ioapic_id(int ioapic);
|
|
extern unsigned int mpc_ioapic_addr(int ioapic);
|
|
extern struct mp_ioapic_gsi *mp_ioapic_gsi_routing(int ioapic);
|
|
|
|
|
|
|
|
|
|
extern int mp_irq_entries;
|
|
|
|
|
|
extern struct mpc_intsrc mp_irqs[(256 * 4)];
|
|
|
|
|
|
extern int sis_apic_bug;
|
|
|
|
|
|
extern int skip_ioapic_setup;
|
|
|
|
|
|
extern int noioapicquirk;
|
|
|
|
|
|
extern int noioapicreroute;
|
|
|
|
extern unsigned long io_apic_irqs;
|
|
# 146 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/io_apic.h"
|
|
struct irq_cfg;
|
|
extern void ioapic_insert_resources(void);
|
|
extern int arch_early_ioapic_init(void);
|
|
|
|
extern int native_setup_ioapic_entry(int, struct IO_APIC_route_entry *,
|
|
unsigned int, int,
|
|
struct io_apic_irq_attr *);
|
|
extern void eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg);
|
|
|
|
extern void native_eoi_ioapic_pin(int apic, int pin, int vector);
|
|
|
|
extern int save_ioapic_entries(void);
|
|
extern void mask_ioapic_entries(void);
|
|
extern int restore_ioapic_entries(void);
|
|
|
|
extern void setup_ioapic_ids_from_mpc(void);
|
|
extern void setup_ioapic_ids_from_mpc_nocheck(void);
|
|
|
|
struct io_apic_irq_attr {
|
|
int ioapic;
|
|
int ioapic_pin;
|
|
int trigger;
|
|
int polarity;
|
|
};
|
|
|
|
enum ioapic_domain_type {
|
|
IOAPIC_DOMAIN_INVALID,
|
|
IOAPIC_DOMAIN_LEGACY,
|
|
IOAPIC_DOMAIN_STRICT,
|
|
IOAPIC_DOMAIN_DYNAMIC,
|
|
};
|
|
|
|
struct device_node;
|
|
struct irq_domain;
|
|
struct irq_domain_ops;
|
|
|
|
struct ioapic_domain_cfg {
|
|
enum ioapic_domain_type type;
|
|
const struct irq_domain_ops *ops;
|
|
struct device_node *dev;
|
|
};
|
|
|
|
struct mp_ioapic_gsi{
|
|
u32 gsi_base;
|
|
u32 gsi_end;
|
|
};
|
|
extern u32 gsi_top;
|
|
|
|
extern int mp_find_ioapic(u32 gsi);
|
|
extern int mp_find_ioapic_pin(int ioapic, u32 gsi);
|
|
extern u32 mp_pin_to_gsi(int ioapic, int pin);
|
|
extern int mp_map_gsi_to_irq(u32 gsi, unsigned int flags);
|
|
extern void mp_unmap_irq(int irq);
|
|
extern int mp_register_ioapic(int id, u32 address, u32 gsi_base,
|
|
struct ioapic_domain_cfg *cfg);
|
|
extern int mp_unregister_ioapic(u32 gsi_base);
|
|
extern int mp_ioapic_registered(u32 gsi_base);
|
|
extern int mp_irqdomain_map(struct irq_domain *domain, unsigned int virq,
|
|
irq_hw_number_t hwirq);
|
|
extern void mp_irqdomain_unmap(struct irq_domain *domain, unsigned int virq);
|
|
extern int mp_set_gsi_attr(u32 gsi, int trigger, int polarity, int node);
|
|
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) pre_init_apic_IRQ0(void);
|
|
|
|
extern void mp_save_irq(struct mpc_intsrc *m);
|
|
|
|
extern void disable_ioapic_support(void);
|
|
|
|
extern void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) native_io_apic_init_mappings(void);
|
|
extern unsigned int native_io_apic_read(unsigned int apic, unsigned int reg);
|
|
extern void native_io_apic_write(unsigned int apic, unsigned int reg, unsigned int val);
|
|
extern void native_io_apic_modify(unsigned int apic, unsigned int reg, unsigned int val);
|
|
extern void native_disable_io_apic(void);
|
|
extern void native_io_apic_print_entries(unsigned int apic, unsigned int nr_entries);
|
|
extern void intel_ir_io_apic_print_entries(unsigned int apic, unsigned int nr_entries);
|
|
extern int native_ioapic_set_affinity(struct irq_data *,
|
|
const struct cpumask *,
|
|
bool);
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int io_apic_read(unsigned int apic, unsigned int reg)
|
|
{
|
|
return x86_io_apic_ops.read(apic, reg);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void io_apic_write(unsigned int apic, unsigned int reg, unsigned int value)
|
|
{
|
|
x86_io_apic_ops.write(apic, reg, value);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void io_apic_modify(unsigned int apic, unsigned int reg, unsigned int value)
|
|
{
|
|
x86_io_apic_ops.modify(apic, reg, value);
|
|
}
|
|
|
|
extern void io_apic_eoi(unsigned int apic, unsigned int vector);
|
|
|
|
extern void setup_IO_APIC(void);
|
|
extern void enable_IO_APIC(void);
|
|
extern void disable_IO_APIC(void);
|
|
extern void setup_ioapic_dest(void);
|
|
extern int IO_APIC_get_PCI_irq_vector(int bus, int devfn, int pin);
|
|
extern void print_IO_APICs(void);
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/smp.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern int smp_num_siblings;
|
|
extern unsigned int num_processors;
|
|
|
|
static inline __attribute__((no_instrument_function)) bool cpu_has_ht_siblings(void)
|
|
{
|
|
bool has_siblings = false;
|
|
|
|
has_siblings = (__builtin_constant_p(( 0*32+28)) && ( (((( 0*32+28))>>5)==0 && (1UL<<((( 0*32+28))&31) & ((1<<(( 0*32+ 0) & 31))|0|(1<<(( 0*32+ 5) & 31))|(1<<(( 0*32+ 6) & 31))| (1<<(( 0*32+ 8) & 31))|0|(1<<(( 0*32+24) & 31))|(1<<(( 0*32+15) & 31))| (1<<(( 0*32+25) & 31))|(1<<(( 0*32+26) & 31))))) || (((( 0*32+28))>>5)==1 && (1UL<<((( 0*32+28))&31) & ((1<<(( 1*32+29) & 31))|0))) || (((( 0*32+28))>>5)==2 && (1UL<<((( 0*32+28))&31) & 0)) || (((( 0*32+28))>>5)==3 && (1UL<<((( 0*32+28))&31) & ((1<<(( 3*32+20) & 31))))) || (((( 0*32+28))>>5)==4 && (1UL<<((( 0*32+28))&31) & (0))) || (((( 0*32+28))>>5)==5 && (1UL<<((( 0*32+28))&31) & 0)) || (((( 0*32+28))>>5)==6 && (1UL<<((( 0*32+28))&31) & 0)) || (((( 0*32+28))>>5)==7 && (1UL<<((( 0*32+28))&31) & 0)) || (((( 0*32+28))>>5)==8 && (1UL<<((( 0*32+28))&31) & 0)) || (((( 0*32+28))>>5)==9 && (1UL<<((( 0*32+28))&31) & 0)) ) ? 1 : (__builtin_constant_p((( 0*32+28))) ? constant_test_bit((( 0*32+28)), ((unsigned long *)((&boot_cpu_data)->x86_capability))) : variable_test_bit((( 0*32+28)), ((unsigned long *)((&boot_cpu_data)->x86_capability))))) && smp_num_siblings > 1;
|
|
|
|
return has_siblings;
|
|
}
|
|
|
|
extern __attribute__((section(".data..percpu" "..read_mostly"))) __typeof__(cpumask_var_t) cpu_sibling_map;
|
|
extern __attribute__((section(".data..percpu" "..read_mostly"))) __typeof__(cpumask_var_t) cpu_core_map;
|
|
|
|
extern __attribute__((section(".data..percpu" "..read_mostly"))) __typeof__(cpumask_var_t) cpu_llc_shared_map;
|
|
extern __attribute__((section(".data..percpu" "..read_mostly"))) __typeof__(u16) cpu_llc_id;
|
|
extern __attribute__((section(".data..percpu" "..read_mostly"))) __typeof__(int) cpu_number;
|
|
|
|
static inline __attribute__((no_instrument_function)) struct cpumask *cpu_sibling_mask(int cpu)
|
|
{
|
|
return (*({ do { const void *__vpp_verify = (typeof((&(cpu_sibling_map)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((&(cpu_sibling_map)))) *)((&(cpu_sibling_map))))); (typeof((typeof(*((&(cpu_sibling_map)))) *)((&(cpu_sibling_map))))) (__ptr + (((__per_cpu_offset[(cpu)])))); }); }));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct cpumask *cpu_core_mask(int cpu)
|
|
{
|
|
return (*({ do { const void *__vpp_verify = (typeof((&(cpu_core_map)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((&(cpu_core_map)))) *)((&(cpu_core_map))))); (typeof((typeof(*((&(cpu_core_map)))) *)((&(cpu_core_map))))) (__ptr + (((__per_cpu_offset[(cpu)])))); }); }));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct cpumask *cpu_llc_shared_mask(int cpu)
|
|
{
|
|
return (*({ do { const void *__vpp_verify = (typeof((&(cpu_llc_shared_map)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((&(cpu_llc_shared_map)))) *)((&(cpu_llc_shared_map))))); (typeof((typeof(*((&(cpu_llc_shared_map)))) *)((&(cpu_llc_shared_map))))) (__ptr + (((__per_cpu_offset[(cpu)])))); }); }));
|
|
}
|
|
|
|
extern __attribute__((section(".data..percpu" "..read_mostly"))) __typeof__(u16) x86_cpu_to_apicid; extern __typeof__(u16) *x86_cpu_to_apicid_early_ptr; extern __typeof__(u16) x86_cpu_to_apicid_early_map[];
|
|
extern __attribute__((section(".data..percpu" "..read_mostly"))) __typeof__(u16) x86_bios_cpu_apicid; extern __typeof__(u16) *x86_bios_cpu_apicid_early_ptr; extern __typeof__(u16) x86_bios_cpu_apicid_early_map[];
|
|
|
|
|
|
|
|
|
|
|
|
extern unsigned long stack_start;
|
|
|
|
struct task_struct;
|
|
|
|
struct smp_ops {
|
|
void (*smp_prepare_boot_cpu)(void);
|
|
void (*smp_prepare_cpus)(unsigned max_cpus);
|
|
void (*smp_cpus_done)(unsigned max_cpus);
|
|
|
|
void (*stop_other_cpus)(int wait);
|
|
void (*smp_send_reschedule)(int cpu);
|
|
|
|
int (*cpu_up)(unsigned cpu, struct task_struct *tidle);
|
|
int (*cpu_disable)(void);
|
|
void (*cpu_die)(unsigned int cpu);
|
|
void (*play_dead)(void);
|
|
|
|
void (*send_call_func_ipi)(const struct cpumask *mask);
|
|
void (*send_call_func_single_ipi)(int cpu);
|
|
};
|
|
|
|
|
|
extern void set_cpu_sibling_map(int cpu);
|
|
|
|
|
|
|
|
|
|
|
|
extern struct smp_ops smp_ops;
|
|
|
|
static inline __attribute__((no_instrument_function)) void smp_send_stop(void)
|
|
{
|
|
smp_ops.stop_other_cpus(0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void stop_other_cpus(void)
|
|
{
|
|
smp_ops.stop_other_cpus(1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void smp_prepare_boot_cpu(void)
|
|
{
|
|
smp_ops.smp_prepare_boot_cpu();
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void smp_prepare_cpus(unsigned int max_cpus)
|
|
{
|
|
smp_ops.smp_prepare_cpus(max_cpus);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void smp_cpus_done(unsigned int max_cpus)
|
|
{
|
|
smp_ops.smp_cpus_done(max_cpus);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int __cpu_up(unsigned int cpu, struct task_struct *tidle)
|
|
{
|
|
return smp_ops.cpu_up(cpu, tidle);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int __cpu_disable(void)
|
|
{
|
|
return smp_ops.cpu_disable();
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __cpu_die(unsigned int cpu)
|
|
{
|
|
smp_ops.cpu_die(cpu);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void play_dead(void)
|
|
{
|
|
smp_ops.play_dead();
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void smp_send_reschedule(int cpu)
|
|
{
|
|
smp_ops.smp_send_reschedule(cpu);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_send_call_function_single_ipi(int cpu)
|
|
{
|
|
smp_ops.send_call_func_single_ipi(cpu);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_send_call_function_ipi_mask(const struct cpumask *mask)
|
|
{
|
|
smp_ops.send_call_func_ipi(mask);
|
|
}
|
|
|
|
void cpu_disable_common(void);
|
|
void cpu_die_common(unsigned int cpu);
|
|
void native_smp_prepare_boot_cpu(void);
|
|
void native_smp_prepare_cpus(unsigned int max_cpus);
|
|
void native_smp_cpus_done(unsigned int max_cpus);
|
|
int native_cpu_up(unsigned int cpunum, struct task_struct *tidle);
|
|
int native_cpu_disable(void);
|
|
void native_cpu_die(unsigned int cpu);
|
|
void native_play_dead(void);
|
|
void play_dead_common(void);
|
|
void wbinvd_on_cpu(int cpu);
|
|
int wbinvd_on_all_cpus(void);
|
|
|
|
void native_send_call_func_ipi(const struct cpumask *mask);
|
|
void native_send_call_func_single_ipi(int cpu);
|
|
void x86_idle_thread_init(unsigned int cpu, struct task_struct *idle);
|
|
|
|
void smp_store_boot_cpu_info(void);
|
|
void smp_store_cpu_info(int id);
|
|
# 182 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/smp.h"
|
|
extern unsigned disabled_cpus;
|
|
# 217 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/smp.h"
|
|
extern int hard_smp_processor_id(void);
|
|
# 60 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/smp.h" 2
|
|
# 69 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu_counter.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pfn.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu.h" 2
|
|
# 57 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
|
|
extern int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) pcpu_embed_first_chunk(size_t reserved_size, size_t dyn_size,
|
|
size_t atom_size,
|
|
pcpu_fc_cpu_distance_fn_t cpu_distance_fn,
|
|
pcpu_fc_alloc_fn_t alloc_fn,
|
|
pcpu_fc_free_fn_t free_fn);
|
|
|
|
|
|
|
|
extern int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) pcpu_page_first_chunk(size_t reserved_size,
|
|
pcpu_fc_alloc_fn_t alloc_fn,
|
|
pcpu_fc_free_fn_t free_fn,
|
|
pcpu_fc_populate_pte_fn_t populate_pte_fn);
|
|
|
|
|
|
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)) 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);
|
|
# 139 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu.h"
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(printk_func_t) printk_func;
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu_counter.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/gfp.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pageblock-flags.h" 1
|
|
# 29 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pageblock-flags.h"
|
|
enum pageblock_bits {
|
|
PB_migrate,
|
|
PB_migrate_end = PB_migrate + 3 - 1,
|
|
|
|
PB_migrate_skip,
|
|
|
|
|
|
|
|
|
|
|
|
NR_PAGEBLOCK_BITS
|
|
};
|
|
# 66 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags-layout.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "include/generated/bounds.h" 1
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags-layout.h" 2
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h" 2
|
|
# 38 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
enum {
|
|
MIGRATE_UNMOVABLE,
|
|
MIGRATE_RECLAIMABLE,
|
|
MIGRATE_MOVABLE,
|
|
MIGRATE_PCPTYPES,
|
|
MIGRATE_RESERVE = MIGRATE_PCPTYPES,
|
|
# 58 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
MIGRATE_CMA,
|
|
|
|
|
|
MIGRATE_ISOLATE,
|
|
|
|
MIGRATE_TYPES
|
|
};
|
|
# 76 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
extern int page_group_by_mobility_disabled;
|
|
# 85 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
static inline __attribute__((no_instrument_function)) int get_pfnblock_migratetype(struct page *page, unsigned long pfn)
|
|
{
|
|
do { bool __cond = !(!(PB_migrate_end - PB_migrate != 2)); extern void __compiletime_assert_87(void) __attribute__((error("BUILD_BUG_ON failed: " "PB_migrate_end - PB_migrate != 2"))); if (__cond) __compiletime_assert_87(); do { } while (0); } while (0);
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
struct zone_padding {
|
|
char x[0];
|
|
} __attribute__((__aligned__(1 << (6))));
|
|
|
|
|
|
|
|
|
|
|
|
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,
|
|
|
|
NUMA_HIT,
|
|
NUMA_MISS,
|
|
NUMA_FOREIGN,
|
|
NUMA_INTERLEAVE_HIT,
|
|
NUMA_LOCAL,
|
|
NUMA_OTHER,
|
|
|
|
WORKINGSET_REFAULT,
|
|
WORKINGSET_ACTIVATE,
|
|
WORKINGSET_NODERECLAIM,
|
|
NR_ANON_TRANSPARENT_HUGEPAGES,
|
|
NR_FREE_CMA_PAGES,
|
|
NR_VM_ZONE_STAT_ITEMS };
|
|
# 175 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) int is_file_lru(enum lru_list lru)
|
|
{
|
|
return (lru == LRU_INACTIVE_FILE || lru == LRU_ACTIVE_FILE);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) int is_unevictable_lru(enum lru_list lru)
|
|
{
|
|
return (lru == LRU_UNEVICTABLE);
|
|
}
|
|
|
|
struct zone_reclaim_stat {
|
|
# 212 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
struct zone *zone;
|
|
|
|
};
|
|
# 239 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 expire;
|
|
|
|
|
|
s8 stat_threshold;
|
|
s8 vm_stat_diff[NR_VM_ZONE_STAT_ITEMS];
|
|
|
|
};
|
|
|
|
|
|
|
|
enum zone_type {
|
|
# 294 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
ZONE_DMA,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ZONE_DMA32,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ZONE_NORMAL,
|
|
# 321 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
ZONE_MOVABLE,
|
|
__MAX_NR_ZONES
|
|
};
|
|
|
|
|
|
|
|
struct zone {
|
|
|
|
|
|
|
|
unsigned long watermark[NR_WMARK];
|
|
# 341 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
long lowmem_reserve[4];
|
|
|
|
|
|
int node;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned int inactive_ratio;
|
|
|
|
struct pglist_data *zone_pgdat;
|
|
struct per_cpu_pageset *pageset;
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long dirty_balance_reserve;
|
|
# 374 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
unsigned long min_unmapped_pages;
|
|
unsigned long min_slab_pages;
|
|
|
|
|
|
|
|
unsigned long zone_start_pfn;
|
|
# 422 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
unsigned long managed_pages;
|
|
unsigned long spanned_pages;
|
|
unsigned long present_pages;
|
|
|
|
const char *name;
|
|
|
|
|
|
|
|
|
|
|
|
int nr_migrate_reserve_block;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long nr_isolate_pageblock;
|
|
|
|
|
|
|
|
|
|
seqlock_t span_seqlock;
|
|
# 472 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 << (6))));
|
|
|
|
enum zone_flags {
|
|
ZONE_RECLAIM_LOCKED,
|
|
ZONE_OOM_LOCKED,
|
|
ZONE_CONGESTED,
|
|
|
|
|
|
ZONE_DIRTY,
|
|
|
|
|
|
|
|
ZONE_WRITEBACK,
|
|
|
|
|
|
ZONE_FAIR_DEPLETED,
|
|
};
|
|
|
|
static 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__((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__((no_instrument_function)) bool zone_is_initialized(struct zone *zone)
|
|
{
|
|
return !!zone->wait_table;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool zone_is_empty(struct zone *zone)
|
|
{
|
|
return zone->spanned_pages == 0;
|
|
}
|
|
# 650 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
struct zonelist_cache {
|
|
unsigned short z_to_n[((1 << 6) * 4)];
|
|
unsigned long fullzones[(((((1 << 6) * 4)) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
|
|
unsigned long last_full_zap;
|
|
};
|
|
# 664 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
struct zoneref {
|
|
struct zone *zone;
|
|
int zone_idx;
|
|
};
|
|
# 686 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
struct zonelist {
|
|
struct zonelist_cache *zlcache_ptr;
|
|
struct zoneref _zonerefs[((1 << 6) * 4) + 1];
|
|
|
|
struct zonelist_cache zlcache;
|
|
|
|
};
|
|
|
|
|
|
struct node_active_region {
|
|
unsigned long start_pfn;
|
|
unsigned long end_pfn;
|
|
int nid;
|
|
};
|
|
|
|
|
|
|
|
|
|
extern struct page *mem_map;
|
|
# 718 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
struct bootmem_data;
|
|
typedef struct pglist_data {
|
|
struct zone node_zones[4];
|
|
struct zonelist node_zonelists[2];
|
|
int nr_zones;
|
|
# 743 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
spinlock_t node_size_lock;
|
|
|
|
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;
|
|
|
|
|
|
spinlock_t numabalancing_migrate_lock;
|
|
|
|
|
|
unsigned long numabalancing_migrate_next_window;
|
|
|
|
|
|
unsigned long numabalancing_migrate_nr_pages;
|
|
|
|
} pg_data_t;
|
|
# 780 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
static 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__((no_instrument_function)) bool pgdat_is_empty(pg_data_t *pgdat)
|
|
{
|
|
return !pgdat->node_start_pfn && !pgdat->node_spanned_pages;
|
|
}
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/memory_hotplug.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/memory_hotplug.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/notifier.h" 1
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/notifier.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/srcu.h" 1
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/srcu.h"
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/srcu.h"
|
|
int init_srcu_struct(struct srcu_struct *sp);
|
|
|
|
|
|
|
|
|
|
void process_srcu(struct work_struct *work);
|
|
# 130 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/srcu.h"
|
|
static inline __attribute__((no_instrument_function)) int srcu_read_lock_held(struct srcu_struct *sp)
|
|
{
|
|
return 1;
|
|
}
|
|
# 218 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/srcu.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/srcu.h"
|
|
static inline __attribute__((no_instrument_function)) void srcu_read_unlock(struct srcu_struct *sp, int idx)
|
|
|
|
{
|
|
do { } while (0);
|
|
__srcu_read_unlock(sp, idx);
|
|
}
|
|
# 249 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/srcu.h"
|
|
static inline __attribute__((no_instrument_function)) void smp_mb__after_srcu_read_unlock(void)
|
|
{
|
|
|
|
}
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/notifier.h" 2
|
|
# 50 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/notifier.h"
|
|
extern void srcu_init_notifier_head(struct srcu_notifier_head *nh);
|
|
# 118 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/notifier.h"
|
|
static inline __attribute__((no_instrument_function)) int notifier_from_errno(int err)
|
|
{
|
|
if (err)
|
|
return 0x8000 | (0x0001 - err);
|
|
|
|
return 0x0001;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int notifier_to_errno(int ret)
|
|
{
|
|
ret &= ~0x8000;
|
|
return ret > 0x0001 ? 0x0001 - ret : 0;
|
|
}
|
|
# 212 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/notifier.h"
|
|
extern struct blocking_notifier_head reboot_notifier_list;
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/memory_hotplug.h" 2
|
|
|
|
|
|
struct page;
|
|
struct zone;
|
|
struct pglist_data;
|
|
struct mem_section;
|
|
struct memory_block;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum {
|
|
MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE = 12,
|
|
SECTION_INFO = MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE,
|
|
MIX_SECTION_INFO,
|
|
NODE_INFO,
|
|
MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE = NODE_INFO,
|
|
};
|
|
|
|
|
|
enum {
|
|
MMOP_OFFLINE = -1,
|
|
MMOP_ONLINE_KEEP,
|
|
MMOP_ONLINE_KERNEL,
|
|
MMOP_ONLINE_MOVABLE,
|
|
};
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function))
|
|
void pgdat_resize_lock(struct pglist_data *pgdat, unsigned long *flags)
|
|
{
|
|
do { do { ({ unsigned long __dummy; typeof(*flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); *flags = _raw_spin_lock_irqsave(spinlock_check(&pgdat->node_size_lock)); } while (0); } while (0);
|
|
}
|
|
static inline __attribute__((no_instrument_function))
|
|
void pgdat_resize_unlock(struct pglist_data *pgdat, unsigned long *flags)
|
|
{
|
|
spin_unlock_irqrestore(&pgdat->node_size_lock, *flags);
|
|
}
|
|
static inline __attribute__((no_instrument_function))
|
|
void pgdat_resize_init(struct pglist_data *pgdat)
|
|
{
|
|
do { spinlock_check(&pgdat->node_size_lock); do { *(&(&pgdat->node_size_lock)->rlock) = (raw_spinlock_t) { .raw_lock = { { 0 } }, }; } while (0); } while (0);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned zone_span_seqbegin(struct zone *zone)
|
|
{
|
|
return read_seqbegin(&zone->span_seqlock);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) int zone_span_seqretry(struct zone *zone, unsigned iv)
|
|
{
|
|
return read_seqretry(&zone->span_seqlock, iv);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void zone_span_writelock(struct zone *zone)
|
|
{
|
|
write_seqlock(&zone->span_seqlock);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void zone_span_writeunlock(struct zone *zone)
|
|
{
|
|
write_sequnlock(&zone->span_seqlock);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void zone_seqlock_init(struct zone *zone)
|
|
{
|
|
do { __seqcount_init(&(&zone->span_seqlock)->seqcount, ((void *)0), ((void *)0)); do { spinlock_check(&(&zone->span_seqlock)->lock); do { *(&(&(&zone->span_seqlock)->lock)->rlock) = (raw_spinlock_t) { .raw_lock = { { 0 } }, }; } while (0); } while (0); } while (0);
|
|
}
|
|
extern int zone_grow_free_lists(struct zone *zone, unsigned long new_nr_pages);
|
|
extern int zone_grow_waitqueues(struct zone *zone, unsigned long nr_pages);
|
|
extern int add_one_highpage(struct page *page, int pfn, int bad_ppro);
|
|
|
|
extern int online_pages(unsigned long, unsigned long, int);
|
|
extern int test_pages_in_a_zone(unsigned long, unsigned long);
|
|
extern void __offline_isolated_pages(unsigned long, unsigned long);
|
|
|
|
typedef void (*online_page_callback_t)(struct page *page);
|
|
|
|
extern int set_online_page_callback(online_page_callback_t callback);
|
|
extern int restore_online_page_callback(online_page_callback_t callback);
|
|
|
|
extern void __online_page_set_limits(struct page *page);
|
|
extern void __online_page_increment_counters(struct page *page);
|
|
extern void __online_page_free(struct page *page);
|
|
|
|
extern int try_online_node(int nid);
|
|
|
|
|
|
extern bool is_pageblock_removable_nolock(struct page *page);
|
|
extern int arch_remove_memory(u64 start, u64 size);
|
|
extern int __remove_pages(struct zone *zone, unsigned long start_pfn,
|
|
unsigned long nr_pages);
|
|
|
|
|
|
|
|
extern int __add_pages(int nid, struct zone *zone, unsigned long start_pfn,
|
|
unsigned long nr_pages);
|
|
|
|
|
|
extern int memory_add_physaddr_to_nid(u64 start);
|
|
# 158 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/memory_hotplug.h"
|
|
extern pg_data_t *node_data[];
|
|
static inline __attribute__((no_instrument_function)) void arch_refresh_nodedata(int nid, pg_data_t *pgdat)
|
|
{
|
|
node_data[nid] = pgdat;
|
|
}
|
|
# 182 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/memory_hotplug.h"
|
|
extern void register_page_bootmem_info_node(struct pglist_data *pgdat);
|
|
|
|
|
|
|
|
|
|
|
|
extern void put_page_bootmem(struct page *page);
|
|
extern void get_page_bootmem(unsigned long ingo, struct page *page,
|
|
unsigned long type);
|
|
|
|
void get_online_mems(void);
|
|
void put_online_mems(void);
|
|
# 238 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/memory_hotplug.h"
|
|
extern int is_mem_section_removable(unsigned long pfn, unsigned long nr_pages);
|
|
extern void try_offline_node(int nid);
|
|
extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages);
|
|
extern void remove_memory(int nid, u64 start, u64 size);
|
|
# 260 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/memory_hotplug.h"
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) struct zone *lruvec_zone(struct lruvec *lruvec)
|
|
{
|
|
|
|
return lruvec->zone;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
void memory_present(int nid, unsigned long start, unsigned long end);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int local_memory_node(int node_id) { return node_id; };
|
|
# 839 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
static inline __attribute__((no_instrument_function)) int populated_zone(struct zone *zone)
|
|
{
|
|
return (!!zone->present_pages);
|
|
}
|
|
|
|
extern int movable_zone;
|
|
|
|
static inline __attribute__((no_instrument_function)) int zone_movable_is_highmem(void)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int is_highmem_idx(enum zone_type idx)
|
|
{
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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[4 -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[];
|
|
# 912 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mmzone.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mmzone_64.h" 1
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mmzone_64.h"
|
|
extern struct pglist_data *node_data[];
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/mmzone.h" 2
|
|
# 913 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h" 2
|
|
|
|
|
|
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
static inline __attribute__((no_instrument_function)) struct zone *zonelist_zone(struct zoneref *zoneref)
|
|
{
|
|
return zoneref->zone;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int zonelist_zone_idx(struct zoneref *zoneref)
|
|
{
|
|
return zoneref->zone_idx;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int zonelist_node_idx(struct zoneref *zoneref)
|
|
{
|
|
|
|
|
|
return zoneref->zone->node;
|
|
|
|
|
|
|
|
}
|
|
# 981 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
struct zoneref *next_zones_zonelist(struct zoneref *z,
|
|
enum zone_type highest_zoneidx,
|
|
nodemask_t *nodes,
|
|
struct zone **zone);
|
|
# 998 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
static 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);
|
|
}
|
|
# 1080 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
struct page;
|
|
struct page_ext;
|
|
struct mem_section {
|
|
# 1095 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
unsigned long section_mem_map;
|
|
|
|
|
|
unsigned long *pageblock_flags;
|
|
# 1111 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
};
|
|
# 1124 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
extern struct mem_section *mem_section[((((1UL << (46 - 27))) + ((((1UL) << 12) / sizeof (struct mem_section))) - 1) / ((((1UL) << 12) / sizeof (struct mem_section))))];
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) struct mem_section *__nr_to_section(unsigned long nr)
|
|
{
|
|
if (!mem_section[((nr) / (((1UL) << 12) / sizeof (struct mem_section)))])
|
|
return ((void *)0);
|
|
return &mem_section[((nr) / (((1UL) << 12) / sizeof (struct mem_section)))][nr & ((((1UL) << 12) / sizeof (struct mem_section)) - 1)];
|
|
}
|
|
extern int __section_nr(struct mem_section* ms);
|
|
extern unsigned long usemap_size(void);
|
|
# 1149 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
static inline __attribute__((no_instrument_function)) struct page *__section_mem_map_addr(struct mem_section *section)
|
|
{
|
|
unsigned long map = section->section_mem_map;
|
|
map &= (~((1UL<<2)-1));
|
|
return (struct page *)map;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int present_section(struct mem_section *section)
|
|
{
|
|
return (section && (section->section_mem_map & (1UL<<0)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int present_section_nr(unsigned long nr)
|
|
{
|
|
return present_section(__nr_to_section(nr));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int valid_section(struct mem_section *section)
|
|
{
|
|
return (section && (section->section_mem_map & (1UL<<1)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int valid_section_nr(unsigned long nr)
|
|
{
|
|
return valid_section(__nr_to_section(nr));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct mem_section *__pfn_to_section(unsigned long pfn)
|
|
{
|
|
return __nr_to_section(((pfn) >> (27 - 12)));
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pfn_valid(unsigned long pfn)
|
|
{
|
|
if (((pfn) >> (27 - 12)) >= (1UL << (46 - 27)))
|
|
return 0;
|
|
return valid_section(__nr_to_section(((pfn) >> (27 - 12))));
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pfn_present(unsigned long pfn)
|
|
{
|
|
if (((pfn) >> (27 - 12)) >= (1UL << (46 - 27)))
|
|
return 0;
|
|
return present_section(__nr_to_section(((pfn) >> (27 - 12))));
|
|
}
|
|
# 1213 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
void sparse_init(void);
|
|
# 1224 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
struct mminit_pfnnid_cache {
|
|
unsigned long last_start;
|
|
unsigned long last_end;
|
|
int last_nid;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
# 1268 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mmzone.h"
|
|
static inline __attribute__((no_instrument_function)) int memmap_valid_within(unsigned long pfn,
|
|
struct page *page, struct zone *zone)
|
|
{
|
|
return 1;
|
|
}
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/gfp.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/topology.h" 1
|
|
# 49 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/topology.h"
|
|
int arch_update_cpu_topology(void);
|
|
# 71 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/topology.h"
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(int) numa_node;
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int numa_node_id(void)
|
|
{
|
|
return ({ typeof(numa_node) pscr_ret__; do { const void *__vpp_verify = (typeof((&(numa_node)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(numa_node)) { case 1: pscr_ret__ = ({ typeof(numa_node) pfo_ret__; switch (sizeof(numa_node)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (numa_node)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 2: pscr_ret__ = ({ typeof(numa_node) pfo_ret__; switch (sizeof(numa_node)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (numa_node)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 4: pscr_ret__ = ({ typeof(numa_node) pfo_ret__; switch (sizeof(numa_node)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (numa_node)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 8: pscr_ret__ = ({ typeof(numa_node) pfo_ret__; switch (sizeof(numa_node)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (numa_node)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (numa_node)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; default: __bad_size_call_parameter(); break; } pscr_ret__; });
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int cpu_to_node(int cpu)
|
|
{
|
|
return (*({ do { const void *__vpp_verify = (typeof((&(numa_node)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((&(numa_node)))) *)((&(numa_node))))); (typeof((typeof(*((&(numa_node)))) *)((&(numa_node))))) (__ptr + (((__per_cpu_offset[(cpu)])))); }); }));
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_numa_node(int node)
|
|
{
|
|
do { do { const void *__vpp_verify = (typeof((&(numa_node)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(numa_node)) { case 1: do { typedef typeof((numa_node)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (node); (void)pto_tmp__; } switch (sizeof((numa_node))) { case 1: asm("mov" "b %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "qi" ((pto_T__)(node))); break; case 2: asm("mov" "w %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "ri" ((pto_T__)(node))); break; case 4: asm("mov" "l %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "ri" ((pto_T__)(node))); break; case 8: asm("mov" "q %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "re" ((pto_T__)(node))); break; default: __bad_percpu_size(); } } while (0);break; case 2: do { typedef typeof((numa_node)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (node); (void)pto_tmp__; } switch (sizeof((numa_node))) { case 1: asm("mov" "b %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "qi" ((pto_T__)(node))); break; case 2: asm("mov" "w %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "ri" ((pto_T__)(node))); break; case 4: asm("mov" "l %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "ri" ((pto_T__)(node))); break; case 8: asm("mov" "q %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "re" ((pto_T__)(node))); break; default: __bad_percpu_size(); } } while (0);break; case 4: do { typedef typeof((numa_node)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (node); (void)pto_tmp__; } switch (sizeof((numa_node))) { case 1: asm("mov" "b %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "qi" ((pto_T__)(node))); break; case 2: asm("mov" "w %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "ri" ((pto_T__)(node))); break; case 4: asm("mov" "l %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "ri" ((pto_T__)(node))); break; case 8: asm("mov" "q %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "re" ((pto_T__)(node))); break; default: __bad_percpu_size(); } } while (0);break; case 8: do { typedef typeof((numa_node)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (node); (void)pto_tmp__; } switch (sizeof((numa_node))) { case 1: asm("mov" "b %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "qi" ((pto_T__)(node))); break; case 2: asm("mov" "w %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "ri" ((pto_T__)(node))); break; case 4: asm("mov" "l %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "ri" ((pto_T__)(node))); break; case 8: asm("mov" "q %1,""%%""gs"":" "%" "0" : "+m" ((numa_node)) : "re" ((pto_T__)(node))); break; default: __bad_percpu_size(); } } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_cpu_numa_node(int cpu, int node)
|
|
{
|
|
(*({ do { const void *__vpp_verify = (typeof((&(numa_node)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((&(numa_node)))) *)((&(numa_node))))); (typeof((typeof(*((&(numa_node)))) *)((&(numa_node))))) (__ptr + (((__per_cpu_offset[(cpu)])))); }); })) = node;
|
|
}
|
|
# 166 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/topology.h"
|
|
static inline __attribute__((no_instrument_function)) int numa_mem_id(void)
|
|
{
|
|
return numa_node_id();
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int node_to_mem_node(int node)
|
|
{
|
|
return node;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int cpu_to_mem(int cpu)
|
|
{
|
|
return cpu_to_node(cpu);
|
|
}
|
|
# 202 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/topology.h"
|
|
static inline __attribute__((no_instrument_function)) const struct cpumask *cpu_smt_mask(int cpu)
|
|
{
|
|
return ((*({ do { const void *__vpp_verify = (typeof((&(cpu_sibling_map)) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((typeof(*((&(cpu_sibling_map)))) *)((&(cpu_sibling_map))))); (typeof((typeof(*((&(cpu_sibling_map)))) *)((&(cpu_sibling_map))))) (__ptr + (((__per_cpu_offset[(cpu)])))); }); })));
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) const struct cpumask *cpu_cpu_mask(int cpu)
|
|
{
|
|
return cpumask_of_node(cpu_to_node(cpu));
|
|
}
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/gfp.h" 2
|
|
|
|
struct vm_area_struct;
|
|
# 156 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/gfp.h"
|
|
static 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("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/gfp.h", 158); __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);
|
|
}
|
|
# 251 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/gfp.h"
|
|
static 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 * 2) | (ZONE_DMA << 0x01u * 2) | (ZONE_NORMAL << 0x02u * 2) | (ZONE_DMA32 << 0x04u * 2) | (ZONE_NORMAL << 0x08u * 2) | (ZONE_DMA << (0x08u | 0x01u) * 2) | (ZONE_MOVABLE << (0x08u | 0x02u) * 2) | (ZONE_DMA32 << (0x08u | 0x04u) * 2) ) >> (bit * 2)) &
|
|
((1 << 2) - 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;
|
|
}
|
|
# 269 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/gfp.h"
|
|
static inline __attribute__((no_instrument_function)) int gfp_zonelist(gfp_t flags)
|
|
{
|
|
if ((1 || 0) && __builtin_expect(!!(flags & (( gfp_t)0x40000u)), 0))
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
# 286 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/gfp.h"
|
|
static inline __attribute__((no_instrument_function)) struct zonelist *node_zonelist(int nid, gfp_t flags)
|
|
{
|
|
return (node_data[nid])->node_zonelists + gfp_zonelist(flags);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void arch_free_page(struct page *page, int order) { }
|
|
|
|
|
|
static 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__((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__((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__((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 << 6) || !node_state((nid), N_ONLINE)))));
|
|
|
|
return __alloc_pages(gfp_mask, order, node_zonelist(nid, gfp_mask));
|
|
}
|
|
|
|
|
|
extern struct page *alloc_pages_current(gfp_t gfp_mask, unsigned order);
|
|
|
|
static inline __attribute__((no_instrument_function)) struct page *
|
|
alloc_pages(gfp_t gfp_mask, unsigned int order)
|
|
{
|
|
return alloc_pages_current(gfp_mask, order);
|
|
}
|
|
extern struct page *alloc_pages_vma(gfp_t gfp_mask, int order,
|
|
struct vm_area_struct *vma, unsigned long addr,
|
|
int node);
|
|
# 350 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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(struct zone *zone);
|
|
void drain_local_pages(struct zone *zone);
|
|
# 391 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
|
|
extern bool pm_suspended_storage(void);
|
|
# 411 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/gfp.h"
|
|
extern int alloc_contig_range(unsigned long start, unsigned long end,
|
|
unsigned migratetype);
|
|
extern void free_contig_range(unsigned long pfn, unsigned nr_pages);
|
|
|
|
|
|
extern void init_cma_reserved_pageblock(struct page *page);
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu_counter.h" 2
|
|
|
|
|
|
|
|
struct percpu_counter {
|
|
raw_spinlock_t lock;
|
|
s64 count;
|
|
|
|
struct list_head list;
|
|
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) void percpu_counter_add(struct percpu_counter *fbc, s64 amount)
|
|
{
|
|
__percpu_counter_add(fbc, amount, percpu_counter_batch);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) s64 percpu_counter_sum(struct percpu_counter *fbc)
|
|
{
|
|
return __percpu_counter_sum(fbc);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) s64 percpu_counter_read(struct percpu_counter *fbc)
|
|
{
|
|
return fbc->count;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) int percpu_counter_initialized(struct percpu_counter *fbc)
|
|
{
|
|
return (fbc->counters != ((void *)0));
|
|
}
|
|
# 164 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu_counter.h"
|
|
static inline __attribute__((no_instrument_function)) void percpu_counter_inc(struct percpu_counter *fbc)
|
|
{
|
|
percpu_counter_add(fbc, 1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void percpu_counter_dec(struct percpu_counter *fbc)
|
|
{
|
|
percpu_counter_add(fbc, -1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void percpu_counter_sub(struct percpu_counter *fbc, s64 amount)
|
|
{
|
|
percpu_counter_add(fbc, -amount);
|
|
}
|
|
# 41 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/dqblk_xfs.h" 1
|
|
# 51 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dqblk_v1.h" 1
|
|
# 44 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dqblk_v2.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dqblk_qtree.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dqblk_v2.h" 2
|
|
# 45 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h" 2
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/projid.h" 1
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) projid_t __kprojid_val(kprojid_t projid)
|
|
{
|
|
return projid.val;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool projid_eq(kprojid_t left, kprojid_t right)
|
|
{
|
|
return __kprojid_val(left) == __kprojid_val(right);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool projid_lt(kprojid_t left, kprojid_t right)
|
|
{
|
|
return __kprojid_val(left) < __kprojid_val(right);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) bool kprojid_has_mapping(struct user_namespace *ns, kprojid_t projid)
|
|
{
|
|
return from_kprojid(ns, projid) != (projid_t)-1;
|
|
}
|
|
# 49 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/quota.h" 1
|
|
# 88 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/quota.h"
|
|
struct if_dqinfo {
|
|
__u64 dqi_bgrace;
|
|
__u64 dqi_igrace;
|
|
__u32 dqi_flags;
|
|
__u32 dqi_valid;
|
|
};
|
|
# 151 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 96 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h"
|
|
static 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:
|
|
do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h"), "i" (113), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0);
|
|
}
|
|
return kqid;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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:
|
|
do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h"), "i" (140), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0);
|
|
}
|
|
return kqid;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((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__((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;
|
|
# 194 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
# 234 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h"
|
|
extern void mark_info_dirty(struct super_block *sb, int type);
|
|
static inline __attribute__((no_instrument_function)) int info_dirty(struct mem_dqinfo *info)
|
|
{
|
|
return (__builtin_constant_p((31)) ? constant_test_bit((31), (&info->dqi_flags)) : variable_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__((no_instrument_function)) void dqstats_inc(unsigned int type)
|
|
{
|
|
percpu_counter_inc(&dqstats.counter[type]);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void dqstats_dec(unsigned int type)
|
|
{
|
|
percpu_counter_dec(&dqstats.counter[type]);
|
|
}
|
|
# 282 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
# 368 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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
|
|
};
|
|
# 416 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned int dquot_state_flag(unsigned int flags, int type)
|
|
{
|
|
return flags << _DQUOT_STATE_FLAGS * type;
|
|
}
|
|
|
|
static 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));
|
|
}
|
|
|
|
|
|
extern void quota_send_warning(struct kqid qid, dev_t dev,
|
|
const char warntype);
|
|
# 437 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/quota.h"
|
|
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;
|
|
};
|
|
# 80 "source/include/linux/syscalls.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h" 1
|
|
# 22 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sysctl.h" 1
|
|
# 28 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sysctl.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/sysctl.h" 1
|
|
# 29 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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,
|
|
KERN_PANIC_ON_WARN=77,
|
|
};
|
|
|
|
|
|
|
|
|
|
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,
|
|
};
|
|
|
|
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sysctl.h"
|
|
struct ctl_table_poll {
|
|
atomic_t event;
|
|
wait_queue_head_t wait;
|
|
};
|
|
|
|
static inline __attribute__((no_instrument_function)) void *proc_sys_poll_event(struct ctl_table_poll *poll)
|
|
{
|
|
return (void *)(unsigned long)atomic_read(&poll->event);
|
|
}
|
|
# 105 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
extern struct ctl_table sysctl_mount_point[];
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/assoc_array.h" 1
|
|
# 26 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/assoc_array.h"
|
|
struct assoc_array {
|
|
struct assoc_array_ptr *root;
|
|
unsigned long nr_leaves_on_tree;
|
|
};
|
|
|
|
|
|
|
|
|
|
struct assoc_array_ops {
|
|
|
|
unsigned long (*get_key_chunk)(const void *index_key, int level);
|
|
|
|
|
|
unsigned long (*get_object_key_chunk)(const void *object, int level);
|
|
|
|
|
|
bool (*compare_object)(const void *object, const void *index_key);
|
|
|
|
|
|
|
|
|
|
int (*diff_objects)(const void *object, const void *index_key);
|
|
|
|
|
|
void (*free_object)(void *object);
|
|
};
|
|
|
|
|
|
|
|
|
|
struct assoc_array_edit;
|
|
|
|
static inline __attribute__((no_instrument_function)) void assoc_array_init(struct assoc_array *array)
|
|
{
|
|
array->root = ((void *)0);
|
|
array->nr_leaves_on_tree = 0;
|
|
}
|
|
|
|
extern int assoc_array_iterate(const struct assoc_array *array,
|
|
int (*iterator)(const void *object,
|
|
void *iterator_data),
|
|
void *iterator_data);
|
|
extern void *assoc_array_find(const struct assoc_array *array,
|
|
const struct assoc_array_ops *ops,
|
|
const void *index_key);
|
|
extern void assoc_array_destroy(struct assoc_array *array,
|
|
const struct assoc_array_ops *ops);
|
|
extern struct assoc_array_edit *assoc_array_insert(struct assoc_array *array,
|
|
const struct assoc_array_ops *ops,
|
|
const void *index_key,
|
|
void *object);
|
|
extern void assoc_array_insert_set_object(struct assoc_array_edit *edit,
|
|
void *object);
|
|
extern struct assoc_array_edit *assoc_array_delete(struct assoc_array *array,
|
|
const struct assoc_array_ops *ops,
|
|
const void *index_key);
|
|
extern struct assoc_array_edit *assoc_array_clear(struct assoc_array *array,
|
|
const struct assoc_array_ops *ops);
|
|
extern void assoc_array_apply_edit(struct assoc_array_edit *edit);
|
|
extern void assoc_array_cancel_edit(struct assoc_array_edit *edit);
|
|
extern int assoc_array_gc(struct assoc_array *array,
|
|
const struct assoc_array_ops *ops,
|
|
bool (*iterator)(void *object, void *iterator_data),
|
|
void *iterator_data);
|
|
# 26 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
typedef int32_t key_serial_t;
|
|
|
|
|
|
typedef uint32_t key_perm_t;
|
|
|
|
struct key;
|
|
# 76 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h"
|
|
struct seq_file;
|
|
struct user_struct;
|
|
struct signal_struct;
|
|
struct cred;
|
|
|
|
struct key_type;
|
|
struct key_owner;
|
|
struct keyring_list;
|
|
struct keyring_name;
|
|
|
|
struct keyring_index_key {
|
|
struct key_type *type;
|
|
const char *description;
|
|
size_t desc_len;
|
|
};
|
|
# 106 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h"
|
|
typedef struct __key_reference_with_attributes *key_ref_t;
|
|
|
|
static inline __attribute__((no_instrument_function)) key_ref_t make_key_ref(const struct key *key,
|
|
bool possession)
|
|
{
|
|
return (key_ref_t) ((unsigned long) key | possession);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct key *key_ref_to_ptr(const key_ref_t key_ref)
|
|
{
|
|
return (struct key *) ((unsigned long) key_ref & ~1UL);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool is_key_possessed(const key_ref_t key_ref)
|
|
{
|
|
return (unsigned long) key_ref & 1UL;
|
|
}
|
|
# 132 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h"
|
|
struct key {
|
|
atomic_t usage;
|
|
key_serial_t serial;
|
|
union {
|
|
struct list_head graveyard_link;
|
|
struct rb_node serial_node;
|
|
};
|
|
struct rw_semaphore sem;
|
|
struct key_user *user;
|
|
void *security;
|
|
union {
|
|
time_t expiry;
|
|
time_t revoked_at;
|
|
};
|
|
time_t last_used_at;
|
|
kuid_t uid;
|
|
kgid_t gid;
|
|
key_perm_t perm;
|
|
unsigned short quotalen;
|
|
unsigned short datalen;
|
|
# 162 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h"
|
|
unsigned long flags;
|
|
# 181 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h"
|
|
union {
|
|
struct keyring_index_key index_key;
|
|
struct {
|
|
struct key_type *type;
|
|
char *description;
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
union {
|
|
struct list_head link;
|
|
unsigned long x[2];
|
|
void *p[2];
|
|
int reject_error;
|
|
} type_data;
|
|
|
|
|
|
|
|
|
|
|
|
union {
|
|
union {
|
|
unsigned long value;
|
|
void *rcudata;
|
|
void *data;
|
|
void *data2[2];
|
|
} payload;
|
|
struct assoc_array keys;
|
|
};
|
|
};
|
|
|
|
extern struct key *key_alloc(struct key_type *type,
|
|
const char *desc,
|
|
kuid_t uid, kgid_t gid,
|
|
const struct cred *cred,
|
|
key_perm_t perm,
|
|
unsigned long flags);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern void key_revoke(struct key *key);
|
|
extern void key_invalidate(struct key *key);
|
|
extern void key_put(struct key *key);
|
|
|
|
static inline __attribute__((no_instrument_function)) struct key *__key_get(struct key *key)
|
|
{
|
|
atomic_inc(&key->usage);
|
|
return key;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct key *key_get(struct key *key)
|
|
{
|
|
return key ? __key_get(key) : key;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void key_ref_put(key_ref_t key_ref)
|
|
{
|
|
key_put(key_ref_to_ptr(key_ref));
|
|
}
|
|
|
|
extern struct key *request_key(struct key_type *type,
|
|
const char *description,
|
|
const char *callout_info);
|
|
|
|
extern struct key *request_key_with_auxdata(struct key_type *type,
|
|
const char *description,
|
|
const void *callout_info,
|
|
size_t callout_len,
|
|
void *aux);
|
|
|
|
extern struct key *request_key_async(struct key_type *type,
|
|
const char *description,
|
|
const void *callout_info,
|
|
size_t callout_len);
|
|
|
|
extern struct key *request_key_async_with_auxdata(struct key_type *type,
|
|
const char *description,
|
|
const void *callout_info,
|
|
size_t callout_len,
|
|
void *aux);
|
|
|
|
extern int wait_for_key_construction(struct key *key, bool intr);
|
|
|
|
extern int key_validate(const struct key *key);
|
|
|
|
extern key_ref_t key_create_or_update(key_ref_t keyring,
|
|
const char *type,
|
|
const char *description,
|
|
const void *payload,
|
|
size_t plen,
|
|
key_perm_t perm,
|
|
unsigned long flags);
|
|
|
|
extern int key_update(key_ref_t key,
|
|
const void *payload,
|
|
size_t plen);
|
|
|
|
extern int key_link(struct key *keyring,
|
|
struct key *key);
|
|
|
|
extern int key_unlink(struct key *keyring,
|
|
struct key *key);
|
|
|
|
extern struct key *keyring_alloc(const char *description, kuid_t uid, kgid_t gid,
|
|
const struct cred *cred,
|
|
key_perm_t perm,
|
|
unsigned long flags,
|
|
struct key *dest);
|
|
|
|
extern int keyring_clear(struct key *keyring);
|
|
|
|
extern key_ref_t keyring_search(key_ref_t keyring,
|
|
struct key_type *type,
|
|
const char *description);
|
|
|
|
extern int keyring_add_key(struct key *keyring,
|
|
struct key *key);
|
|
|
|
extern struct key *key_lookup(key_serial_t id);
|
|
|
|
static inline __attribute__((no_instrument_function)) key_serial_t key_serial(const struct key *key)
|
|
{
|
|
return key ? key->serial : 0;
|
|
}
|
|
|
|
extern void key_set_timeout(struct key *, unsigned);
|
|
# 332 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h"
|
|
static inline __attribute__((no_instrument_function)) bool key_is_instantiated(const struct key *key)
|
|
{
|
|
return (__builtin_constant_p((0)) ? constant_test_bit((0), (&key->flags)) : variable_test_bit((0), (&key->flags))) &&
|
|
!(__builtin_constant_p((5)) ? constant_test_bit((5), (&key->flags)) : variable_test_bit((5), (&key->flags)));
|
|
}
|
|
# 348 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/key.h"
|
|
extern struct ctl_table key_sysctls[];
|
|
|
|
|
|
|
|
|
|
extern int install_thread_keyring_to_cred(struct cred *cred);
|
|
extern void key_fsuid_changed(struct task_struct *tsk);
|
|
extern void key_fsgid_changed(struct task_struct *tsk);
|
|
extern void key_init(void);
|
|
# 81 "source/include/linux/syscalls.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/trace/syscall.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/tracepoint.h" 1
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/tracepoint.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/static_key.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/tracepoint.h" 2
|
|
|
|
struct module;
|
|
struct tracepoint;
|
|
struct notifier_block;
|
|
|
|
struct tracepoint_func {
|
|
void *func;
|
|
void *data;
|
|
};
|
|
|
|
struct tracepoint {
|
|
const char *name;
|
|
struct static_key key;
|
|
void (*regfunc)(void);
|
|
void (*unregfunc)(void);
|
|
struct tracepoint_func *funcs;
|
|
};
|
|
|
|
extern int
|
|
tracepoint_probe_register(struct tracepoint *tp, void *probe, void *data);
|
|
extern int
|
|
tracepoint_probe_unregister(struct tracepoint *tp, void *probe, void *data);
|
|
extern void
|
|
for_each_kernel_tracepoint(void (*fct)(struct tracepoint *tp, void *priv),
|
|
void *priv);
|
|
|
|
|
|
struct tp_module {
|
|
struct list_head list;
|
|
struct module *mod;
|
|
};
|
|
|
|
bool trace_module_has_bad_taint(struct module *mod);
|
|
extern int register_tracepoint_module_notifier(struct notifier_block *nb);
|
|
extern int unregister_tracepoint_module_notifier(struct notifier_block *nb);
|
|
# 78 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/tracepoint.h"
|
|
static inline __attribute__((no_instrument_function)) void tracepoint_synchronize_unregister(void)
|
|
{
|
|
synchronize_sched();
|
|
}
|
|
|
|
|
|
extern void syscall_regfunc(void);
|
|
extern void syscall_unregfunc(void);
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/trace/syscall.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ring_buffer.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kmemcheck.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/auxvec.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/auxvec.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/auxvec.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/auxvec.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/auxvec.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h" 2
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/uprobes.h" 1
|
|
# 31 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uprobes.h" 1
|
|
# 28 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uprobes.h"
|
|
typedef u8 uprobe_opcode_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct uprobe_xol_ops;
|
|
|
|
struct arch_uprobe {
|
|
union {
|
|
u8 insn[16];
|
|
u8 ixol[16];
|
|
};
|
|
|
|
const struct uprobe_xol_ops *ops;
|
|
|
|
union {
|
|
struct {
|
|
s32 offs;
|
|
u8 ilen;
|
|
u8 opc1;
|
|
} branch;
|
|
struct {
|
|
u8 fixups;
|
|
u8 ilen;
|
|
} defparam;
|
|
};
|
|
};
|
|
|
|
struct arch_uprobe_task {
|
|
|
|
unsigned long saved_scratch_register;
|
|
|
|
unsigned int saved_trap_nr;
|
|
unsigned int saved_tf;
|
|
};
|
|
# 62 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/uprobes.h" 2
|
|
|
|
enum uprobe_task_state {
|
|
UTASK_RUNNING,
|
|
UTASK_SSTEP,
|
|
UTASK_SSTEP_ACK,
|
|
UTASK_SSTEP_TRAPPED,
|
|
};
|
|
|
|
|
|
|
|
|
|
struct uprobe_task {
|
|
enum uprobe_task_state state;
|
|
|
|
union {
|
|
struct {
|
|
struct arch_uprobe_task autask;
|
|
unsigned long vaddr;
|
|
};
|
|
|
|
struct {
|
|
struct callback_head dup_xol_work;
|
|
unsigned long dup_xol_addr;
|
|
};
|
|
};
|
|
|
|
struct uprobe *active_uprobe;
|
|
unsigned long xol_vaddr;
|
|
|
|
struct return_instance *return_instances;
|
|
unsigned int depth;
|
|
};
|
|
|
|
struct xol_area;
|
|
|
|
struct uprobes_state {
|
|
struct xol_area *xol_area;
|
|
};
|
|
|
|
extern int set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);
|
|
extern int set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);
|
|
extern bool is_swbp_insn(uprobe_opcode_t *insn);
|
|
extern bool is_trap_insn(uprobe_opcode_t *insn);
|
|
extern unsigned long uprobe_get_swbp_addr(struct pt_regs *regs);
|
|
extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs);
|
|
extern int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t);
|
|
extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc);
|
|
extern int uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool);
|
|
extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc);
|
|
extern int uprobe_mmap(struct vm_area_struct *vma);
|
|
extern void uprobe_munmap(struct vm_area_struct *vma, unsigned long start, unsigned long end);
|
|
extern void uprobe_start_dup_mmap(void);
|
|
extern void uprobe_end_dup_mmap(void);
|
|
extern void uprobe_dup_mmap(struct mm_struct *oldmm, struct mm_struct *newmm);
|
|
extern void uprobe_free_utask(struct task_struct *t);
|
|
extern void uprobe_copy_process(struct task_struct *t, unsigned long flags);
|
|
extern int uprobe_post_sstep_notifier(struct pt_regs *regs);
|
|
extern int uprobe_pre_sstep_notifier(struct pt_regs *regs);
|
|
extern void uprobe_notify_resume(struct pt_regs *regs);
|
|
extern bool uprobe_deny_signal(void);
|
|
extern bool arch_uprobe_skip_sstep(struct arch_uprobe *aup, struct pt_regs *regs);
|
|
extern void uprobe_clear_state(struct mm_struct *mm);
|
|
extern int arch_uprobe_analyze_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long addr);
|
|
extern int arch_uprobe_pre_xol(struct arch_uprobe *aup, struct pt_regs *regs);
|
|
extern int arch_uprobe_post_xol(struct arch_uprobe *aup, struct pt_regs *regs);
|
|
extern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk);
|
|
extern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data);
|
|
extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs);
|
|
extern unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs);
|
|
extern bool arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs);
|
|
extern void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr,
|
|
void *src, unsigned long len);
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h" 2
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h"
|
|
struct address_space;
|
|
struct mem_cgroup;
|
|
# 44 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h"
|
|
};
|
|
|
|
union {
|
|
|
|
|
|
|
|
unsigned long counters;
|
|
# 89 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h"
|
|
struct {
|
|
|
|
union {
|
|
# 108 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
int pages;
|
|
int pobjects;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
struct slab *slab_page;
|
|
struct callback_head callback_head;
|
|
|
|
|
|
|
|
pgtable_t pmd_huge_pte;
|
|
|
|
};
|
|
|
|
|
|
union {
|
|
unsigned long private;
|
|
# 163 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h"
|
|
spinlock_t ptl;
|
|
|
|
|
|
struct kmem_cache *slab_cache;
|
|
struct page *first_page;
|
|
};
|
|
|
|
|
|
struct mem_cgroup *mem_cgroup;
|
|
# 200 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h"
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
__attribute__((aligned(2 * sizeof(unsigned long))))
|
|
|
|
;
|
|
|
|
struct page_frag {
|
|
struct page *page;
|
|
|
|
__u32 offset;
|
|
__u32 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;
|
|
struct file *vm_prfile;
|
|
|
|
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;
|
|
struct file *vm_prfile;
|
|
void * vm_private_data;
|
|
|
|
|
|
|
|
|
|
|
|
struct mempolicy *vm_policy;
|
|
|
|
};
|
|
|
|
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
|
|
};
|
|
|
|
|
|
|
|
|
|
struct task_rss_stat {
|
|
int events;
|
|
int count[NR_MM_COUNTERS];
|
|
};
|
|
|
|
|
|
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*(2 + 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;
|
|
# 423 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h"
|
|
struct task_struct *owner;
|
|
|
|
|
|
|
|
struct file *exe_file;
|
|
|
|
struct mmu_notifier_mm *mmu_notifier_mm;
|
|
# 443 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h"
|
|
unsigned long numa_next_scan;
|
|
|
|
|
|
unsigned long numa_scan_offset;
|
|
|
|
|
|
int numa_scan_seq;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool tlb_flush_pending;
|
|
|
|
struct uprobes_state uprobes_state;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
static inline __attribute__((no_instrument_function)) void mm_init_cpumask(struct mm_struct *mm)
|
|
{
|
|
|
|
|
|
|
|
cpumask_clear(mm->cpu_vm_mask_var);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) cpumask_t *mm_cpumask(struct mm_struct *mm)
|
|
{
|
|
return mm->cpu_vm_mask_var;
|
|
}
|
|
# 487 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm_types.h"
|
|
static 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__((no_instrument_function)) void set_tlb_flush_pending(struct mm_struct *mm)
|
|
{
|
|
mm->tlb_flush_pending = true;
|
|
|
|
|
|
|
|
|
|
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void clear_tlb_flush_pending(struct mm_struct *mm)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
mm->tlb_flush_pending = false;
|
|
}
|
|
# 521 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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,
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
unsigned long val;
|
|
} swp_entry_t;
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kmemcheck.h" 2
|
|
# 92 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kmemcheck.h"
|
|
static inline __attribute__((no_instrument_function)) void
|
|
kmemcheck_alloc_shadow(struct page *page, int order, gfp_t flags, int node)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
kmemcheck_free_shadow(struct page *page, int order)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
kmemcheck_slab_alloc(struct kmem_cache *s, gfp_t gfpflags, void *object,
|
|
size_t size)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void kmemcheck_slab_free(struct kmem_cache *s, void *object,
|
|
size_t size)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void kmemcheck_pagealloc_alloc(struct page *p,
|
|
unsigned int order, gfp_t gfpflags)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool kmemcheck_page_is_tracked(struct page *p)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void kmemcheck_mark_unallocated(void *address, unsigned int n)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void kmemcheck_mark_uninitialized(void *address, unsigned int n)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void kmemcheck_mark_initialized(void *address, unsigned int n)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void kmemcheck_mark_freed(void *address, unsigned int n)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void kmemcheck_mark_unallocated_pages(struct page *p,
|
|
unsigned int n)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void kmemcheck_mark_uninitialized_pages(struct page *p,
|
|
unsigned int n)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void kmemcheck_mark_initialized_pages(struct page *p,
|
|
unsigned int n)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size)
|
|
{
|
|
return true;
|
|
}
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ring_buffer.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 1
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/debug_locks.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct task_struct;
|
|
|
|
extern int debug_locks;
|
|
extern int debug_locks_silent;
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int __debug_locks_off(void)
|
|
{
|
|
return ({ __typeof__ (*((&debug_locks))) __ret = ((0)); switch (sizeof(*((&debug_locks)))) { case 1: asm volatile ("" "xchg" "b %b0, %1\n" : "+q" (__ret), "+m" (*((&debug_locks))) : : "memory", "cc"); break; case 2: asm volatile ("" "xchg" "w %w0, %1\n" : "+r" (__ret), "+m" (*((&debug_locks))) : : "memory", "cc"); break; case 4: asm volatile ("" "xchg" "l %0, %1\n" : "+r" (__ret), "+m" (*((&debug_locks))) : : "memory", "cc"); break; case 8: asm volatile ("" "xchg" "q %q0, %1\n" : "+r" (__ret), "+m" (*((&debug_locks))) : : "memory", "cc"); break; default: __xchg_wrong_size(); } __ret; });
|
|
}
|
|
|
|
|
|
|
|
|
|
extern int debug_locks_off(void);
|
|
# 48 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/debug_locks.h"
|
|
struct task_struct;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void debug_show_all_locks(void)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void debug_show_held_locks(struct task_struct *task)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
debug_check_no_locks_freed(const void *from, unsigned long len)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
debug_check_no_locks_held(void)
|
|
{
|
|
}
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 2
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bit_spinlock.h" 1
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/bit_spinlock.h"
|
|
static 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 {
|
|
cpu_relax();
|
|
} while ((__builtin_constant_p((bitnum)) ? constant_test_bit((bitnum), (addr)) : variable_test_bit((bitnum), (addr))));
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
|
|
(void)0;
|
|
}
|
|
|
|
|
|
|
|
|
|
static 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__((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__((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__((no_instrument_function)) int bit_spin_is_locked(int bitnum, unsigned long *addr)
|
|
{
|
|
|
|
return (__builtin_constant_p((bitnum)) ? constant_test_bit((bitnum), (addr)) : variable_test_bit((bitnum), (addr)));
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/shrinker.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/shrinker.h"
|
|
struct shrink_control {
|
|
gfp_t gfp_mask;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long nr_to_scan;
|
|
|
|
|
|
int nid;
|
|
};
|
|
# 46 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 *);
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/resource.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/resource.h" 1
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/resource.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/resource.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/resource.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/resource.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/resource.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/resource.h" 2
|
|
# 78 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/resource.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page_ext.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/stacktrace.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
struct task_struct;
|
|
struct pt_regs;
|
|
|
|
|
|
struct task_struct;
|
|
|
|
struct stack_trace {
|
|
unsigned int nr_entries, max_entries;
|
|
unsigned long *entries;
|
|
int skip;
|
|
};
|
|
|
|
extern void save_stack_trace(struct stack_trace *trace);
|
|
extern void save_stack_trace_regs(struct pt_regs *regs,
|
|
struct stack_trace *trace);
|
|
extern void save_stack_trace_tsk(struct task_struct *tsk,
|
|
struct stack_trace *trace);
|
|
|
|
extern void print_stack_trace(struct stack_trace *trace, int spaces);
|
|
extern int snprint_stack_trace(char *buf, size_t size,
|
|
struct stack_trace *trace, int spaces);
|
|
|
|
|
|
extern void save_stack_trace_user(struct stack_trace *trace);
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page_ext.h" 2
|
|
|
|
struct pglist_data;
|
|
struct page_ext_operations {
|
|
bool (*need)(void);
|
|
void (*init)(void);
|
|
};
|
|
# 65 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page_ext.h"
|
|
struct page_ext;
|
|
|
|
static inline __attribute__((no_instrument_function)) void pgdat_page_ext_init(struct pglist_data *pgdat)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct page_ext *lookup_page_ext(struct page *page)
|
|
{
|
|
return ((void *)0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void page_ext_init(void)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void page_ext_init_flatmem(void)
|
|
{
|
|
}
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 2
|
|
|
|
struct mempolicy;
|
|
struct anon_vma;
|
|
struct anon_vma_chain;
|
|
struct file_ra_state;
|
|
struct user_struct;
|
|
struct writeback_control;
|
|
# 39 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) void set_max_mapnr(unsigned long limit) { }
|
|
|
|
|
|
extern unsigned long totalram_pages;
|
|
extern void * high_memory;
|
|
extern int page_cluster;
|
|
|
|
|
|
extern int sysctl_legacy_va_layout;
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h"
|
|
void ptdump_walk_pgd_level(struct seq_file *m, pgd_t *pgd);
|
|
|
|
|
|
|
|
|
|
|
|
extern unsigned long empty_zero_page[((1UL) << 12) / sizeof(unsigned long)]
|
|
__attribute__((externally_visible));
|
|
|
|
|
|
extern spinlock_t pgd_lock;
|
|
extern struct list_head pgd_list;
|
|
|
|
extern struct mm_struct *pgd_page_get_mm(struct page *page);
|
|
# 93 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) int pte_dirty(pte_t pte)
|
|
{
|
|
return pte_flags(pte) & (((pteval_t)(1)) << 6);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_young(pte_t pte)
|
|
{
|
|
return pte_flags(pte) & (((pteval_t)(1)) << 5);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_dirty(pmd_t pmd)
|
|
{
|
|
return pmd_flags(pmd) & (((pteval_t)(1)) << 6);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_young(pmd_t pmd)
|
|
{
|
|
return pmd_flags(pmd) & (((pteval_t)(1)) << 5);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_write(pte_t pte)
|
|
{
|
|
return pte_flags(pte) & (((pteval_t)(1)) << 1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_file(pte_t pte)
|
|
{
|
|
return pte_flags(pte) & (((pteval_t)(1)) << 6);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_huge(pte_t pte)
|
|
{
|
|
return pte_flags(pte) & (((pteval_t)(1)) << 7);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_global(pte_t pte)
|
|
{
|
|
return pte_flags(pte) & (((pteval_t)(1)) << 8);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_exec(pte_t pte)
|
|
{
|
|
return !(pte_flags(pte) & (((pteval_t)(1)) << 63));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_special(pte_t pte)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
return (pte_flags(pte) & (((pteval_t)(1)) << 9)) &&
|
|
(pte_flags(pte) & ((((pteval_t)(1)) << 0)|(((pteval_t)(1)) << 8)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long pte_pfn(pte_t pte)
|
|
{
|
|
return (pte_val(pte) & ((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1))))) >> 12;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long pmd_pfn(pmd_t pmd)
|
|
{
|
|
return (pmd_val(pmd) & ((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1))))) >> 12;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long pud_pfn(pud_t pud)
|
|
{
|
|
return (pud_val(pud) & ((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1))))) >> 12;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_large(pmd_t pte)
|
|
{
|
|
return pmd_flags(pte) & (((pteval_t)(1)) << 7);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_trans_splitting(pmd_t pmd)
|
|
{
|
|
return pmd_val(pmd) & (((pteval_t)(1)) << 10);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_trans_huge(pmd_t pmd)
|
|
{
|
|
return pmd_val(pmd) & (((pteval_t)(1)) << 7);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int has_transparent_hugepage(void)
|
|
{
|
|
return (__builtin_constant_p(( 0*32+ 3)) && ( (((( 0*32+ 3))>>5)==0 && (1UL<<((( 0*32+ 3))&31) & ((1<<(( 0*32+ 0) & 31))|0|(1<<(( 0*32+ 5) & 31))|(1<<(( 0*32+ 6) & 31))| (1<<(( 0*32+ 8) & 31))|0|(1<<(( 0*32+24) & 31))|(1<<(( 0*32+15) & 31))| (1<<(( 0*32+25) & 31))|(1<<(( 0*32+26) & 31))))) || (((( 0*32+ 3))>>5)==1 && (1UL<<((( 0*32+ 3))&31) & ((1<<(( 1*32+29) & 31))|0))) || (((( 0*32+ 3))>>5)==2 && (1UL<<((( 0*32+ 3))&31) & 0)) || (((( 0*32+ 3))>>5)==3 && (1UL<<((( 0*32+ 3))&31) & ((1<<(( 3*32+20) & 31))))) || (((( 0*32+ 3))>>5)==4 && (1UL<<((( 0*32+ 3))&31) & (0))) || (((( 0*32+ 3))>>5)==5 && (1UL<<((( 0*32+ 3))&31) & 0)) || (((( 0*32+ 3))>>5)==6 && (1UL<<((( 0*32+ 3))&31) & 0)) || (((( 0*32+ 3))>>5)==7 && (1UL<<((( 0*32+ 3))&31) & 0)) || (((( 0*32+ 3))>>5)==8 && (1UL<<((( 0*32+ 3))&31) & 0)) || (((( 0*32+ 3))>>5)==9 && (1UL<<((( 0*32+ 3))&31) & 0)) ) ? 1 : (__builtin_constant_p((( 0*32+ 3))) ? constant_test_bit((( 0*32+ 3)), ((unsigned long *)((&boot_cpu_data)->x86_capability))) : variable_test_bit((( 0*32+ 3)), ((unsigned long *)((&boot_cpu_data)->x86_capability)))));
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_set_flags(pte_t pte, pteval_t set)
|
|
{
|
|
pteval_t v = native_pte_val(pte);
|
|
|
|
return native_make_pte(v | set);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_clear_flags(pte_t pte, pteval_t clear)
|
|
{
|
|
pteval_t v = native_pte_val(pte);
|
|
|
|
return native_make_pte(v & ~clear);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mkclean(pte_t pte)
|
|
{
|
|
return pte_clear_flags(pte, (((pteval_t)(1)) << 6));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mkold(pte_t pte)
|
|
{
|
|
return pte_clear_flags(pte, (((pteval_t)(1)) << 5));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_wrprotect(pte_t pte)
|
|
{
|
|
return pte_clear_flags(pte, (((pteval_t)(1)) << 1));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mkexec(pte_t pte)
|
|
{
|
|
return pte_clear_flags(pte, (((pteval_t)(1)) << 63));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mkdirty(pte_t pte)
|
|
{
|
|
return pte_set_flags(pte, (((pteval_t)(1)) << 6) | (((pteval_t)(1)) << 11));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mkyoung(pte_t pte)
|
|
{
|
|
return pte_set_flags(pte, (((pteval_t)(1)) << 5));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mkwrite(pte_t pte)
|
|
{
|
|
return pte_set_flags(pte, (((pteval_t)(1)) << 1));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mkhuge(pte_t pte)
|
|
{
|
|
return pte_set_flags(pte, (((pteval_t)(1)) << 7));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_clrhuge(pte_t pte)
|
|
{
|
|
return pte_clear_flags(pte, (((pteval_t)(1)) << 7));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mkglobal(pte_t pte)
|
|
{
|
|
return pte_set_flags(pte, (((pteval_t)(1)) << 8));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_clrglobal(pte_t pte)
|
|
{
|
|
return pte_clear_flags(pte, (((pteval_t)(1)) << 8));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mkspecial(pte_t pte)
|
|
{
|
|
return pte_set_flags(pte, (((pteval_t)(1)) << 9));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_set_flags(pmd_t pmd, pmdval_t set)
|
|
{
|
|
pmdval_t v = native_pmd_val(pmd);
|
|
|
|
return __pmd(v | set);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_clear_flags(pmd_t pmd, pmdval_t clear)
|
|
{
|
|
pmdval_t v = native_pmd_val(pmd);
|
|
|
|
return __pmd(v & ~clear);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_mkold(pmd_t pmd)
|
|
{
|
|
return pmd_clear_flags(pmd, (((pteval_t)(1)) << 5));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_wrprotect(pmd_t pmd)
|
|
{
|
|
return pmd_clear_flags(pmd, (((pteval_t)(1)) << 1));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_mkdirty(pmd_t pmd)
|
|
{
|
|
return pmd_set_flags(pmd, (((pteval_t)(1)) << 6) | (((pteval_t)(1)) << 11));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_mkhuge(pmd_t pmd)
|
|
{
|
|
return pmd_set_flags(pmd, (((pteval_t)(1)) << 7));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_mkyoung(pmd_t pmd)
|
|
{
|
|
return pmd_set_flags(pmd, (((pteval_t)(1)) << 5));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_mkwrite(pmd_t pmd)
|
|
{
|
|
return pmd_set_flags(pmd, (((pteval_t)(1)) << 1));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_mknotpresent(pmd_t pmd)
|
|
{
|
|
return pmd_clear_flags(pmd, (((pteval_t)(1)) << 0));
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_soft_dirty(pte_t pte)
|
|
{
|
|
return pte_flags(pte) & (((pteval_t)(1)) << 11);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_soft_dirty(pmd_t pmd)
|
|
{
|
|
return pmd_flags(pmd) & (((pteval_t)(1)) << 11);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mksoft_dirty(pte_t pte)
|
|
{
|
|
return pte_set_flags(pte, (((pteval_t)(1)) << 11));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_mksoft_dirty(pmd_t pmd)
|
|
{
|
|
return pmd_set_flags(pmd, (((pteval_t)(1)) << 11));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_file_clear_soft_dirty(pte_t pte)
|
|
{
|
|
return pte_clear_flags(pte, (((pteval_t)(1)) << 11));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_file_mksoft_dirty(pte_t pte)
|
|
{
|
|
return pte_set_flags(pte, (((pteval_t)(1)) << 11));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_file_soft_dirty(pte_t pte)
|
|
{
|
|
return pte_flags(pte) & (((pteval_t)(1)) << 11);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pgprotval_t massage_pgprot(pgprot_t pgprot)
|
|
{
|
|
pgprotval_t protval = ((pgprot).pgprot);
|
|
|
|
if (protval & (((pteval_t)(1)) << 0))
|
|
protval &= __supported_pte_mask;
|
|
|
|
return protval;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
|
|
{
|
|
return __pte(((phys_addr_t)page_nr << 12) |
|
|
massage_pgprot(pgprot));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
|
|
{
|
|
return __pmd(((phys_addr_t)page_nr << 12) |
|
|
massage_pgprot(pgprot));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
|
{
|
|
pteval_t val = pte_val(pte);
|
|
|
|
|
|
|
|
|
|
|
|
val &= (((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))) | (((pteval_t)(1)) << 4) | (((pteval_t)(1)) << 3) | (((pteval_t)(1)) << 9) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6) | (((pteval_t)(1)) << 11) | (((pteval_t)(1)) << (8 +1)));
|
|
val |= massage_pgprot(newprot) & ~(((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))) | (((pteval_t)(1)) << 4) | (((pteval_t)(1)) << 3) | (((pteval_t)(1)) << 9) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6) | (((pteval_t)(1)) << 11) | (((pteval_t)(1)) << (8 +1)));
|
|
|
|
return __pte(val);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot)
|
|
{
|
|
pmdval_t val = pmd_val(pmd);
|
|
|
|
val &= ((((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))) | (((pteval_t)(1)) << 4) | (((pteval_t)(1)) << 3) | (((pteval_t)(1)) << 9) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6) | (((pteval_t)(1)) << 11) | (((pteval_t)(1)) << (8 +1))) | (((pteval_t)(1)) << 7) | (((pteval_t)(1)) << (8 +1)));
|
|
val |= massage_pgprot(newprot) & ~((((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))) | (((pteval_t)(1)) << 4) | (((pteval_t)(1)) << 3) | (((pteval_t)(1)) << 9) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6) | (((pteval_t)(1)) << 11) | (((pteval_t)(1)) << (8 +1))) | (((pteval_t)(1)) << 7) | (((pteval_t)(1)) << (8 +1)));
|
|
|
|
return __pmd(val);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
|
{
|
|
pgprotval_t preservebits = ((oldprot).pgprot) & (((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))) | (((pteval_t)(1)) << 4) | (((pteval_t)(1)) << 3) | (((pteval_t)(1)) << 9) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6) | (((pteval_t)(1)) << 11) | (((pteval_t)(1)) << (8 +1)));
|
|
pgprotval_t addbits = ((newprot).pgprot);
|
|
return ((pgprot_t) { (preservebits | addbits) } );
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int is_new_memtype_allowed(u64 paddr, unsigned long size,
|
|
enum page_cache_mode pcm,
|
|
enum page_cache_mode new_pcm)
|
|
{
|
|
|
|
|
|
|
|
if (x86_platform.is_untracked_pat_range(paddr, paddr + size))
|
|
return 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ((pcm == _PAGE_CACHE_MODE_UC_MINUS &&
|
|
new_pcm == _PAGE_CACHE_MODE_WB) ||
|
|
(pcm == _PAGE_CACHE_MODE_WC &&
|
|
new_pcm == _PAGE_CACHE_MODE_WB)) {
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
pmd_t *populate_extra_pmd(unsigned long vaddr);
|
|
pte_t *populate_extra_pte(unsigned long vaddr);
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_64.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_64.h"
|
|
extern pud_t level3_kernel_pgt[512];
|
|
extern pud_t level3_ident_pgt[512];
|
|
extern pmd_t level2_kernel_pgt[512];
|
|
extern pmd_t level2_fixmap_pgt[512];
|
|
extern pmd_t level2_ident_pgt[512];
|
|
extern pte_t level1_fixmap_pgt[512];
|
|
extern pgd_t init_level4_pgt[];
|
|
|
|
|
|
|
|
extern void paging_init(void);
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_64.h"
|
|
struct mm_struct;
|
|
|
|
void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte);
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_pte_clear(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep)
|
|
{
|
|
*ptep = native_make_pte(0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_set_pte(pte_t *ptep, pte_t pte)
|
|
{
|
|
*ptep = pte;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_set_pte_atomic(pte_t *ptep, pte_t pte)
|
|
{
|
|
native_set_pte(ptep, pte);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_set_pmd(pmd_t *pmdp, pmd_t pmd)
|
|
{
|
|
*pmdp = pmd;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_pmd_clear(pmd_t *pmd)
|
|
{
|
|
native_set_pmd(pmd, native_make_pmd(0));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t native_ptep_get_and_clear(pte_t *xp)
|
|
{
|
|
|
|
return native_make_pte(({ __typeof__ (*((&xp->pte))) __ret = ((0)); switch (sizeof(*((&xp->pte)))) { case 1: asm volatile ("" "xchg" "b %b0, %1\n" : "+q" (__ret), "+m" (*((&xp->pte))) : : "memory", "cc"); break; case 2: asm volatile ("" "xchg" "w %w0, %1\n" : "+r" (__ret), "+m" (*((&xp->pte))) : : "memory", "cc"); break; case 4: asm volatile ("" "xchg" "l %0, %1\n" : "+r" (__ret), "+m" (*((&xp->pte))) : : "memory", "cc"); break; case 8: asm volatile ("" "xchg" "q %q0, %1\n" : "+r" (__ret), "+m" (*((&xp->pte))) : : "memory", "cc"); break; default: __xchg_wrong_size(); } __ret; }));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t native_pmdp_get_and_clear(pmd_t *xp)
|
|
{
|
|
|
|
return native_make_pmd(({ __typeof__ (*((&xp->pmd))) __ret = ((0)); switch (sizeof(*((&xp->pmd)))) { case 1: asm volatile ("" "xchg" "b %b0, %1\n" : "+q" (__ret), "+m" (*((&xp->pmd))) : : "memory", "cc"); break; case 2: asm volatile ("" "xchg" "w %w0, %1\n" : "+r" (__ret), "+m" (*((&xp->pmd))) : : "memory", "cc"); break; case 4: asm volatile ("" "xchg" "l %0, %1\n" : "+r" (__ret), "+m" (*((&xp->pmd))) : : "memory", "cc"); break; case 8: asm volatile ("" "xchg" "q %q0, %1\n" : "+r" (__ret), "+m" (*((&xp->pmd))) : : "memory", "cc"); break; default: __xchg_wrong_size(); } __ret; }));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_set_pud(pud_t *pudp, pud_t pud)
|
|
{
|
|
*pudp = pud;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_pud_clear(pud_t *pud)
|
|
{
|
|
native_set_pud(pud, native_make_pud(0));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_set_pgd(pgd_t *pgdp, pgd_t pgd)
|
|
{
|
|
*pgdp = pgd;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_pgd_clear(pgd_t *pgd)
|
|
{
|
|
native_set_pgd(pgd, native_make_pgd(0));
|
|
}
|
|
|
|
extern void sync_global_pgds(unsigned long start, unsigned long end,
|
|
int removed);
|
|
# 130 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_64.h"
|
|
static inline __attribute__((no_instrument_function)) int pgd_large(pgd_t pgd) { return 0; }
|
|
# 167 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_64.h"
|
|
extern int kern_addr_valid(unsigned long addr);
|
|
extern void cleanup_highmap(void);
|
|
# 187 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable_64.h"
|
|
extern void init_extra_mapping_uc(unsigned long phys, unsigned long size);
|
|
extern void init_extra_mapping_wb(unsigned long phys, unsigned long size);
|
|
# 446 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_none(pte_t pte)
|
|
{
|
|
return !pte.pte;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_same(pte_t a, pte_t b)
|
|
{
|
|
return a.pte == b.pte;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_present(pte_t a)
|
|
{
|
|
return pte_flags(a) & ((((pteval_t)(1)) << 0) | (((pteval_t)(1)) << 8) |
|
|
(((pteval_t)(1)) << (8 +1)));
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_present_nonuma(pte_t a)
|
|
{
|
|
return pte_flags(a) & ((((pteval_t)(1)) << 0) | (((pteval_t)(1)) << 8));
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool pte_accessible(struct mm_struct *mm, pte_t a)
|
|
{
|
|
if (pte_flags(a) & (((pteval_t)(1)) << 0))
|
|
return true;
|
|
|
|
if ((pte_flags(a) & ((((pteval_t)(1)) << 8) | (((pteval_t)(1)) << (8 +1)))) &&
|
|
mm_tlb_flush_pending(mm))
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_hidden(pte_t pte)
|
|
{
|
|
return pte_flags(pte) & (((pteval_t)(0)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_present(pmd_t pmd)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return pmd_flags(pmd) & ((((pteval_t)(1)) << 0) | (((pteval_t)(1)) << 8) | (((pteval_t)(1)) << 7) |
|
|
(((pteval_t)(1)) << (8 +1)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_none(pmd_t pmd)
|
|
{
|
|
|
|
|
|
return (unsigned long)native_pmd_val(pmd) == 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long pmd_page_vaddr(pmd_t pmd)
|
|
{
|
|
return (unsigned long)((void *)((unsigned long)(pmd_val(pmd) & ((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))))+((unsigned long)(0xffff880000000000UL))));
|
|
}
|
|
# 530 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long pmd_index(unsigned long address)
|
|
{
|
|
return (address >> 21) & (512 - 1);
|
|
}
|
|
# 550 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long pte_index(unsigned long address)
|
|
{
|
|
return (address >> 12) & (512 - 1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long address)
|
|
{
|
|
return (pte_t *)pmd_page_vaddr(*pmd) + pte_index(address);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_bad(pmd_t pmd)
|
|
{
|
|
|
|
|
|
if ((pmd_flags(pmd) & ((((pteval_t)(1)) << (8 +1))|(((pteval_t)(1)) << 0))) == (((pteval_t)(1)) << (8 +1)))
|
|
return 0;
|
|
|
|
return (pmd_flags(pmd) & ~(((pteval_t)(1)) << 2)) != ((((pteval_t)(1)) << 0) | (((pteval_t)(1)) << 1) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long pages_to_mb(unsigned long npg)
|
|
{
|
|
return npg >> (20 - 12);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pud_none(pud_t pud)
|
|
{
|
|
return native_pud_val(pud) == 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pud_present(pud_t pud)
|
|
{
|
|
return pud_flags(pud) & (((pteval_t)(1)) << 0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long pud_page_vaddr(pud_t pud)
|
|
{
|
|
return (unsigned long)((void *)((unsigned long)((unsigned long)pud_val(pud) & ((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))))+((unsigned long)(0xffff880000000000UL))));
|
|
}
|
|
# 598 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) pmd_t *pmd_offset(pud_t *pud, unsigned long address)
|
|
{
|
|
return (pmd_t *)pud_page_vaddr(*pud) + pmd_index(address);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pud_large(pud_t pud)
|
|
{
|
|
return (pud_val(pud) & ((((pteval_t)(1)) << 7) | (((pteval_t)(1)) << 0))) ==
|
|
((((pteval_t)(1)) << 7) | (((pteval_t)(1)) << 0));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pud_bad(pud_t pud)
|
|
{
|
|
return (pud_flags(pud) & ~(((((pteval_t)(1)) << 0) | (((pteval_t)(1)) << 1) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6)) | (((pteval_t)(1)) << 2))) != 0;
|
|
}
|
|
# 621 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) int pgd_present(pgd_t pgd)
|
|
{
|
|
return pgd_flags(pgd) & (((pteval_t)(1)) << 0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long pgd_page_vaddr(pgd_t pgd)
|
|
{
|
|
return (unsigned long)((void *)((unsigned long)((unsigned long)pgd_val(pgd) & ((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1)))))+((unsigned long)(0xffff880000000000UL))));
|
|
}
|
|
# 638 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long pud_index(unsigned long address)
|
|
{
|
|
return (address >> 30) & (512 - 1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pud_t *pud_offset(pgd_t *pgd, unsigned long address)
|
|
{
|
|
return (pud_t *)pgd_page_vaddr(*pgd) + pud_index(address);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pgd_bad(pgd_t pgd)
|
|
{
|
|
return (pgd_flags(pgd) & ~(((pteval_t)(1)) << 2)) != ((((pteval_t)(1)) << 0) | (((pteval_t)(1)) << 1) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pgd_none(pgd_t pgd)
|
|
{
|
|
return !native_pgd_val(pgd);
|
|
}
|
|
# 686 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h"
|
|
extern int direct_gbpages;
|
|
void init_mem_mapping(void);
|
|
void early_alloc_pgt_buf(void);
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t native_local_ptep_get_and_clear(pte_t *ptep)
|
|
{
|
|
pte_t res = *ptep;
|
|
|
|
|
|
native_pte_clear(((void *)0), 0, ptep);
|
|
return res;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t native_local_pmdp_get_and_clear(pmd_t *pmdp)
|
|
{
|
|
pmd_t res = *pmdp;
|
|
|
|
native_pmd_clear(pmdp);
|
|
return res;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_set_pte_at(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep , pte_t pte)
|
|
{
|
|
native_set_pte(ptep, pte);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void native_set_pmd_at(struct mm_struct *mm, unsigned long addr,
|
|
pmd_t *pmdp , pmd_t pmd)
|
|
{
|
|
native_set_pmd(pmdp, pmd);
|
|
}
|
|
# 745 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h"
|
|
struct vm_area_struct;
|
|
|
|
|
|
extern int ptep_set_access_flags(struct vm_area_struct *vma,
|
|
unsigned long address, pte_t *ptep,
|
|
pte_t entry, int dirty);
|
|
|
|
|
|
extern int ptep_test_and_clear_young(struct vm_area_struct *vma,
|
|
unsigned long addr, pte_t *ptep);
|
|
|
|
|
|
extern int ptep_clear_flush_young(struct vm_area_struct *vma,
|
|
unsigned long address, pte_t *ptep);
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep)
|
|
{
|
|
pte_t pte = native_ptep_get_and_clear(ptep);
|
|
pte_update(mm, addr, ptep);
|
|
return pte;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t ptep_get_and_clear_full(struct mm_struct *mm,
|
|
unsigned long addr, pte_t *ptep,
|
|
int full)
|
|
{
|
|
pte_t pte;
|
|
if (full) {
|
|
|
|
|
|
|
|
|
|
pte = native_local_ptep_get_and_clear(ptep);
|
|
} else {
|
|
pte = ptep_get_and_clear(mm, addr, ptep);
|
|
}
|
|
return pte;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void ptep_set_wrprotect(struct mm_struct *mm,
|
|
unsigned long addr, pte_t *ptep)
|
|
{
|
|
clear_bit(1, (unsigned long *)&ptep->pte);
|
|
pte_update(mm, addr, ptep);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern int pmdp_set_access_flags(struct vm_area_struct *vma,
|
|
unsigned long address, pmd_t *pmdp,
|
|
pmd_t entry, int dirty);
|
|
|
|
|
|
extern int pmdp_test_and_clear_young(struct vm_area_struct *vma,
|
|
unsigned long addr, pmd_t *pmdp);
|
|
|
|
|
|
extern int pmdp_clear_flush_young(struct vm_area_struct *vma,
|
|
unsigned long address, pmd_t *pmdp);
|
|
|
|
|
|
|
|
extern void pmdp_splitting_flush(struct vm_area_struct *vma,
|
|
unsigned long addr, pmd_t *pmdp);
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_write(pmd_t pmd)
|
|
{
|
|
return pmd_flags(pmd) & (((pteval_t)(1)) << 1);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmdp_get_and_clear(struct mm_struct *mm, unsigned long addr,
|
|
pmd_t *pmdp)
|
|
{
|
|
pmd_t pmd = native_pmdp_get_and_clear(pmdp);
|
|
pmd_update(mm, addr, pmdp);
|
|
return pmd;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void pmdp_set_wrprotect(struct mm_struct *mm,
|
|
unsigned long addr, pmd_t *pmdp)
|
|
{
|
|
clear_bit(1, (unsigned long *)pmdp);
|
|
pmd_update(mm, addr, pmdp);
|
|
}
|
|
# 850 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) void clone_pgd_range(pgd_t *dst, pgd_t *src, int count)
|
|
{
|
|
memcpy(dst, src, count * sizeof(pgd_t));
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int page_level_shift(enum pg_level level)
|
|
{
|
|
return (12 - ( __builtin_constant_p(512) ? ( (512) < 1 ? ____ilog2_NaN() : (512) & (1ULL << 63) ? 63 : (512) & (1ULL << 62) ? 62 : (512) & (1ULL << 61) ? 61 : (512) & (1ULL << 60) ? 60 : (512) & (1ULL << 59) ? 59 : (512) & (1ULL << 58) ? 58 : (512) & (1ULL << 57) ? 57 : (512) & (1ULL << 56) ? 56 : (512) & (1ULL << 55) ? 55 : (512) & (1ULL << 54) ? 54 : (512) & (1ULL << 53) ? 53 : (512) & (1ULL << 52) ? 52 : (512) & (1ULL << 51) ? 51 : (512) & (1ULL << 50) ? 50 : (512) & (1ULL << 49) ? 49 : (512) & (1ULL << 48) ? 48 : (512) & (1ULL << 47) ? 47 : (512) & (1ULL << 46) ? 46 : (512) & (1ULL << 45) ? 45 : (512) & (1ULL << 44) ? 44 : (512) & (1ULL << 43) ? 43 : (512) & (1ULL << 42) ? 42 : (512) & (1ULL << 41) ? 41 : (512) & (1ULL << 40) ? 40 : (512) & (1ULL << 39) ? 39 : (512) & (1ULL << 38) ? 38 : (512) & (1ULL << 37) ? 37 : (512) & (1ULL << 36) ? 36 : (512) & (1ULL << 35) ? 35 : (512) & (1ULL << 34) ? 34 : (512) & (1ULL << 33) ? 33 : (512) & (1ULL << 32) ? 32 : (512) & (1ULL << 31) ? 31 : (512) & (1ULL << 30) ? 30 : (512) & (1ULL << 29) ? 29 : (512) & (1ULL << 28) ? 28 : (512) & (1ULL << 27) ? 27 : (512) & (1ULL << 26) ? 26 : (512) & (1ULL << 25) ? 25 : (512) & (1ULL << 24) ? 24 : (512) & (1ULL << 23) ? 23 : (512) & (1ULL << 22) ? 22 : (512) & (1ULL << 21) ? 21 : (512) & (1ULL << 20) ? 20 : (512) & (1ULL << 19) ? 19 : (512) & (1ULL << 18) ? 18 : (512) & (1ULL << 17) ? 17 : (512) & (1ULL << 16) ? 16 : (512) & (1ULL << 15) ? 15 : (512) & (1ULL << 14) ? 14 : (512) & (1ULL << 13) ? 13 : (512) & (1ULL << 12) ? 12 : (512) & (1ULL << 11) ? 11 : (512) & (1ULL << 10) ? 10 : (512) & (1ULL << 9) ? 9 : (512) & (1ULL << 8) ? 8 : (512) & (1ULL << 7) ? 7 : (512) & (1ULL << 6) ? 6 : (512) & (1ULL << 5) ? 5 : (512) & (1ULL << 4) ? 4 : (512) & (1ULL << 3) ? 3 : (512) & (1ULL << 2) ? 2 : (512) & (1ULL << 1) ? 1 : (512) & (1ULL << 0) ? 0 : ____ilog2_NaN() ) : (sizeof(512) <= 4) ? __ilog2_u32(512) : __ilog2_u64(512) )) + level * ( __builtin_constant_p(512) ? ( (512) < 1 ? ____ilog2_NaN() : (512) & (1ULL << 63) ? 63 : (512) & (1ULL << 62) ? 62 : (512) & (1ULL << 61) ? 61 : (512) & (1ULL << 60) ? 60 : (512) & (1ULL << 59) ? 59 : (512) & (1ULL << 58) ? 58 : (512) & (1ULL << 57) ? 57 : (512) & (1ULL << 56) ? 56 : (512) & (1ULL << 55) ? 55 : (512) & (1ULL << 54) ? 54 : (512) & (1ULL << 53) ? 53 : (512) & (1ULL << 52) ? 52 : (512) & (1ULL << 51) ? 51 : (512) & (1ULL << 50) ? 50 : (512) & (1ULL << 49) ? 49 : (512) & (1ULL << 48) ? 48 : (512) & (1ULL << 47) ? 47 : (512) & (1ULL << 46) ? 46 : (512) & (1ULL << 45) ? 45 : (512) & (1ULL << 44) ? 44 : (512) & (1ULL << 43) ? 43 : (512) & (1ULL << 42) ? 42 : (512) & (1ULL << 41) ? 41 : (512) & (1ULL << 40) ? 40 : (512) & (1ULL << 39) ? 39 : (512) & (1ULL << 38) ? 38 : (512) & (1ULL << 37) ? 37 : (512) & (1ULL << 36) ? 36 : (512) & (1ULL << 35) ? 35 : (512) & (1ULL << 34) ? 34 : (512) & (1ULL << 33) ? 33 : (512) & (1ULL << 32) ? 32 : (512) & (1ULL << 31) ? 31 : (512) & (1ULL << 30) ? 30 : (512) & (1ULL << 29) ? 29 : (512) & (1ULL << 28) ? 28 : (512) & (1ULL << 27) ? 27 : (512) & (1ULL << 26) ? 26 : (512) & (1ULL << 25) ? 25 : (512) & (1ULL << 24) ? 24 : (512) & (1ULL << 23) ? 23 : (512) & (1ULL << 22) ? 22 : (512) & (1ULL << 21) ? 21 : (512) & (1ULL << 20) ? 20 : (512) & (1ULL << 19) ? 19 : (512) & (1ULL << 18) ? 18 : (512) & (1ULL << 17) ? 17 : (512) & (1ULL << 16) ? 16 : (512) & (1ULL << 15) ? 15 : (512) & (1ULL << 14) ? 14 : (512) & (1ULL << 13) ? 13 : (512) & (1ULL << 12) ? 12 : (512) & (1ULL << 11) ? 11 : (512) & (1ULL << 10) ? 10 : (512) & (1ULL << 9) ? 9 : (512) & (1ULL << 8) ? 8 : (512) & (1ULL << 7) ? 7 : (512) & (1ULL << 6) ? 6 : (512) & (1ULL << 5) ? 5 : (512) & (1ULL << 4) ? 4 : (512) & (1ULL << 3) ? 3 : (512) & (1ULL << 2) ? 2 : (512) & (1ULL << 1) ? 1 : (512) & (1ULL << 0) ? 0 : ____ilog2_NaN() ) : (sizeof(512) <= 4) ? __ilog2_u32(512) : __ilog2_u64(512) );
|
|
}
|
|
static inline __attribute__((no_instrument_function)) unsigned long page_level_size(enum pg_level level)
|
|
{
|
|
return 1UL << page_level_shift(level);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) unsigned long page_level_mask(enum pg_level level)
|
|
{
|
|
return ~(page_level_size(level) - 1);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void update_mmu_cache(struct vm_area_struct *vma,
|
|
unsigned long addr, pte_t *ptep)
|
|
{
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void update_mmu_cache_pmd(struct vm_area_struct *vma,
|
|
unsigned long addr, pmd_t *pmd)
|
|
{
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_swp_mksoft_dirty(pte_t pte)
|
|
{
|
|
((void)(sizeof(( long)(pte_present_nonuma(pte)))));
|
|
return pte_set_flags(pte, (((pteval_t)(1)) << 7));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int pte_swp_soft_dirty(pte_t pte)
|
|
{
|
|
((void)(sizeof(( long)(pte_present_nonuma(pte)))));
|
|
return pte_flags(pte) & (((pteval_t)(1)) << 7);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_swp_clear_soft_dirty(pte_t pte)
|
|
{
|
|
((void)(sizeof(( long)(pte_present_nonuma(pte)))));
|
|
return pte_clear_flags(pte, (((pteval_t)(1)) << 7));
|
|
}
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h" 1
|
|
# 108 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmdp_get_and_clear_full(struct mm_struct *mm,
|
|
unsigned long address, pmd_t *pmdp,
|
|
int full)
|
|
{
|
|
return pmdp_get_and_clear(mm, address, pmdp);
|
|
}
|
|
# 134 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
static 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);
|
|
# 187 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
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);
|
|
# 214 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) int pte_unused(pte_t pte)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_same(pmd_t pmd_a, pmd_t pmd_b)
|
|
{
|
|
return pmd_val(pmd_a) == pmd_val(pmd_b);
|
|
}
|
|
# 311 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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__((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__((no_instrument_function)) int pmd_none_or_clear_bad(pmd_t *pmd)
|
|
{
|
|
if (pmd_none(*pmd))
|
|
return 1;
|
|
if (__builtin_expect(!!(pmd_bad(*pmd)), 0)) {
|
|
pmd_clear_bad(pmd);
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static 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__((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);
|
|
}
|
|
# 541 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
extern int track_pfn_remap(struct vm_area_struct *vma, pgprot_t *prot,
|
|
unsigned long pfn, unsigned long addr,
|
|
unsigned long size);
|
|
extern int track_pfn_insert(struct vm_area_struct *vma, pgprot_t *prot,
|
|
unsigned long pfn);
|
|
extern int track_pfn_copy(struct vm_area_struct *vma);
|
|
extern void untrack_pfn(struct vm_area_struct *vma, unsigned long pfn,
|
|
unsigned long size);
|
|
# 562 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) int is_zero_pfn(unsigned long pfn)
|
|
{
|
|
extern unsigned long zero_pfn;
|
|
return pfn == zero_pfn;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long my_zero_pfn(unsigned long addr)
|
|
{
|
|
extern unsigned long zero_pfn;
|
|
return zero_pfn;
|
|
}
|
|
# 596 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_read_atomic(pmd_t *pmdp)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
return *pmdp;
|
|
}
|
|
|
|
|
|
|
|
static 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;
|
|
}
|
|
# 640 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd)
|
|
{
|
|
pmd_t pmdval = pmd_read_atomic(pmd);
|
|
# 658 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
__asm__ __volatile__("": : :"memory");
|
|
|
|
if (pmd_none(pmdval) || pmd_trans_huge(pmdval))
|
|
return 1;
|
|
if (__builtin_expect(!!(pmd_bad(pmdval)), 0)) {
|
|
pmd_clear_bad(pmd);
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
# 682 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) int pmd_trans_unstable(pmd_t *pmd)
|
|
{
|
|
|
|
return pmd_none_or_trans_huge_or_clear_bad(pmd);
|
|
|
|
|
|
|
|
}
|
|
# 704 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) int pte_numa(pte_t pte)
|
|
{
|
|
return ptenuma_flags(pte) == (((pteval_t)(1)) << (8 +1));
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_numa(pmd_t pmd)
|
|
{
|
|
return pmdnuma_flags(pmd) == (((pteval_t)(1)) << (8 +1));
|
|
}
|
|
# 726 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/pgtable.h"
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mknonnuma(pte_t pte)
|
|
{
|
|
pteval_t val = pte_val(pte);
|
|
|
|
val &= ~(((pteval_t)(1)) << (8 +1));
|
|
val |= ((((pteval_t)(1)) << 0)|(((pteval_t)(1)) << 5));
|
|
return __pte(val);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_mknonnuma(pmd_t pmd)
|
|
{
|
|
pmdval_t val = pmd_val(pmd);
|
|
|
|
val &= ~(((pteval_t)(1)) << (8 +1));
|
|
val |= ((((pteval_t)(1)) << 0)|(((pteval_t)(1)) << 5));
|
|
|
|
return __pmd(val);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pte_t pte_mknuma(pte_t pte)
|
|
{
|
|
pteval_t val = pte_val(pte);
|
|
|
|
((void)(sizeof(( long)(!(val & (((pteval_t)(1)) << 0))))));
|
|
|
|
val &= ~(((pteval_t)(1)) << 0);
|
|
val |= (((pteval_t)(1)) << (8 +1));
|
|
|
|
return __pte(val);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void ptep_set_numa(struct mm_struct *mm, unsigned long addr,
|
|
pte_t *ptep)
|
|
{
|
|
pte_t ptent = *ptep;
|
|
|
|
ptent = pte_mknuma(ptent);
|
|
set_pte_at(mm, addr, ptep, ptent);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) pmd_t pmd_mknuma(pmd_t pmd)
|
|
{
|
|
pmdval_t val = pmd_val(pmd);
|
|
|
|
val &= ~(((pteval_t)(1)) << 0);
|
|
val |= (((pteval_t)(1)) << (8 +1));
|
|
|
|
return __pmd(val);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void pmdp_set_numa(struct mm_struct *mm, unsigned long addr,
|
|
pmd_t *pmdp)
|
|
{
|
|
pmd_t pmd = *pmdp;
|
|
|
|
pmd = pmd_mknuma(pmd);
|
|
set_pmd_at(mm, addr, pmdp, pmd);
|
|
return;
|
|
}
|
|
# 903 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/pgtable.h" 2
|
|
# 54 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 2
|
|
# 71 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
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 *);
|
|
# 100 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
extern struct kmem_cache *vm_area_cachep;
|
|
# 206 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
extern pgprot_t protection_map[16];
|
|
# 225 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new);
|
|
# 287 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
struct mempolicy *(*get_policy)(struct vm_area_struct *vma,
|
|
unsigned long addr);
|
|
|
|
|
|
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__((no_instrument_function)) void set_freepage_migratetype(struct page *page, int migratetype)
|
|
{
|
|
page->index = migratetype;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int get_freepage_migratetype(struct page *page)
|
|
{
|
|
return page->index;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags.h" 1
|
|
# 74 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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,
|
|
|
|
|
|
PG_uncached,
|
|
|
|
|
|
PG_hwpoison,
|
|
|
|
|
|
PG_compound_lock,
|
|
|
|
__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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags.h"
|
|
struct page;
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageLocked(const struct page *page) { return (__builtin_constant_p((PG_locked)) ? constant_test_bit((PG_locked), (&page->flags)) : variable_test_bit((PG_locked), (&page->flags))); }
|
|
static inline __attribute__((no_instrument_function)) int PageError(const struct page *page) { return (__builtin_constant_p((PG_error)) ? constant_test_bit((PG_error), (&page->flags)) : variable_test_bit((PG_error), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageError(struct page *page) { set_bit(PG_error, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageError(struct page *page) { clear_bit(PG_error, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPageError(struct page *page) { return test_and_clear_bit(PG_error, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageReferenced(const struct page *page) { return (__builtin_constant_p((PG_referenced)) ? constant_test_bit((PG_referenced), (&page->flags)) : variable_test_bit((PG_referenced), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageReferenced(struct page *page) { set_bit(PG_referenced, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageReferenced(struct page *page) { clear_bit(PG_referenced, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPageReferenced(struct page *page) { return test_and_clear_bit(PG_referenced, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) void __SetPageReferenced(struct page *page) { __set_bit(PG_referenced, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageDirty(const struct page *page) { return (__builtin_constant_p((PG_dirty)) ? constant_test_bit((PG_dirty), (&page->flags)) : variable_test_bit((PG_dirty), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageDirty(struct page *page) { set_bit(PG_dirty, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageDirty(struct page *page) { clear_bit(PG_dirty, &page->flags); } static inline __attribute__((no_instrument_function)) int TestSetPageDirty(struct page *page) { return test_and_set_bit(PG_dirty, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPageDirty(struct page *page) { return test_and_clear_bit(PG_dirty, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageDirty(struct page *page) { __clear_bit(PG_dirty, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageLRU(const struct page *page) { return (__builtin_constant_p((PG_lru)) ? constant_test_bit((PG_lru), (&page->flags)) : variable_test_bit((PG_lru), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageLRU(struct page *page) { set_bit(PG_lru, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageLRU(struct page *page) { clear_bit(PG_lru, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageLRU(struct page *page) { __clear_bit(PG_lru, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageActive(const struct page *page) { return (__builtin_constant_p((PG_active)) ? constant_test_bit((PG_active), (&page->flags)) : variable_test_bit((PG_active), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageActive(struct page *page) { set_bit(PG_active, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageActive(struct page *page) { clear_bit(PG_active, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageActive(struct page *page) { __clear_bit(PG_active, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int TestClearPageActive(struct page *page) { return test_and_clear_bit(PG_active, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageSlab(const struct page *page) { return (__builtin_constant_p((PG_slab)) ? constant_test_bit((PG_slab), (&page->flags)) : variable_test_bit((PG_slab), (&page->flags))); } static inline __attribute__((no_instrument_function)) void __SetPageSlab(struct page *page) { __set_bit(PG_slab, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageSlab(struct page *page) { __clear_bit(PG_slab, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageChecked(const struct page *page) { return (__builtin_constant_p((PG_checked)) ? constant_test_bit((PG_checked), (&page->flags)) : variable_test_bit((PG_checked), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageChecked(struct page *page) { set_bit(PG_checked, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageChecked(struct page *page) { clear_bit(PG_checked, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PagePinned(const struct page *page) { return (__builtin_constant_p((PG_pinned)) ? constant_test_bit((PG_pinned), (&page->flags)) : variable_test_bit((PG_pinned), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPagePinned(struct page *page) { set_bit(PG_pinned, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPagePinned(struct page *page) { clear_bit(PG_pinned, &page->flags); } static inline __attribute__((no_instrument_function)) int TestSetPagePinned(struct page *page) { return test_and_set_bit(PG_pinned, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPagePinned(struct page *page) { return test_and_clear_bit(PG_pinned, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageSavePinned(const struct page *page) { return (__builtin_constant_p((PG_savepinned)) ? constant_test_bit((PG_savepinned), (&page->flags)) : variable_test_bit((PG_savepinned), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageSavePinned(struct page *page) { set_bit(PG_savepinned, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageSavePinned(struct page *page) { clear_bit(PG_savepinned, &page->flags); };
|
|
static inline __attribute__((no_instrument_function)) int PageReserved(const struct page *page) { return (__builtin_constant_p((PG_reserved)) ? constant_test_bit((PG_reserved), (&page->flags)) : variable_test_bit((PG_reserved), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageReserved(struct page *page) { set_bit(PG_reserved, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageReserved(struct page *page) { clear_bit(PG_reserved, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageReserved(struct page *page) { __clear_bit(PG_reserved, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageSwapBacked(const struct page *page) { return (__builtin_constant_p((PG_swapbacked)) ? constant_test_bit((PG_swapbacked), (&page->flags)) : variable_test_bit((PG_swapbacked), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageSwapBacked(struct page *page) { set_bit(PG_swapbacked, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageSwapBacked(struct page *page) { clear_bit(PG_swapbacked, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageSwapBacked(struct page *page) { __clear_bit(PG_swapbacked, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) void __SetPageSwapBacked(struct page *page) { __set_bit(PG_swapbacked, &page->flags); }
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageSlobFree(const struct page *page) { return (__builtin_constant_p((PG_slob_free)) ? constant_test_bit((PG_slob_free), (&page->flags)) : variable_test_bit((PG_slob_free), (&page->flags))); } static inline __attribute__((no_instrument_function)) void __SetPageSlobFree(struct page *page) { __set_bit(PG_slob_free, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageSlobFree(struct page *page) { __clear_bit(PG_slob_free, &page->flags); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PagePrivate(const struct page *page) { return (__builtin_constant_p((PG_private)) ? constant_test_bit((PG_private), (&page->flags)) : variable_test_bit((PG_private), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPagePrivate(struct page *page) { set_bit(PG_private, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPagePrivate(struct page *page) { clear_bit(PG_private, &page->flags); } static inline __attribute__((no_instrument_function)) void __SetPagePrivate(struct page *page) { __set_bit(PG_private, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) void __ClearPagePrivate(struct page *page) { __clear_bit(PG_private, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PagePrivate2(const struct page *page) { return (__builtin_constant_p((PG_private_2)) ? constant_test_bit((PG_private_2), (&page->flags)) : variable_test_bit((PG_private_2), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPagePrivate2(struct page *page) { set_bit(PG_private_2, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPagePrivate2(struct page *page) { clear_bit(PG_private_2, &page->flags); } static inline __attribute__((no_instrument_function)) int TestSetPagePrivate2(struct page *page) { return test_and_set_bit(PG_private_2, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPagePrivate2(struct page *page) { return test_and_clear_bit(PG_private_2, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageOwnerPriv1(const struct page *page) { return (__builtin_constant_p((PG_owner_priv_1)) ? constant_test_bit((PG_owner_priv_1), (&page->flags)) : variable_test_bit((PG_owner_priv_1), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageOwnerPriv1(struct page *page) { set_bit(PG_owner_priv_1, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageOwnerPriv1(struct page *page) { clear_bit(PG_owner_priv_1, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPageOwnerPriv1(struct page *page) { return test_and_clear_bit(PG_owner_priv_1, &page->flags); }
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageWriteback(const struct page *page) { return (__builtin_constant_p((PG_writeback)) ? constant_test_bit((PG_writeback), (&page->flags)) : variable_test_bit((PG_writeback), (&page->flags))); } static inline __attribute__((no_instrument_function)) int TestSetPageWriteback(struct page *page) { return test_and_set_bit(PG_writeback, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPageWriteback(struct page *page) { return test_and_clear_bit(PG_writeback, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageMappedToDisk(const struct page *page) { return (__builtin_constant_p((PG_mappedtodisk)) ? constant_test_bit((PG_mappedtodisk), (&page->flags)) : variable_test_bit((PG_mappedtodisk), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageMappedToDisk(struct page *page) { set_bit(PG_mappedtodisk, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageMappedToDisk(struct page *page) { clear_bit(PG_mappedtodisk, &page->flags); }
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageReclaim(const struct page *page) { return (__builtin_constant_p((PG_reclaim)) ? constant_test_bit((PG_reclaim), (&page->flags)) : variable_test_bit((PG_reclaim), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageReclaim(struct page *page) { set_bit(PG_reclaim, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageReclaim(struct page *page) { clear_bit(PG_reclaim, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPageReclaim(struct page *page) { return test_and_clear_bit(PG_reclaim, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageReadahead(const struct page *page) { return (__builtin_constant_p((PG_reclaim)) ? constant_test_bit((PG_reclaim), (&page->flags)) : variable_test_bit((PG_reclaim), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageReadahead(struct page *page) { set_bit(PG_reclaim, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageReadahead(struct page *page) { clear_bit(PG_reclaim, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPageReadahead(struct page *page) { return test_and_clear_bit(PG_reclaim, &page->flags); }
|
|
# 252 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags.h"
|
|
static inline __attribute__((no_instrument_function)) int PageHighMem(const struct page *page) { return 0; } static inline __attribute__((no_instrument_function)) void SetPageHighMem(struct page *page) { } static inline __attribute__((no_instrument_function)) void ClearPageHighMem(struct page *page) { }
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageSwapCache(const struct page *page) { return (__builtin_constant_p((PG_swapcache)) ? constant_test_bit((PG_swapcache), (&page->flags)) : variable_test_bit((PG_swapcache), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageSwapCache(struct page *page) { set_bit(PG_swapcache, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageSwapCache(struct page *page) { clear_bit(PG_swapcache, &page->flags); }
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageUnevictable(const struct page *page) { return (__builtin_constant_p((PG_unevictable)) ? constant_test_bit((PG_unevictable), (&page->flags)) : variable_test_bit((PG_unevictable), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageUnevictable(struct page *page) { set_bit(PG_unevictable, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageUnevictable(struct page *page) { clear_bit(PG_unevictable, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageUnevictable(struct page *page) { __clear_bit(PG_unevictable, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int TestClearPageUnevictable(struct page *page) { return test_and_clear_bit(PG_unevictable, &page->flags); }
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageMlocked(const struct page *page) { return (__builtin_constant_p((PG_mlocked)) ? constant_test_bit((PG_mlocked), (&page->flags)) : variable_test_bit((PG_mlocked), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageMlocked(struct page *page) { set_bit(PG_mlocked, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageMlocked(struct page *page) { clear_bit(PG_mlocked, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageMlocked(struct page *page) { __clear_bit(PG_mlocked, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int TestSetPageMlocked(struct page *page) { return test_and_set_bit(PG_mlocked, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPageMlocked(struct page *page) { return test_and_clear_bit(PG_mlocked, &page->flags); } static inline __attribute__((no_instrument_function)) int __TestClearPageMlocked(struct page *page) { return __test_and_clear_bit(PG_mlocked, &page->flags); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageUncached(const struct page *page) { return (__builtin_constant_p((PG_uncached)) ? constant_test_bit((PG_uncached), (&page->flags)) : variable_test_bit((PG_uncached), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageUncached(struct page *page) { set_bit(PG_uncached, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageUncached(struct page *page) { clear_bit(PG_uncached, &page->flags); }
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageHWPoison(const struct page *page) { return (__builtin_constant_p((PG_hwpoison)) ? constant_test_bit((PG_hwpoison), (&page->flags)) : variable_test_bit((PG_hwpoison), (&page->flags))); } static inline __attribute__((no_instrument_function)) void SetPageHWPoison(struct page *page) { set_bit(PG_hwpoison, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageHWPoison(struct page *page) { clear_bit(PG_hwpoison, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int TestSetPageHWPoison(struct page *page) { return test_and_set_bit(PG_hwpoison, &page->flags); } static inline __attribute__((no_instrument_function)) int TestClearPageHWPoison(struct page *page) { return test_and_clear_bit(PG_hwpoison, &page->flags); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u64 stable_page_flags(struct page *page);
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageUptodate(struct page *page)
|
|
{
|
|
int ret = (__builtin_constant_p((PG_uptodate)) ? constant_test_bit((PG_uptodate), (&(page)->flags)) : variable_test_bit((PG_uptodate), (&(page)->flags)));
|
|
# 301 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags.h"
|
|
if (ret)
|
|
__asm__ __volatile__("": : :"memory");
|
|
|
|
return ret;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __SetPageUptodate(struct page *page)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
__set_bit(PG_uptodate, &(page)->flags);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void SetPageUptodate(struct page *page)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
__asm__ __volatile__("": : :"memory");
|
|
set_bit(PG_uptodate, &(page)->flags);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void set_page_writeback(struct page *page)
|
|
{
|
|
__test_set_page_writeback(page, false);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_page_writeback_keepwrite(struct page *page)
|
|
{
|
|
__test_set_page_writeback(page, true);
|
|
}
|
|
# 355 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags.h"
|
|
static inline __attribute__((no_instrument_function)) int PageHead(const struct page *page) { return (__builtin_constant_p((PG_head)) ? constant_test_bit((PG_head), (&page->flags)) : variable_test_bit((PG_head), (&page->flags))); } static inline __attribute__((no_instrument_function)) void __SetPageHead(struct page *page) { __set_bit(PG_head, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageHead(struct page *page) { __clear_bit(PG_head, &page->flags); } static inline __attribute__((no_instrument_function)) void ClearPageHead(struct page *page) { clear_bit(PG_head, &page->flags); }
|
|
static inline __attribute__((no_instrument_function)) int PageTail(const struct page *page) { return (__builtin_constant_p((PG_tail)) ? constant_test_bit((PG_tail), (&page->flags)) : variable_test_bit((PG_tail), (&page->flags))); } static inline __attribute__((no_instrument_function)) void __SetPageTail(struct page *page) { __set_bit(PG_tail, &page->flags); } static inline __attribute__((no_instrument_function)) void __ClearPageTail(struct page *page) { __clear_bit(PG_tail, &page->flags); }
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageCompound(struct page *page)
|
|
{
|
|
return page->flags & ((1L << PG_head) | (1L << PG_tail));
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void ClearPageCompound(struct page *page)
|
|
{
|
|
do { if (__builtin_expect(!!(!PageHead(page)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags.h"), "i" (366), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0); } while (0);
|
|
ClearPageHead(page);
|
|
}
|
|
# 435 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags.h"
|
|
static inline __attribute__((no_instrument_function)) int PageTransHuge(struct page *page)
|
|
{
|
|
((void)(sizeof(( long)(PageTail(page)))));
|
|
return PageHead(page);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageTransCompound(struct page *page)
|
|
{
|
|
return PageCompound(page);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageTransTail(struct page *page)
|
|
{
|
|
return PageTail(page);
|
|
}
|
|
# 483 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags.h"
|
|
static inline __attribute__((no_instrument_function)) int PageSlabPfmemalloc(struct page *page)
|
|
{
|
|
((void)(sizeof(( long)(!PageSlab(page)))));
|
|
return PageActive(page);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void SetPageSlabPfmemalloc(struct page *page)
|
|
{
|
|
((void)(sizeof(( long)(!PageSlab(page)))));
|
|
SetPageActive(page);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __ClearPageSlabPfmemalloc(struct page *page)
|
|
{
|
|
((void)(sizeof(( long)(!PageSlab(page)))));
|
|
__ClearPageActive(page);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void ClearPageSlabPfmemalloc(struct page *page)
|
|
{
|
|
((void)(sizeof(( long)(!PageSlab(page)))));
|
|
ClearPageActive(page);
|
|
}
|
|
# 547 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/page-flags.h"
|
|
static inline __attribute__((no_instrument_function)) int page_has_private(struct page *page)
|
|
{
|
|
return !!(page->flags & (1 << PG_private | 1 << PG_private_2));
|
|
}
|
|
# 318 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 68 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/huge_mm.h"
|
|
extern bool is_vma_temporary_stack(struct vm_area_struct *vma);
|
|
# 95 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/huge_mm.h"
|
|
extern unsigned long transparent_hugepage_flags;
|
|
extern int split_huge_page_to_list(struct page *page, struct list_head *list);
|
|
static inline __attribute__((no_instrument_function)) int split_huge_page(struct page *page)
|
|
{
|
|
return split_huge_page_to_list(page, ((void *)0));
|
|
}
|
|
extern void __split_huge_page_pmd(struct vm_area_struct *vma,
|
|
unsigned long address, pmd_t *pmd);
|
|
# 118 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/huge_mm.h"
|
|
extern void split_huge_page_pmd_mm(struct mm_struct *mm, unsigned long address,
|
|
pmd_t *pmd);
|
|
|
|
|
|
|
|
extern int hugepage_madvise(struct vm_area_struct *vma,
|
|
unsigned long *vm_flags, int advice);
|
|
extern void __vma_adjust_trans_huge(struct vm_area_struct *vma,
|
|
unsigned long start,
|
|
unsigned long end,
|
|
long adjust_next);
|
|
extern int __pmd_trans_huge_lock(pmd_t *pmd, struct vm_area_struct *vma,
|
|
spinlock_t **ptl);
|
|
|
|
static inline __attribute__((no_instrument_function)) int pmd_trans_huge_lock(pmd_t *pmd, struct vm_area_struct *vma,
|
|
spinlock_t **ptl)
|
|
{
|
|
((void)(sizeof(( long)(!rwsem_is_locked(&vma->vm_mm->mmap_sem)))));
|
|
if (pmd_trans_huge(*pmd))
|
|
return __pmd_trans_huge_lock(pmd, vma, ptl);
|
|
else
|
|
return 0;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void vma_adjust_trans_huge(struct vm_area_struct *vma,
|
|
unsigned long start,
|
|
unsigned long end,
|
|
long adjust_next)
|
|
{
|
|
if (!vma->anon_vma || vma->vm_ops)
|
|
return;
|
|
__vma_adjust_trans_huge(vma, start, end, adjust_next);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) int hpage_nr_pages(struct page *page)
|
|
{
|
|
if (__builtin_expect(!!(PageTransHuge(page)), 0))
|
|
return (1<<(21 -12));
|
|
return 1;
|
|
}
|
|
|
|
extern int do_huge_pmd_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
|
unsigned long addr, pmd_t pmd, pmd_t *pmdp);
|
|
# 319 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 2
|
|
# 336 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) int put_page_testzero(struct page *page)
|
|
{
|
|
((void)(sizeof(( long)(atomic_read(&page->_count) == 0))));
|
|
return atomic_dec_and_test(&page->_count);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int get_page_unless_zero(struct page *page)
|
|
{
|
|
return atomic_add_unless((&page->_count), 1, 0);
|
|
}
|
|
# 360 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static 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__((no_instrument_function)) int is_vmalloc_addr(const void *x)
|
|
{
|
|
|
|
unsigned long addr = (unsigned long)x;
|
|
|
|
return addr >= (0xffffc90000000000UL) && addr < (0xffffe8ffffffffffUL);
|
|
|
|
|
|
|
|
}
|
|
|
|
extern int is_vmalloc_or_module_addr(const void *x);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern void kvfree(const void *addr);
|
|
|
|
static inline __attribute__((no_instrument_function)) void compound_lock(struct page *page)
|
|
{
|
|
|
|
((void)(sizeof(( long)(PageSlab(page)))));
|
|
bit_spin_lock(PG_compound_lock, &page->flags);
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void compound_unlock(struct page *page)
|
|
{
|
|
|
|
((void)(sizeof(( long)(PageSlab(page)))));
|
|
bit_spin_unlock(PG_compound_lock, &page->flags);
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long compound_lock_irqsave(struct page *page)
|
|
{
|
|
unsigned long flags = 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);
|
|
compound_lock(page);
|
|
|
|
return flags;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void compound_unlock_irqrestore(struct page *page,
|
|
unsigned long flags)
|
|
{
|
|
|
|
compound_unlock(page);
|
|
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);
|
|
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) void page_mapcount_reset(struct page *page)
|
|
{
|
|
atomic_set(&(page)->_mapcount, -1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int page_mapcount(struct page *page)
|
|
{
|
|
return atomic_read(&(page)->_mapcount) + 1;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int page_count(struct page *page)
|
|
{
|
|
return atomic_read(&compound_head(page)->_count);
|
|
}
|
|
|
|
|
|
extern int PageHeadHuge(struct page *page_head);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool __compound_tail_refcounted(struct page *page)
|
|
{
|
|
return !PageSlab(page) && !PageHeadHuge(page);
|
|
}
|
|
# 498 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static 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__((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)(atomic_read(&page->_count) != 0))));
|
|
if (compound_tail_refcounted(page->first_page))
|
|
atomic_inc(&page->_mapcount);
|
|
}
|
|
|
|
extern bool __get_page_tail(struct page *page);
|
|
|
|
static 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)(atomic_read(&page->_count) <= 0))));
|
|
atomic_inc(&page->_count);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct page *virt_to_head_page(const void *x)
|
|
{
|
|
struct page *page = (((struct page *)(0xffffea0000000000UL)) + (__phys_addr_nodebug((unsigned long)(x)) >> 12));
|
|
return compound_head(page);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void init_page_count(struct page *page)
|
|
{
|
|
atomic_set(&page->_count, 1);
|
|
}
|
|
# 557 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) int PageBuddy(struct page *page)
|
|
{
|
|
return atomic_read(&page->_mapcount) == (-128);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __SetPageBuddy(struct page *page)
|
|
{
|
|
((void)(sizeof(( long)(atomic_read(&page->_mapcount) != -1))));
|
|
atomic_set(&page->_mapcount, (-128));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __ClearPageBuddy(struct page *page)
|
|
{
|
|
((void)(sizeof(( long)(!PageBuddy(page)))));
|
|
atomic_set(&page->_mapcount, -1);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int PageBalloon(struct page *page)
|
|
{
|
|
return atomic_read(&page->_mapcount) == (-256);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __SetPageBalloon(struct page *page)
|
|
{
|
|
((void)(sizeof(( long)(atomic_read(&page->_mapcount) != -1))));
|
|
atomic_set(&page->_mapcount, (-256));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __ClearPageBalloon(struct page *page)
|
|
{
|
|
((void)(sizeof(( long)(!PageBalloon(page)))));
|
|
atomic_set(&page->_mapcount, -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__((no_instrument_function)) void set_compound_page_dtor(struct page *page,
|
|
compound_page_dtor *dtor)
|
|
{
|
|
page[1].lru.next = (void *)dtor;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) int compound_order(struct page *page)
|
|
{
|
|
if (!PageHead(page))
|
|
return 0;
|
|
return (unsigned long)page[1].lru.prev;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_compound_order(struct page *page, unsigned long order)
|
|
{
|
|
page[1].lru.prev = (void *)order;
|
|
}
|
|
# 636 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static 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);
|
|
# 751 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) enum zone_type page_zonenum(const struct page *page)
|
|
{
|
|
return (page->flags >> (((((sizeof(unsigned long)*8) - 0) - 6) - 2) * (2 != 0))) & ((1UL << 2) - 1);
|
|
}
|
|
# 768 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) int page_zone_id(struct page *page)
|
|
{
|
|
return (page->flags >> ((((((sizeof(unsigned long)*8) - 0) - 6) < ((((sizeof(unsigned long)*8) - 0) - 6) - 2))? (((sizeof(unsigned long)*8) - 0) - 6) : ((((sizeof(unsigned long)*8) - 0) - 6) - 2)) * ((6 + 2) != 0))) & ((1UL << (6 + 2)) - 1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int zone_to_nid(struct zone *zone)
|
|
{
|
|
|
|
return zone->node;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int page_to_nid(const struct page *page)
|
|
{
|
|
return (page->flags >> ((((sizeof(unsigned long)*8) - 0) - 6) * (6 != 0))) & ((1UL << 6) - 1);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int cpu_pid_to_cpupid(int cpu, int pid)
|
|
{
|
|
return ((cpu & ((1 << 8)-1)) << 8) | (pid & ((1 << 8)-1));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int cpupid_to_pid(int cpupid)
|
|
{
|
|
return cpupid & ((1 << 8)-1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int cpupid_to_cpu(int cpupid)
|
|
{
|
|
return (cpupid >> 8) & ((1 << 8)-1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int cpupid_to_nid(int cpupid)
|
|
{
|
|
return cpu_to_node(cpupid_to_cpu(cpupid));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool cpupid_pid_unset(int cpupid)
|
|
{
|
|
return cpupid_to_pid(cpupid) == (-1 & ((1 << 8)-1));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool cpupid_cpu_unset(int cpupid)
|
|
{
|
|
return cpupid_to_cpu(cpupid) == (-1 & ((1 << 8)-1));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool __cpupid_match_pid(pid_t task_pid, int cpupid)
|
|
{
|
|
return (task_pid & ((1 << 8)-1)) == cpupid_to_pid(cpupid);
|
|
}
|
|
# 843 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) int page_cpupid_last(struct page *page)
|
|
{
|
|
return (page->flags >> ((((((sizeof(unsigned long)*8) - 0) - 6) - 2) - (8 +8)) * ((8 +8) != 0))) & ((1UL << (8 +8)) - 1);
|
|
}
|
|
|
|
extern int page_cpupid_xchg_last(struct page *page, int cpupid);
|
|
|
|
static inline __attribute__((no_instrument_function)) void page_cpupid_reset_last(struct page *page)
|
|
{
|
|
int cpupid = (1 << (8 +8)) - 1;
|
|
|
|
page->flags &= ~(((1UL << (8 +8)) - 1) << ((((((sizeof(unsigned long)*8) - 0) - 6) - 2) - (8 +8)) * ((8 +8) != 0)));
|
|
page->flags |= (cpupid & ((1UL << (8 +8)) - 1)) << ((((((sizeof(unsigned long)*8) - 0) - 6) - 2) - (8 +8)) * ((8 +8) != 0));
|
|
}
|
|
# 904 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) struct zone *page_zone(const struct page *page)
|
|
{
|
|
return &(node_data[page_to_nid(page)])->node_zones[page_zonenum(page)];
|
|
}
|
|
# 922 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) void set_page_zone(struct page *page, enum zone_type zone)
|
|
{
|
|
page->flags &= ~(((1UL << 2) - 1) << (((((sizeof(unsigned long)*8) - 0) - 6) - 2) * (2 != 0)));
|
|
page->flags |= (zone & ((1UL << 2) - 1)) << (((((sizeof(unsigned long)*8) - 0) - 6) - 2) * (2 != 0));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_page_node(struct page *page, unsigned long node)
|
|
{
|
|
page->flags &= ~(((1UL << 6) - 1) << ((((sizeof(unsigned long)*8) - 0) - 6) * (6 != 0)));
|
|
page->flags |= (node & ((1UL << 6) - 1)) << ((((sizeof(unsigned long)*8) - 0) - 6) * (6 != 0));
|
|
}
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vmstat.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 1
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vmstat.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vm_event_item.h" 1
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vm_event_item.h"
|
|
enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
|
|
PGALLOC_DMA, PGALLOC_DMA32, PGALLOC_NORMAL , PGALLOC_MOVABLE,
|
|
PGFREE, PGACTIVATE, PGDEACTIVATE,
|
|
PGFAULT, PGMAJFAULT,
|
|
PGREFILL_DMA, PGREFILL_DMA32, PGREFILL_NORMAL , PGREFILL_MOVABLE,
|
|
PGSTEAL_KSWAPD_DMA, PGSTEAL_KSWAPD_DMA32, PGSTEAL_KSWAPD_NORMAL , PGSTEAL_KSWAPD_MOVABLE,
|
|
PGSTEAL_DIRECT_DMA, PGSTEAL_DIRECT_DMA32, PGSTEAL_DIRECT_NORMAL , PGSTEAL_DIRECT_MOVABLE,
|
|
PGSCAN_KSWAPD_DMA, PGSCAN_KSWAPD_DMA32, PGSCAN_KSWAPD_NORMAL , PGSCAN_KSWAPD_MOVABLE,
|
|
PGSCAN_DIRECT_DMA, PGSCAN_DIRECT_DMA32, PGSCAN_DIRECT_NORMAL , PGSCAN_DIRECT_MOVABLE,
|
|
PGSCAN_DIRECT_THROTTLE,
|
|
|
|
PGSCAN_ZONE_RECLAIM_FAILED,
|
|
|
|
PGINODESTEAL, SLABS_SCANNED, KSWAPD_INODESTEAL,
|
|
KSWAPD_LOW_WMARK_HIT_QUICKLY, KSWAPD_HIGH_WMARK_HIT_QUICKLY,
|
|
PAGEOUTRUN, ALLOCSTALL, PGROTATED,
|
|
DROP_PAGECACHE, DROP_SLAB,
|
|
|
|
NUMA_PTE_UPDATES,
|
|
NUMA_HUGE_PTE_UPDATES,
|
|
NUMA_HINT_FAULTS,
|
|
NUMA_HINT_FAULTS_LOCAL,
|
|
NUMA_PAGE_MIGRATE,
|
|
|
|
|
|
PGMIGRATE_SUCCESS, PGMIGRATE_FAIL,
|
|
|
|
|
|
COMPACTMIGRATE_SCANNED, COMPACTFREE_SCANNED,
|
|
COMPACTISOLATED,
|
|
COMPACTSTALL, COMPACTFAIL, COMPACTSUCCESS,
|
|
|
|
|
|
HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL,
|
|
|
|
UNEVICTABLE_PGCULLED,
|
|
UNEVICTABLE_PGSCANNED,
|
|
UNEVICTABLE_PGRESCUED,
|
|
UNEVICTABLE_PGMLOCKED,
|
|
UNEVICTABLE_PGMUNLOCKED,
|
|
UNEVICTABLE_PGCLEARED,
|
|
UNEVICTABLE_PGSTRANDED,
|
|
|
|
THP_FAULT_ALLOC,
|
|
THP_FAULT_FALLBACK,
|
|
THP_COLLAPSE_ALLOC,
|
|
THP_COLLAPSE_ALLOC_FAILED,
|
|
THP_SPLIT,
|
|
THP_ZERO_PAGE_ALLOC,
|
|
THP_ZERO_PAGE_ALLOC_FAILED,
|
|
|
|
|
|
BALLOON_INFLATE,
|
|
BALLOON_DEFLATE,
|
|
|
|
BALLOON_MIGRATE,
|
|
# 95 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vm_event_item.h"
|
|
NR_VM_EVENT_ITEMS
|
|
};
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vmstat.h" 2
|
|
|
|
|
|
extern int sysctl_stat_interval;
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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 { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(1) && ((1) == 1 || (1) == -1)) ? (int)(1) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (1); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(1))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(1))); break; default: __bad_percpu_size(); } } while (0);break; case 2: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(1) && ((1) == 1 || (1) == -1)) ? (int)(1) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (1); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(1))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(1))); break; default: __bad_percpu_size(); } } while (0);break; case 4: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(1) && ((1) == 1 || (1) == -1)) ? (int)(1) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (1); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(1))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(1))); break; default: __bad_percpu_size(); } } while (0);break; case 8: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(1) && ((1) == 1 || (1) == -1)) ? (int)(1) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (1); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(1))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(1))); break; default: __bad_percpu_size(); } } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
|
|
}
|
|
|
|
static 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 { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(1) && ((1) == 1 || (1) == -1)) ? (int)(1) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (1); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(1))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(1))); break; default: __bad_percpu_size(); } } while (0);break; case 2: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(1) && ((1) == 1 || (1) == -1)) ? (int)(1) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (1); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(1))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(1))); break; default: __bad_percpu_size(); } } while (0);break; case 4: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(1) && ((1) == 1 || (1) == -1)) ? (int)(1) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (1); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(1))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(1))); break; default: __bad_percpu_size(); } } while (0);break; case 8: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(1) && ((1) == 1 || (1) == -1)) ? (int)(1) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (1); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(1))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(1))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(1))); break; default: __bad_percpu_size(); } } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
|
|
}
|
|
|
|
static 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 { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(delta) && ((delta) == 1 || (delta) == -1)) ? (int)(delta) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (delta); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(delta))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(delta))); break; default: __bad_percpu_size(); } } while (0);break; case 2: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(delta) && ((delta) == 1 || (delta) == -1)) ? (int)(delta) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (delta); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(delta))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(delta))); break; default: __bad_percpu_size(); } } while (0);break; case 4: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(delta) && ((delta) == 1 || (delta) == -1)) ? (int)(delta) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (delta); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(delta))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(delta))); break; default: __bad_percpu_size(); } } while (0);break; case 8: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(delta) && ((delta) == 1 || (delta) == -1)) ? (int)(delta) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (delta); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(delta))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(delta))); break; default: __bad_percpu_size(); } } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
|
|
}
|
|
|
|
static 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 { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(delta) && ((delta) == 1 || (delta) == -1)) ? (int)(delta) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (delta); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(delta))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(delta))); break; default: __bad_percpu_size(); } } while (0);break; case 2: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(delta) && ((delta) == 1 || (delta) == -1)) ? (int)(delta) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (delta); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(delta))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(delta))); break; default: __bad_percpu_size(); } } while (0);break; case 4: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(delta) && ((delta) == 1 || (delta) == -1)) ? (int)(delta) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (delta); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(delta))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(delta))); break; default: __bad_percpu_size(); } } while (0);break; case 8: do { typedef typeof((vm_event_states.event[item])) pao_T__; const int pao_ID__ = (__builtin_constant_p(delta) && ((delta) == 1 || (delta) == -1)) ? (int)(delta) : 0; if (0) { pao_T__ pao_tmp__; pao_tmp__ = (delta); (void)pao_tmp__; } switch (sizeof((vm_event_states.event[item]))) { case 1: if (pao_ID__ == 1) asm("incb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decb ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addb %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "qi" ((pao_T__)(delta))); break; case 2: if (pao_ID__ == 1) asm("incw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decw ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addw %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 4: if (pao_ID__ == 1) asm("incl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decl ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addl %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "ri" ((pao_T__)(delta))); break; case 8: if (pao_ID__ == 1) asm("incq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else if (pao_ID__ == -1) asm("decq ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item]))); else asm("addq %1, ""%%""gs"":" "%" "0" : "+m" ((vm_event_states.event[item])) : "re" ((pao_T__)(delta))); break; default: __bad_percpu_size(); } } 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vmstat.h"
|
|
extern atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS];
|
|
|
|
static 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__((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__((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__((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;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long node_page_state(int node,
|
|
enum zone_stat_item item)
|
|
{
|
|
struct zone *zones = (node_data[node])->node_zones;
|
|
|
|
return
|
|
|
|
zone_page_state(&zones[ZONE_DMA], item) +
|
|
|
|
|
|
zone_page_state(&zones[ZONE_DMA32], item) +
|
|
|
|
|
|
|
|
|
|
zone_page_state(&zones[ZONE_NORMAL], item) +
|
|
zone_page_state(&zones[ZONE_MOVABLE], item);
|
|
}
|
|
|
|
extern void zone_statistics(struct zone *, struct zone *, gfp_t gfp);
|
|
# 201 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vmstat.h"
|
|
static 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 (__builtin_expect(!!((migratetype) == MIGRATE_CMA), 0))
|
|
__mod_zone_page_state(zone, NR_FREE_CMA_PAGES, nr_pages);
|
|
}
|
|
|
|
extern const char * const vmstat_text[];
|
|
# 948 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h" 2
|
|
|
|
static 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) - ((struct page *)(0xffffea0000000000UL)))) << 12))+((unsigned long)(0xffff880000000000UL))));
|
|
}
|
|
# 1002 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
extern struct address_space *page_mapping(struct page *page);
|
|
|
|
|
|
static 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__((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__((no_instrument_function)) int PageAnon(struct page *page)
|
|
{
|
|
return ((unsigned long)page->mapping & 1) != 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((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__((no_instrument_function)) int page_mapped(struct page *page)
|
|
{
|
|
return atomic_read(&(page)->_mapcount) >= 0;
|
|
}
|
|
# 1093 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
extern void pagefault_out_of_memory(void);
|
|
# 1103 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 1156 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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);
|
|
# 1228 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
extern void vma_do_file_update_time(struct vm_area_struct *, const char[], int);
|
|
extern struct file *vma_do_pr_or_file(struct vm_area_struct *, const char[],
|
|
int);
|
|
extern void vma_do_get_file(struct vm_area_struct *, const char[], int);
|
|
extern void vma_do_fput(struct vm_area_struct *, const char[], int);
|
|
# 1249 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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__((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__((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__((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__((no_instrument_function)) unsigned long get_mm_counter(struct mm_struct *mm, int member)
|
|
{
|
|
long val = atomic_long_read(&mm->rss_stat.count[member]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (val < 0)
|
|
val = 0;
|
|
|
|
return (unsigned long)val;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void inc_mm_counter(struct mm_struct *mm, int member)
|
|
{
|
|
atomic_long_inc(&mm->rss_stat.count[member]);
|
|
}
|
|
|
|
static 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__((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__((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__((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__((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__((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__((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;
|
|
}
|
|
|
|
|
|
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__((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;
|
|
}
|
|
# 1429 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address);
|
|
# 1439 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address);
|
|
|
|
|
|
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__((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__((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);
|
|
}
|
|
# 1475 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) void ptlock_cache_init(void)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool ptlock_alloc(struct page *page)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void ptlock_free(struct page *page)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) spinlock_t *ptlock_ptr(struct page *page)
|
|
{
|
|
return &page->ptl;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) spinlock_t *pte_lockptr(struct mm_struct *mm, pmd_t *pmd)
|
|
{
|
|
return ptlock_ptr((((struct page *)(0xffffea0000000000UL)) + ((pmd_val(*pmd) & ((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)((1ULL << 46) - 1))))) >> 12)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool ptlock_init(struct page *page)
|
|
{
|
|
# 1509 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
((void)(sizeof(( long)(*(unsigned long *)&page->ptl))));
|
|
if (!ptlock_alloc(page))
|
|
return false;
|
|
do { spinlock_check(ptlock_ptr(page)); do { *(&(ptlock_ptr(page))->rlock) = (raw_spinlock_t) { .raw_lock = { { 0 } }, }; } while (0); } while (0);
|
|
return true;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void pte_lock_deinit(struct page *page)
|
|
{
|
|
page->mapping = ((void *)0);
|
|
ptlock_free(page);
|
|
}
|
|
# 1536 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) void pgtable_init(void)
|
|
{
|
|
ptlock_cache_init();
|
|
do { } while (0);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void pgtable_page_dtor(struct page *page)
|
|
{
|
|
pte_lock_deinit(page);
|
|
dec_zone_page_state(page, NR_PAGETABLE);
|
|
}
|
|
# 1584 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static struct page *pmd_to_page(pmd_t *pmd)
|
|
{
|
|
unsigned long mask = ~(512 * sizeof(pmd_t) - 1);
|
|
return (((struct page *)(0xffffea0000000000UL)) + (__phys_addr_nodebug((unsigned long)((void *)((unsigned long) pmd & mask))) >> 12));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) spinlock_t *pmd_lockptr(struct mm_struct *mm, pmd_t *pmd)
|
|
{
|
|
return ptlock_ptr(pmd_to_page(pmd));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool pgtable_pmd_page_ctor(struct page *page)
|
|
{
|
|
|
|
page->pmd_huge_pte = ((void *)0);
|
|
|
|
return ptlock_init(page);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pgtable_pmd_page_dtor(struct page *page)
|
|
{
|
|
|
|
((void)(sizeof(( long)(page->pmd_huge_pte))));
|
|
|
|
ptlock_free(page);
|
|
}
|
|
# 1627 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static 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);
|
|
# 1656 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) void __free_reserved_page(struct page *page)
|
|
{
|
|
ClearPageReserved(page);
|
|
init_page_count(page);
|
|
__free_pages((page), 0);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void mark_page_reserved(struct page *page)
|
|
{
|
|
SetPageReserved(page);
|
|
adjust_managed_page_count(page, -1);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) unsigned long get_num_physpages(void)
|
|
{
|
|
int nid;
|
|
unsigned long phys_pages = 0;
|
|
|
|
for (((nid)) = __first_node(&(node_states[N_ONLINE])); ((nid)) < (1 << 6); ((nid)) = __next_node((((nid))), &((node_states[N_ONLINE]))))
|
|
phys_pages += ((node_data[nid])->node_present_pages);
|
|
|
|
return phys_pages;
|
|
}
|
|
# 1731 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 1755 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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,
|
|
struct mminit_pfnnid_cache *state);
|
|
|
|
|
|
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__((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);
|
|
# 1827 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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 < (~0UL)) {
|
|
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__((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);
|
|
# 1926 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static 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__((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__((no_instrument_function)) unsigned long vma_pages(struct vm_area_struct *vma)
|
|
{
|
|
return (vma->vm_end - vma->vm_start) >> 12;
|
|
}
|
|
|
|
|
|
static 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);
|
|
# 2032 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
unsigned long change_prot_numa(struct vm_area_struct *vma,
|
|
unsigned long start, unsigned long end);
|
|
|
|
|
|
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__((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);
|
|
}
|
|
# 2072 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 2108 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) void
|
|
kernel_map_pages(struct page *page, int numpages, int enable) {}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool kernel_page_present(struct page *page) { return true; }
|
|
|
|
|
|
|
|
|
|
extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm);
|
|
extern int in_gate_area_no_mm(unsigned long addr);
|
|
extern int in_gate_area(struct mm_struct *mm, unsigned long addr);
|
|
# 2132 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
extern int sysctl_drop_caches;
|
|
int drop_caches_sysctl_handler(struct ctl_table *, int,
|
|
void *, size_t *, loff_t *);
|
|
|
|
|
|
unsigned long shrink_node_slabs(gfp_t gfp_mask, int nid,
|
|
unsigned long nr_scanned,
|
|
unsigned long nr_eligible);
|
|
|
|
|
|
|
|
|
|
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 vmemmap_free(unsigned long start, unsigned long end);
|
|
|
|
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);
|
|
|
|
|
|
extern void clear_huge_page(struct page *page,
|
|
unsigned long addr,
|
|
unsigned int pages_per_huge_page);
|
|
extern void copy_user_huge_page(struct page *dst, struct page *src,
|
|
unsigned long addr, struct vm_area_struct *vma,
|
|
unsigned int pages_per_huge_page);
|
|
|
|
|
|
extern struct page_ext_operations debug_guardpage_ops;
|
|
extern struct page_ext_operations page_poisoning_ops;
|
|
# 2226 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/mm.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned int debug_guardpage_minorder(void) { return 0; }
|
|
static inline __attribute__((no_instrument_function)) bool debug_guardpage_enabled(void) { return false; }
|
|
static inline __attribute__((no_instrument_function)) bool page_is_guard(struct page *page) { return false; }
|
|
|
|
|
|
|
|
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) setup_nr_node_ids(void);
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ring_buffer.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_file.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
};
|
|
# 55 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_file.h"
|
|
static inline __attribute__((no_instrument_function)) bool seq_has_overflowed(struct seq_file *m)
|
|
{
|
|
return m->count == m->size;
|
|
}
|
|
# 68 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_file.h"
|
|
static inline __attribute__((no_instrument_function)) size_t seq_get_buf(struct seq_file *m, char **bufp)
|
|
{
|
|
do { if (__builtin_expect(!!(m->count > m->size), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_file.h"), "i" (70), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0); } while (0);
|
|
if (m->count < m->size)
|
|
*bufp = m->buf + m->count;
|
|
else
|
|
*bufp = ((void *)0);
|
|
|
|
return m->size - m->count;
|
|
}
|
|
# 88 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_file.h"
|
|
static inline __attribute__((no_instrument_function)) void seq_commit(struct seq_file *m, int num)
|
|
{
|
|
if (num < 0) {
|
|
m->count = m->size;
|
|
} else {
|
|
do { if (__builtin_expect(!!(m->count + num > m->size), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_file.h"), "i" (93), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0); } while (0);
|
|
m->count += num;
|
|
}
|
|
}
|
|
# 106 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_file.h"
|
|
static 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__((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__((no_instrument_function)) int seq_nodemask(struct seq_file *m, nodemask_t *mask)
|
|
{
|
|
return seq_bitmap(m, mask->bits, (1 << 6));
|
|
}
|
|
|
|
int seq_bitmap_list(struct seq_file *m, const unsigned long *bits,
|
|
unsigned int nr_bits);
|
|
|
|
static 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__((no_instrument_function)) int seq_nodemask_list(struct seq_file *m, nodemask_t *mask)
|
|
{
|
|
return seq_bitmap_list(m, mask->bits, (1 << 6));
|
|
}
|
|
|
|
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__((no_instrument_function)) struct user_namespace *seq_user_ns(struct seq_file *seq)
|
|
{
|
|
|
|
return seq->user_ns;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void seq_show_option(struct seq_file *m, const char *name,
|
|
const char *value)
|
|
{
|
|
seq_putc(m, ',');
|
|
seq_escape(m, name, ",= \t\n\\");
|
|
if (value) {
|
|
seq_putc(m, '=');
|
|
seq_escape(m, value, ", \t\n\\");
|
|
}
|
|
}
|
|
# 216 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_file.h"
|
|
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);
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ring_buffer.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/poll.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/poll.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kdev_t.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/kdev_t.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kdev_t.h" 2
|
|
# 23 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kdev_t.h"
|
|
static 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__((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__((no_instrument_function)) dev_t old_decode_dev(u16 val)
|
|
{
|
|
return ((((val >> 8) & 255) << 20) | (val & 255));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int new_valid_dev(dev_t dev)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) int huge_valid_dev(dev_t dev)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u64 huge_encode_dev(dev_t dev)
|
|
{
|
|
return new_encode_dev(dev);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) dev_t huge_decode_dev(u64 dev)
|
|
{
|
|
return new_decode_dev(dev);
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) unsigned sysv_major(u32 dev)
|
|
{
|
|
return (dev >> 18) & 0x3fff;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned sysv_minor(u32 dev)
|
|
{
|
|
return dev & 0x3ffff;
|
|
}
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h" 1
|
|
# 30 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static inline __attribute__((no_instrument_function)) void INIT_LIST_HEAD_RCU(struct list_head *list)
|
|
{
|
|
(*({ __attribute__((unused)) typeof(list->next) __var = ( typeof(list->next)) 0; (volatile typeof(list->next) *)&(list->next); })) = list;
|
|
(*({ __attribute__((unused)) typeof(list->prev) __var = ( typeof(list->prev)) 0; (volatile typeof(list->prev) *)&(list->prev); })) = list;
|
|
}
|
|
# 49 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static 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"); (*({ __attribute__((unused)) typeof(*&(*((struct list_head **)(&(prev)->next)))) __var = ( typeof(*&(*((struct list_head **)(&(prev)->next))))) 0; (volatile typeof(*&(*((struct list_head **)(&(prev)->next)))) *)&(*&(*((struct list_head **)(&(prev)->next)))); })) = ((typeof(*(new)) *)(new)); } while (0);
|
|
next->prev = new;
|
|
}
|
|
# 78 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static inline __attribute__((no_instrument_function)) void list_del_rcu(struct list_head *entry)
|
|
{
|
|
__list_del_entry(entry);
|
|
entry->prev = ((void *) 0x00200200 + (0xdead000000000000UL));
|
|
}
|
|
# 155 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static 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"); (*({ __attribute__((unused)) typeof(*&(*((struct list_head **)(&(new->prev)->next)))) __var = ( typeof(*&(*((struct list_head **)(&(new->prev)->next))))) 0; (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 + (0xdead000000000000UL));
|
|
}
|
|
# 198 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
sync();
|
|
# 234 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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"); (*({ __attribute__((unused)) typeof(*&(*((struct list_head **)(&(head)->next)))) __var = ( typeof(*&(*((struct list_head **)(&(head)->next))))) 0; (volatile typeof(*&(*((struct list_head **)(&(head)->next)))) *)&(*&(*((struct list_head **)(&(head)->next)))); })) = ((typeof(*(first)) *)(first)); } while (0);
|
|
first->prev = head;
|
|
at->prev = last;
|
|
}
|
|
# 343 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static inline __attribute__((no_instrument_function)) void hlist_del_rcu(struct hlist_node *n)
|
|
{
|
|
__hlist_del(n);
|
|
n->pprev = ((void *) 0x00200200 + (0xdead000000000000UL));
|
|
}
|
|
# 356 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static 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"); (*({ __attribute__((unused)) typeof(*&*(struct hlist_node **)new->pprev) __var = ( typeof(*&*(struct hlist_node **)new->pprev)) 0; (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 + (0xdead000000000000UL));
|
|
}
|
|
# 395 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static 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"); (*({ __attribute__((unused)) typeof(*&(*((struct hlist_node **)(&(h)->first)))) __var = ( typeof(*&(*((struct hlist_node **)(&(h)->first))))) 0; (volatile typeof(*&(*((struct hlist_node **)(&(h)->first)))) *)&(*&(*((struct hlist_node **)(&(h)->first)))); })) = ((typeof(*(n)) *)(n)); } while (0);
|
|
if (first)
|
|
first->pprev = &n->next;
|
|
}
|
|
# 425 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static 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"); (*({ __attribute__((unused)) typeof(*&(*((struct hlist_node **)((n)->pprev)))) __var = ( typeof(*&(*((struct hlist_node **)((n)->pprev))))) 0; (volatile typeof(*&(*((struct hlist_node **)((n)->pprev)))) *)&(*&(*((struct hlist_node **)((n)->pprev)))); })) = ((typeof(*(n)) *)(n)); } while (0);
|
|
next->pprev = &n->next;
|
|
}
|
|
# 452 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist.h"
|
|
static 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"); (*({ __attribute__((unused)) typeof(*&(*((struct hlist_node **)(&(prev)->next)))) __var = ( typeof(*&(*((struct hlist_node **)(&(prev)->next))))) 0; (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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist_bl.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list_bl.h" 1
|
|
# 33 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) void INIT_HLIST_BL_NODE(struct hlist_bl_node *h)
|
|
{
|
|
h->next = ((void *)0);
|
|
h->pprev = ((void *)0);
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int hlist_bl_unhashed(const struct hlist_bl_node *h)
|
|
{
|
|
return !h->pprev;
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) int hlist_bl_empty(const struct hlist_bl_head *h)
|
|
{
|
|
return !((unsigned long)h->first & ~1UL);
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) void hlist_bl_del(struct hlist_bl_node *n)
|
|
{
|
|
__hlist_bl_del(n);
|
|
n->next = ((void *) 0x00100100 + (0xdead000000000000UL));
|
|
n->pprev = ((void *) 0x00200200 + (0xdead000000000000UL));
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void hlist_bl_lock(struct hlist_bl_head *b)
|
|
{
|
|
bit_spin_lock(0, (unsigned long *)b);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void hlist_bl_unlock(struct hlist_bl_head *b)
|
|
{
|
|
__bit_spin_unlock(0, (unsigned long *)b);
|
|
}
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist_bl.h" 2
|
|
|
|
|
|
static 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"); (*({ __attribute__((unused)) typeof(*&h->first) __var = ( typeof(*&h->first)) 0; (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__((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)) *)(*({ __attribute__((unused)) typeof((h->first)) __var = ( typeof((h->first))) 0; (volatile typeof((h->first)) *)&((h->first)); })); do { } while (0); ; do { } while (0); ((typeof(*(h->first)) *)(_________p1)); }) & ~1UL);
|
|
}
|
|
# 46 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist_bl.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist_bl.h"
|
|
static inline __attribute__((no_instrument_function)) void hlist_bl_del_rcu(struct hlist_bl_node *n)
|
|
{
|
|
__hlist_bl_del(n);
|
|
n->pprev = ((void *) 0x00200200 + (0xdead000000000000UL));
|
|
}
|
|
# 98 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rculist_bl.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/lockref.h" 1
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/lockref.h"
|
|
struct lockref {
|
|
union {
|
|
|
|
__u64 __attribute__((aligned(8))) lock_count;
|
|
|
|
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__((no_instrument_function)) int __lockref_is_dead(const struct lockref *l)
|
|
{
|
|
return ((int)l->count < 0);
|
|
}
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h" 2
|
|
|
|
struct path;
|
|
struct vfsmount;
|
|
# 44 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h"
|
|
struct qstr {
|
|
union {
|
|
struct {
|
|
u32 hash; u32 len;;
|
|
};
|
|
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__((no_instrument_function)) unsigned long
|
|
partial_name_hash(unsigned long c, unsigned long prevhash)
|
|
{
|
|
return (prevhash + (c << 4) + (c >> 4)) * 11;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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[32];
|
|
|
|
|
|
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);
|
|
struct inode *(*d_select_inode)(struct dentry *, unsigned);
|
|
} __attribute__((__aligned__((1 << (6)))));
|
|
# 229 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 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 *);
|
|
# 283 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h"
|
|
static inline __attribute__((no_instrument_function)) void d_add(struct dentry *entry, struct inode *inode)
|
|
{
|
|
d_instantiate(entry, inode);
|
|
d_rehash(entry);
|
|
}
|
|
# 297 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h"
|
|
static 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__((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);
|
|
# 350 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h"
|
|
static inline __attribute__((no_instrument_function)) struct dentry *dget_dlock(struct dentry *dentry)
|
|
{
|
|
if (dentry)
|
|
dentry->d_lockref.count++;
|
|
return dentry;
|
|
}
|
|
|
|
static 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);
|
|
# 373 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h"
|
|
static inline __attribute__((no_instrument_function)) int d_unhashed(const struct dentry *dentry)
|
|
{
|
|
return hlist_bl_unhashed(&dentry->d_hash);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int d_unlinked(const struct dentry *dentry)
|
|
{
|
|
return d_unhashed(dentry) && !((dentry) == (dentry)->d_parent);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int cant_mount(const struct dentry *dentry)
|
|
{
|
|
return (dentry->d_flags & 0x00000100);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) bool d_managed(const struct dentry *dentry)
|
|
{
|
|
return dentry->d_flags & (0x00010000|0x00020000|0x00040000);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool d_mountpoint(const struct dentry *dentry)
|
|
{
|
|
return dentry->d_flags & 0x00010000;
|
|
}
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) void __d_clear_type(struct dentry *dentry)
|
|
{
|
|
__d_set_type(dentry, 0x00000000);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) unsigned __d_entry_type(const struct dentry *dentry)
|
|
{
|
|
return dentry->d_flags & 0x00700000;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool d_can_lookup(const struct dentry *dentry)
|
|
{
|
|
return __d_entry_type(dentry) == 0x00100000;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool d_is_autodir(const struct dentry *dentry)
|
|
{
|
|
return __d_entry_type(dentry) == 0x00200000;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) bool d_is_symlink(const struct dentry *dentry)
|
|
{
|
|
return __d_entry_type(dentry) == 0x00300000;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool d_is_file(const struct dentry *dentry)
|
|
{
|
|
return __d_entry_type(dentry) == 0x00400000;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool d_is_negative(const struct dentry *dentry)
|
|
{
|
|
return __d_entry_type(dentry) == 0x00000000;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool d_is_positive(const struct dentry *dentry)
|
|
{
|
|
return !d_is_negative(dentry);
|
|
}
|
|
|
|
extern void d_set_fallthru(struct dentry *dentry);
|
|
|
|
static inline __attribute__((no_instrument_function)) bool d_is_fallthru(const struct dentry *dentry)
|
|
{
|
|
return dentry->d_flags & 0x01000000;
|
|
}
|
|
|
|
|
|
extern int sysctl_vfs_cache_pressure;
|
|
|
|
static 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)); } );
|
|
}
|
|
# 489 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h"
|
|
static inline __attribute__((no_instrument_function)) struct inode *d_inode(const struct dentry *dentry)
|
|
{
|
|
return dentry->d_inode;
|
|
}
|
|
# 501 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h"
|
|
static inline __attribute__((no_instrument_function)) struct inode *d_inode_rcu(const struct dentry *dentry)
|
|
{
|
|
return (*({ __attribute__((unused)) typeof(dentry->d_inode) __var = ( typeof(dentry->d_inode)) 0; (volatile typeof(dentry->d_inode) *)&(dentry->d_inode); }));
|
|
}
|
|
# 516 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h"
|
|
static inline __attribute__((no_instrument_function)) struct inode *d_backing_inode(const struct dentry *upper)
|
|
{
|
|
struct inode *inode = upper->d_inode;
|
|
|
|
return inode;
|
|
}
|
|
# 533 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/dcache.h"
|
|
static inline __attribute__((no_instrument_function)) struct dentry *d_backing_dentry(struct dentry *upper)
|
|
{
|
|
return upper;
|
|
}
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) int path_equal(const struct path *path1, const struct path *path2)
|
|
{
|
|
return path1->mnt == path2->mnt && path1->dentry == path2->dentry;
|
|
}
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/stat.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/stat.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/posix_types.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/stat.h" 2
|
|
# 82 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/stat.h"
|
|
struct stat {
|
|
__kernel_ulong_t st_dev;
|
|
__kernel_ulong_t st_ino;
|
|
__kernel_ulong_t st_nlink;
|
|
|
|
unsigned int st_mode;
|
|
unsigned int st_uid;
|
|
unsigned int st_gid;
|
|
unsigned int __pad0;
|
|
__kernel_ulong_t st_rdev;
|
|
__kernel_long_t st_size;
|
|
__kernel_long_t st_blksize;
|
|
__kernel_long_t st_blocks;
|
|
|
|
__kernel_ulong_t st_atime;
|
|
__kernel_ulong_t st_atime_nsec;
|
|
__kernel_ulong_t st_mtime;
|
|
__kernel_ulong_t st_mtime_nsec;
|
|
__kernel_ulong_t st_ctime;
|
|
__kernel_ulong_t st_ctime_nsec;
|
|
__kernel_long_t __unused[3];
|
|
};
|
|
# 116 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/stat.h"
|
|
struct __old_kernel_stat {
|
|
unsigned short st_dev;
|
|
unsigned short st_ino;
|
|
unsigned short st_mode;
|
|
unsigned short st_nlink;
|
|
unsigned short st_uid;
|
|
unsigned short st_gid;
|
|
unsigned short st_rdev;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned int st_size;
|
|
unsigned int st_atime;
|
|
unsigned int st_mtime;
|
|
unsigned int st_ctime;
|
|
|
|
};
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/stat.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/stat.h" 1
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/stat.h" 2
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/stat.h"
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list_lru.h" 1
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 << (6)))));
|
|
|
|
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__((no_instrument_function)) int list_lru_init(struct list_lru *lru)
|
|
{
|
|
return list_lru_init_key(lru, ((void *)0));
|
|
}
|
|
# 59 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list_lru.h"
|
|
bool list_lru_add(struct list_lru *lru, struct list_head *item);
|
|
# 72 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list_lru.h"
|
|
bool list_lru_del(struct list_lru *lru, struct list_head *item);
|
|
# 83 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/list_lru.h"
|
|
unsigned long list_lru_count_node(struct list_lru *lru, int nid);
|
|
static inline __attribute__((no_instrument_function)) unsigned long list_lru_count(struct list_lru *lru)
|
|
{
|
|
long count = 0;
|
|
int nid;
|
|
|
|
for ((nid) = __first_node(&(lru->active_nodes)); (nid) < (1 << 6); (nid) = __next_node(((nid)), &((lru->active_nodes))))
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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;
|
|
|
|
for ((nid) = __first_node(&(lru->active_nodes)); (nid) < (1 << 6); (nid) = __next_node(((nid)), &((lru->active_nodes)))) {
|
|
isolated += list_lru_walk_node(lru, nid, isolate,
|
|
cb_arg, &nr_to_walk);
|
|
if (nr_to_walk <= 0)
|
|
break;
|
|
}
|
|
return isolated;
|
|
}
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h" 1
|
|
# 54 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h"
|
|
static inline __attribute__((no_instrument_function)) int radix_tree_is_indirect_ptr(void *ptr)
|
|
{
|
|
return (int)((unsigned long)ptr & 1);
|
|
}
|
|
# 87 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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)) + 64 - 1) / 64)];
|
|
};
|
|
|
|
|
|
struct radix_tree_root {
|
|
unsigned int height;
|
|
gfp_t gfp_mask;
|
|
struct radix_tree_node *rnode;
|
|
};
|
|
# 194 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h"
|
|
static inline __attribute__((no_instrument_function)) void *radix_tree_deref_slot(void **pslot)
|
|
{
|
|
return ({ typeof(*(*pslot)) *_________p1 = (typeof(*(*pslot)) *)(*({ __attribute__((unused)) typeof((*pslot)) __var = ( typeof((*pslot))) 0; (volatile typeof((*pslot)) *)&((*pslot)); })); do { } while (0); ; do { } while (0); ((typeof(*(*pslot)) *)(_________p1)); });
|
|
}
|
|
# 209 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h"
|
|
static inline __attribute__((no_instrument_function)) void *radix_tree_deref_slot_protected(void **pslot,
|
|
spinlock_t *treelock)
|
|
{
|
|
return ({ do { } while (0); ; ((typeof(*(*pslot)) *)((*pslot))); });
|
|
}
|
|
# 222 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h"
|
|
static inline __attribute__((no_instrument_function)) int radix_tree_deref_retry(void *arg)
|
|
{
|
|
return __builtin_expect(!!((unsigned long)arg & 1), 0);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int radix_tree_exceptional_entry(void *arg)
|
|
{
|
|
|
|
return (unsigned long)arg & 2;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int radix_tree_exception(void *arg)
|
|
{
|
|
return __builtin_expect(!!((unsigned long)arg & (1 | 2)), 0)
|
|
;
|
|
}
|
|
# 257 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h"
|
|
static inline __attribute__((no_instrument_function)) void radix_tree_replace_slot(void **pslot, void *item)
|
|
{
|
|
do { if (__builtin_expect(!!(radix_tree_is_indirect_ptr(item)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h"), "i" (259), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0); } while (0);
|
|
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"); (*({ __attribute__((unused)) typeof(*&*pslot) __var = ( typeof(*&*pslot)) 0; (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__((no_instrument_function)) void radix_tree_preload_end(void)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
# 323 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h"
|
|
struct radix_tree_iter {
|
|
unsigned long index;
|
|
unsigned long next_index;
|
|
unsigned long tags;
|
|
};
|
|
# 340 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void **
|
|
radix_tree_iter_init(struct radix_tree_iter *iter, unsigned long start)
|
|
{
|
|
# 351 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h"
|
|
iter->index = 0;
|
|
iter->next_index = start;
|
|
return ((void *)0);
|
|
}
|
|
# 369 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) __attribute__((always_inline)) unsigned
|
|
radix_tree_chunk_size(struct radix_tree_iter *iter)
|
|
{
|
|
return iter->next_index - iter->index;
|
|
}
|
|
# 395 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/radix-tree.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pid.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
enum pid_type
|
|
{
|
|
PIDTYPE_PID,
|
|
PIDTYPE_PGID,
|
|
PIDTYPE_SID,
|
|
PIDTYPE_MAX
|
|
};
|
|
# 50 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) struct pid *get_pid(struct pid *pid)
|
|
{
|
|
if (pid)
|
|
atomic_inc(&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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pid.h"
|
|
static 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__((no_instrument_function)) bool is_child_reaper(struct pid *pid)
|
|
{
|
|
return pid->numbers[pid->level].nr == 1;
|
|
}
|
|
# 164 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pid.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/semaphore.h" 1
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/semaphore.h"
|
|
struct semaphore {
|
|
raw_spinlock_t lock;
|
|
unsigned int count;
|
|
struct list_head wait_list;
|
|
};
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/semaphore.h"
|
|
static 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 = { { 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 down_interruptible(struct semaphore *sem);
|
|
extern int down_killable(struct semaphore *sem);
|
|
extern int down_trylock(struct semaphore *sem);
|
|
extern int down_timeout(struct semaphore *sem, long jiffies);
|
|
extern void up(struct semaphore *sem);
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/fiemap.h" 1
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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];
|
|
};
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/migrate_mode.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/migrate_mode.h"
|
|
enum migrate_mode {
|
|
MIGRATE_ASYNC,
|
|
MIGRATE_SYNC_LIGHT,
|
|
MIGRATE_SYNC,
|
|
};
|
|
# 29 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/percpu-rwsem.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 *);
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/blk_types.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
|
|
|
|
|
|
|
|
struct io_context *bi_ioc;
|
|
struct cgroup_subsys_state *bi_css;
|
|
|
|
union {
|
|
|
|
struct bio_integrity_payload *bi_integrity;
|
|
|
|
};
|
|
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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_NO_TIMEOUT,
|
|
__REQ_NR_BITS,
|
|
};
|
|
# 33 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/fs.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/fs.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/limits.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/fs.h" 2
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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];
|
|
};
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 242 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
# 297 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
enum positive_aop_returns {
|
|
AOP_WRITEPAGE_ACTIVATE = 0x80000,
|
|
AOP_TRUNCATED_PAGE = 0x80001,
|
|
};
|
|
# 311 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
struct page;
|
|
struct address_space;
|
|
struct writeback_control;
|
|
# 324 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 rw_semaphore i_mmap_rwsem;
|
|
|
|
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;
|
|
};
|
|
# 469 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
int mapping_tagged(struct address_space *mapping, int tag);
|
|
|
|
static inline __attribute__((no_instrument_function)) void i_mmap_lock_write(struct address_space *mapping)
|
|
{
|
|
down_write(&mapping->i_mmap_rwsem);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void i_mmap_unlock_write(struct address_space *mapping)
|
|
{
|
|
up_write(&mapping->i_mmap_rwsem);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void i_mmap_lock_read(struct address_space *mapping)
|
|
{
|
|
down_read(&mapping->i_mmap_rwsem);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void i_mmap_unlock_read(struct address_space *mapping)
|
|
{
|
|
up_read(&mapping->i_mmap_rwsem);
|
|
}
|
|
|
|
|
|
|
|
|
|
static 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);
|
|
}
|
|
# 509 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static inline __attribute__((no_instrument_function)) int mapping_writably_mapped(struct address_space *mapping)
|
|
{
|
|
return atomic_read(&mapping->i_mmap_writable) > 0;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void mapping_unmap_writable(struct address_space *mapping)
|
|
{
|
|
atomic_dec(&mapping->i_mmap_writable);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void mapping_allow_writable(struct address_space *mapping)
|
|
{
|
|
atomic_inc(&mapping->i_mmap_writable);
|
|
}
|
|
# 547 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
struct posix_acl;
|
|
# 559 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
atomic_t i_readcount;
|
|
|
|
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__((no_instrument_function)) int inode_unhashed(struct inode *inode)
|
|
{
|
|
return hlist_unhashed(&inode->i_hash);
|
|
}
|
|
# 668 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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*);
|
|
# 691 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static inline __attribute__((no_instrument_function)) loff_t i_size_read(const struct inode *inode)
|
|
{
|
|
# 710 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
return inode->i_size;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void i_size_write(struct inode *inode, loff_t i_size)
|
|
{
|
|
# 732 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
inode->i_size = i_size;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) gid_t i_gid_read(const struct inode *inode)
|
|
{
|
|
return from_kgid(&init_user_ns, inode->i_gid);
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) unsigned iminor(const struct inode *inode)
|
|
{
|
|
return ((unsigned int) ((inode->i_rdev) & ((1U << 20) - 1)));
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) struct file *get_file(struct file *f)
|
|
{
|
|
atomic_long_inc(&f->f_count);
|
|
return f;
|
|
}
|
|
# 886 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
# 916 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h" 2
|
|
# 935 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
# 974 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fcntl.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/fcntl.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/fcntl.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/fcntl.h" 1
|
|
# 155 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/fcntl.h"
|
|
struct f_owner_ex {
|
|
int type;
|
|
__kernel_pid_t pid;
|
|
};
|
|
# 195 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/fcntl.h"
|
|
struct flock {
|
|
short l_type;
|
|
short l_whence;
|
|
__kernel_off_t l_start;
|
|
__kernel_off_t l_len;
|
|
__kernel_pid_t l_pid;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct flock64 {
|
|
short l_type;
|
|
short l_whence;
|
|
__kernel_loff_t l_start;
|
|
__kernel_loff_t l_len;
|
|
__kernel_pid_t l_pid;
|
|
|
|
};
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/fcntl.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/fcntl.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fcntl.h" 2
|
|
# 975 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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_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 *);
|
|
# 1148 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
# 1187 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
unsigned int s_quota_types;
|
|
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 << (6)))));
|
|
struct list_lru s_inode_lru __attribute__((__aligned__((1 << (6)))));
|
|
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);
|
|
# 1326 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static inline __attribute__((no_instrument_function)) void sb_end_write(struct super_block *sb)
|
|
{
|
|
__sb_end_write(sb, SB_FREEZE_WRITE);
|
|
}
|
|
# 1338 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static inline __attribute__((no_instrument_function)) void sb_end_pagefault(struct super_block *sb)
|
|
{
|
|
__sb_end_write(sb, SB_FREEZE_PAGEFAULT);
|
|
}
|
|
# 1350 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static inline __attribute__((no_instrument_function)) void sb_end_intwrite(struct super_block *sb)
|
|
{
|
|
__sb_end_write(sb, SB_FREEZE_FS);
|
|
}
|
|
# 1374 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static inline __attribute__((no_instrument_function)) void sb_start_write(struct super_block *sb)
|
|
{
|
|
__sb_start_write(sb, SB_FREEZE_WRITE, true);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int sb_start_write_trylock(struct super_block *sb)
|
|
{
|
|
return __sb_start_write(sb, SB_FREEZE_WRITE, false);
|
|
}
|
|
# 1403 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static inline __attribute__((no_instrument_function)) void sb_start_pagefault(struct super_block *sb)
|
|
{
|
|
__sb_start_write(sb, SB_FREEZE_PAGEFAULT, true);
|
|
}
|
|
# 1421 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static 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);
|
|
# 1488 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
struct dir_context;
|
|
typedef int (*filldir_t)(struct dir_context *, 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 *);
|
|
void (*mremap)(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);
|
|
void (*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);
|
|
|
|
|
|
} __attribute__((__aligned__((1 << (6)))));
|
|
|
|
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_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_super) (struct super_block *);
|
|
int (*freeze_fs) (struct super_block *);
|
|
int (*thaw_super) (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 *);
|
|
|
|
ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
|
|
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
|
|
struct dquot **(*get_dquots)(struct inode *);
|
|
|
|
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);
|
|
};
|
|
# 1751 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
extern void __mark_inode_dirty(struct inode *, int);
|
|
static 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__((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__((no_instrument_function)) void inode_inc_link_count(struct inode *inode)
|
|
{
|
|
inc_nlink(inode);
|
|
mark_inode_dirty(inode);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void inode_dec_link_count(struct inode *inode)
|
|
{
|
|
drop_nlink(inode);
|
|
mark_inode_dirty(inode);
|
|
}
|
|
# 1787 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static 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__((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);
|
|
# 1887 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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__((no_instrument_function)) int __mandatory_lock(struct inode *ino)
|
|
{
|
|
return (ino->i_mode & (0002000 | 00010)) == 0002000;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int mandatory_lock(struct inode *ino)
|
|
{
|
|
return ((ino)->i_sb->s_flags & (64)) && __mandatory_lock(ino);
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) int break_lease(struct inode *inode, unsigned int mode)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
asm volatile("mfence":::"memory");
|
|
if (inode->i_flock)
|
|
return __break_lease(inode, mode, 32);
|
|
return 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int break_deleg(struct inode *inode, unsigned int mode)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
asm volatile("mfence":::"memory");
|
|
if (inode->i_flock)
|
|
return __break_lease(inode, mode, 4);
|
|
return 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int try_break_deleg(struct inode *inode, struct inode **delegated_inode)
|
|
{
|
|
int ret;
|
|
|
|
ret = break_deleg(inode, 00000001|00004000);
|
|
if (ret == -11 && delegated_inode) {
|
|
*delegated_inode = inode;
|
|
ihold(inode);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
static 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;
|
|
}
|
|
# 2077 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 vfs_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 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_flags(const char *, int, int *);
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern void putname(struct filename *name);
|
|
|
|
|
|
|
|
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);
|
|
# 2174 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 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);
|
|
# 2206 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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__((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 *);
|
|
# 2259 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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__((no_instrument_function)) int generic_write_sync(struct file *file, loff_t pos, loff_t count)
|
|
{
|
|
if (!(file->f_flags & 00010000) && !(((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 & 04000000) ? 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__((no_instrument_function)) bool execute_ok(struct inode *inode)
|
|
{
|
|
return (inode->i_mode & (00100|00010|00001)) || (((inode->i_mode) & 00170000) == 0040000);
|
|
}
|
|
|
|
static 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__((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__((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);
|
|
}
|
|
# 2355 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static 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__((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__((no_instrument_function)) void put_write_access(struct inode * inode)
|
|
{
|
|
atomic_dec(&inode->i_writecount);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void allow_write_access(struct file *file)
|
|
{
|
|
if (file)
|
|
atomic_inc(&file_inode(file)->i_writecount);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) bool inode_is_open_for_write(const struct inode *inode)
|
|
{
|
|
return atomic_read(&inode->i_writecount) > 0;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void i_readcount_dec(struct inode *inode)
|
|
{
|
|
do { if (__builtin_expect(!!(!atomic_read(&inode->i_readcount)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"), "i" (2381), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0); } while (0);
|
|
atomic_dec(&inode->i_readcount);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void i_readcount_inc(struct inode *inode)
|
|
{
|
|
atomic_inc(&inode->i_readcount);
|
|
}
|
|
# 2398 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
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 *);
|
|
|
|
|
|
|
|
|
|
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__((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__((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__((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__((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);
|
|
# 2536 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static inline __attribute__((no_instrument_function)) int xip_truncate_page(struct address_space *mapping, loff_t from)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
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__((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;
|
|
extern void make_empty_dir_inode(struct inode *inode);
|
|
extern bool is_empty_dir_inode(struct inode *inode);
|
|
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 update_time(struct inode *, struct timespec *, int);
|
|
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__((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);
|
|
# 2766 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static 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);
|
|
# 2797 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/fs.h"
|
|
static inline __attribute__((no_instrument_function)) int is_sxid(umode_t mode)
|
|
{
|
|
return (mode & 0004000) || ((mode & 0002000) && (mode & 00010));
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) bool is_root_inode(struct inode *inode)
|
|
{
|
|
return inode == inode->i_sb->s_root->d_inode;
|
|
}
|
|
|
|
static 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__((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__((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__((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__((no_instrument_function)) bool dir_relax(struct inode *inode)
|
|
{
|
|
mutex_unlock(&inode->i_mutex);
|
|
mutex_lock(&inode->i_mutex);
|
|
return !((inode)->i_flags & 16);
|
|
}
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/poll.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h" 1
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/smap.h" 1
|
|
# 61 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/smap.h"
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void clac(void)
|
|
{
|
|
|
|
asm volatile ("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" : : : "memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void stac(void)
|
|
{
|
|
|
|
asm volatile ("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" : : : "memory");
|
|
}
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h" 2
|
|
# 44 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h"
|
|
static inline __attribute__((no_instrument_function)) bool __chk_range_not_ok(unsigned long addr, unsigned long size, unsigned long limit)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (__builtin_constant_p(size))
|
|
return addr > limit - size;
|
|
|
|
|
|
addr += size;
|
|
if (addr < size)
|
|
return true;
|
|
return addr > limit;
|
|
}
|
|
# 105 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h"
|
|
struct exception_table_entry {
|
|
int insn, fixup;
|
|
};
|
|
|
|
|
|
|
|
|
|
extern int fixup_exception(struct pt_regs *regs);
|
|
extern int early_fixup_exception(unsigned long *ip);
|
|
# 130 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h"
|
|
extern int __get_user_1(void);
|
|
extern int __get_user_2(void);
|
|
extern int __get_user_4(void);
|
|
extern int __get_user_8(void);
|
|
extern int __get_user_bad(void);
|
|
# 227 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h"
|
|
extern void __put_user_bad(void);
|
|
|
|
|
|
|
|
|
|
|
|
extern void __put_user_1(void);
|
|
extern void __put_user_2(void);
|
|
extern void __put_user_4(void);
|
|
extern void __put_user_8(void);
|
|
# 414 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h"
|
|
struct __large_struct { unsigned long buf[100]; };
|
|
# 525 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h"
|
|
extern unsigned long
|
|
copy_from_user_nmi(void *to, const void *from, unsigned long n);
|
|
extern long
|
|
strncpy_from_user(char *dst, const char *src, long count);
|
|
|
|
extern long strlen_user(const char *str);
|
|
extern long strnlen_user(const char *str, long n);
|
|
|
|
unsigned long clear_user(void *mem, unsigned long len);
|
|
unsigned long __clear_user(void *mem, unsigned long len);
|
|
|
|
extern void __cmpxchg_wrong_size(void)
|
|
__attribute__((error("Bad argument size for cmpxchg")));
|
|
# 642 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess_64.h" 1
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess_64.h"
|
|
unsigned long
|
|
copy_user_enhanced_fast_string(void *to, const void *from, unsigned len);
|
|
unsigned long
|
|
copy_user_generic_string(void *to, const void *from, unsigned len);
|
|
unsigned long
|
|
copy_user_generic_unrolled(void *to, const void *from, unsigned len);
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) unsigned long
|
|
copy_user_generic(void *to, const void *from, unsigned len)
|
|
{
|
|
unsigned ret;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
asm volatile ("661:\n\t" "call %P[old]" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 3*32+16)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" " .long 661b - .\n" " .long " "663""2""f - .\n" " .word " "( 9*32+ 9)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""2""f-""663""2""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" " .byte 0xff + (" "664""2""f-""663""2""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" "call %P[new1]" "\n" "664""1" ":\n\t" "663""2"":\n\t" "call %P[new2]" "\n" "664""2" ":\n\t" ".popsection" : "=a" (ret), "=D" (to), "=S" (from), "=d" (len) : [old] "i" (copy_user_generic_unrolled), [new1] "i" (copy_user_generic_string), [new2] "i" (copy_user_enhanced_fast_string), "1" (to), "2" (from), "3" (len) : "memory", "rcx", "r8", "r9", "r10", "r11")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;
|
|
return ret;
|
|
}
|
|
|
|
unsigned long
|
|
copy_in_user(void *to, const void *from, unsigned len);
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline))
|
|
int __copy_from_user_nocheck(void *dst, const void *src, unsigned size)
|
|
{
|
|
int ret = 0;
|
|
|
|
if (!__builtin_constant_p(size))
|
|
return copy_user_generic(dst, ( void *)src, size);
|
|
switch (size) {
|
|
case 1:asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""b"" %2,%""b""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""b"" %""b""1,%""b""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=q"(*(u8 *)dst) : "m" ((*(struct __large_struct *)((u8 *)src))), "i" (1), "0" (ret))
|
|
;
|
|
return ret;
|
|
case 2:asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""w"" %2,%""w""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""w"" %""w""1,%""w""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=r"(*(u16 *)dst) : "m" ((*(struct __large_struct *)((u16 *)src))), "i" (2), "0" (ret))
|
|
;
|
|
return ret;
|
|
case 4:asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""l"" %2,%""k""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""l"" %""k""1,%""k""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=r"(*(u32 *)dst) : "m" ((*(struct __large_struct *)((u32 *)src))), "i" (4), "0" (ret))
|
|
;
|
|
return ret;
|
|
case 8:asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""q"" %2,%""""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""q"" %""""1,%""""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=r"(*(u64 *)dst) : "m" ((*(struct __large_struct *)((u64 *)src))), "i" (8), "0" (ret))
|
|
;
|
|
return ret;
|
|
case 10:
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""q"" %2,%""""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""q"" %""""1,%""""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=r"(*(u64 *)dst) : "m" ((*(struct __large_struct *)((u64 *)src))), "i" (10), "0" (ret))
|
|
;
|
|
if (__builtin_expect(!!(ret), 0))
|
|
return ret;
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""w"" %2,%""w""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""w"" %""w""1,%""w""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=r"(*(u16 *)(8 + (char *)dst)) : "m" ((*(struct __large_struct *)((u16 *)(8 + (char *)src)))), "i" (2), "0" (ret))
|
|
|
|
;
|
|
return ret;
|
|
case 16:
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""q"" %2,%""""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""q"" %""""1,%""""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=r"(*(u64 *)dst) : "m" ((*(struct __large_struct *)((u64 *)src))), "i" (16), "0" (ret))
|
|
;
|
|
if (__builtin_expect(!!(ret), 0))
|
|
return ret;
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""q"" %2,%""""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""q"" %""""1,%""""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=r"(*(u64 *)(8 + (char *)dst)) : "m" ((*(struct __large_struct *)((u64 *)(8 + (char *)src)))), "i" (8), "0" (ret))
|
|
|
|
;
|
|
return ret;
|
|
default:
|
|
return copy_user_generic(dst, ( void *)src, size);
|
|
}
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline))
|
|
int __copy_from_user(void *dst, const void *src, unsigned size)
|
|
{
|
|
might_fault();
|
|
return __copy_from_user_nocheck(dst, src, size);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline))
|
|
int __copy_to_user_nocheck(void *dst, const void *src, unsigned size)
|
|
{
|
|
int ret = 0;
|
|
|
|
if (!__builtin_constant_p(size))
|
|
return copy_user_generic(( void *)dst, src, size);
|
|
switch (size) {
|
|
case 1:asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""b"" %""b""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "iq"(*(u8 *)src), "m" ((*(struct __large_struct *)((u8 *)dst))), "i" (1), "0" (ret))
|
|
;
|
|
return ret;
|
|
case 2:asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""w"" %""w""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "ir"(*(u16 *)src), "m" ((*(struct __large_struct *)((u16 *)dst))), "i" (2), "0" (ret))
|
|
;
|
|
return ret;
|
|
case 4:asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""l"" %""k""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "ir"(*(u32 *)src), "m" ((*(struct __large_struct *)((u32 *)dst))), "i" (4), "0" (ret))
|
|
;
|
|
return ret;
|
|
case 8:asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""q"" %""""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "er"(*(u64 *)src), "m" ((*(struct __large_struct *)((u64 *)dst))), "i" (8), "0" (ret))
|
|
;
|
|
return ret;
|
|
case 10:
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""q"" %""""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "er"(*(u64 *)src), "m" ((*(struct __large_struct *)((u64 *)dst))), "i" (10), "0" (ret))
|
|
;
|
|
if (__builtin_expect(!!(ret), 0))
|
|
return ret;
|
|
asm("":::"memory");
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""w"" %""w""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "ir"(4[(u16 *)src]), "m" ((*(struct __large_struct *)(4 + (u16 *)dst))), "i" (2), "0" (ret))
|
|
;
|
|
return ret;
|
|
case 16:
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""q"" %""""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "er"(*(u64 *)src), "m" ((*(struct __large_struct *)((u64 *)dst))), "i" (16), "0" (ret))
|
|
;
|
|
if (__builtin_expect(!!(ret), 0))
|
|
return ret;
|
|
asm("":::"memory");
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""q"" %""""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "er"(1[(u64 *)src]), "m" ((*(struct __large_struct *)(1 + (u64 *)dst))), "i" (8), "0" (ret))
|
|
;
|
|
return ret;
|
|
default:
|
|
return copy_user_generic(( void *)dst, src, size);
|
|
}
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline))
|
|
int __copy_to_user(void *dst, const void *src, unsigned size)
|
|
{
|
|
might_fault();
|
|
return __copy_to_user_nocheck(dst, src, size);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline))
|
|
int __copy_in_user(void *dst, const void *src, unsigned size)
|
|
{
|
|
int ret = 0;
|
|
|
|
might_fault();
|
|
if (!__builtin_constant_p(size))
|
|
return copy_user_generic(( void *)dst,
|
|
( void *)src, size);
|
|
switch (size) {
|
|
case 1: {
|
|
u8 tmp;
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""b"" %2,%""b""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""b"" %""b""1,%""b""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=q"(tmp) : "m" ((*(struct __large_struct *)((u8 *)src))), "i" (1), "0" (ret))
|
|
;
|
|
if (__builtin_expect(!!(!ret), 1))
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""b"" %""b""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "iq"(tmp), "m" ((*(struct __large_struct *)((u8 *)dst))), "i" (1), "0" (ret))
|
|
;
|
|
return ret;
|
|
}
|
|
case 2: {
|
|
u16 tmp;
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""w"" %2,%""w""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""w"" %""w""1,%""w""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=r"(tmp) : "m" ((*(struct __large_struct *)((u16 *)src))), "i" (2), "0" (ret))
|
|
;
|
|
if (__builtin_expect(!!(!ret), 1))
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""w"" %""w""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "ir"(tmp), "m" ((*(struct __large_struct *)((u16 *)dst))), "i" (2), "0" (ret))
|
|
;
|
|
return ret;
|
|
}
|
|
|
|
case 4: {
|
|
u32 tmp;
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""l"" %2,%""k""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""l"" %""k""1,%""k""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=r"(tmp) : "m" ((*(struct __large_struct *)((u32 *)src))), "i" (4), "0" (ret))
|
|
;
|
|
if (__builtin_expect(!!(!ret), 1))
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""l"" %""k""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "ir"(tmp), "m" ((*(struct __large_struct *)((u32 *)dst))), "i" (4), "0" (ret))
|
|
;
|
|
return ret;
|
|
}
|
|
case 8: {
|
|
u64 tmp;
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""q"" %2,%""""1\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " xor""q"" %""""1,%""""1\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r" (ret), "=r"(tmp) : "m" ((*(struct __large_struct *)((u64 *)src))), "i" (8), "0" (ret))
|
|
;
|
|
if (__builtin_expect(!!(!ret), 1))
|
|
asm volatile("661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xcb" "\n" "664""1" ":\n\t" ".popsection" "\n" "1: mov""q"" %""""1,%2\n" "2: " "661:\n\t" ".byte " "0x66,0x66,0x90" "\n" "\n662:\n" ".pushsection .altinstructions,\"a\"\n" " .long 661b - .\n" " .long " "663""1""f - .\n" " .word " "( 9*32+20)" "\n" " .byte " "662b-661b" "\n" " .byte " "664""1""f-""663""1""f" "\n" ".popsection\n" ".pushsection .discard,\"aw\",@progbits\n" " .byte 0xff + (" "664""1""f-""663""1""f" ") - (" "662b-661b" ")\n" ".popsection\n" ".pushsection .altinstr_replacement, \"ax\"\n" "663""1"":\n\t" ".byte 0x0f,0x01,0xca" "\n" "664""1" ":\n\t" ".popsection" "\n" ".section .fixup,\"ax\"\n" "3: mov %3,%0\n" " jmp 2b\n" ".previous\n" " .pushsection \"__ex_table\",\"a\"\n" " .balign 8\n" " .long (" "1b" ") - .\n" " .long (" "3b" ") - .\n" " .popsection\n" : "=r"(ret) : "er"(tmp), "m" ((*(struct __large_struct *)((u64 *)dst))), "i" (8), "0" (ret))
|
|
;
|
|
return ret;
|
|
}
|
|
default:
|
|
return copy_user_generic(( void *)dst,
|
|
( void *)src, size);
|
|
}
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) int
|
|
__copy_from_user_inatomic(void *dst, const void *src, unsigned size)
|
|
{
|
|
return __copy_from_user_nocheck(dst, src, size);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) int
|
|
__copy_to_user_inatomic(void *dst, const void *src, unsigned size)
|
|
{
|
|
return __copy_to_user_nocheck(dst, src, size);
|
|
}
|
|
|
|
extern long __copy_user_nocache(void *dst, const void *src,
|
|
unsigned size, int zerorest);
|
|
|
|
static inline __attribute__((no_instrument_function)) int
|
|
__copy_from_user_nocache(void *dst, const void *src, unsigned size)
|
|
{
|
|
might_fault();
|
|
return __copy_user_nocache(dst, src, size, 1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int
|
|
__copy_from_user_inatomic_nocache(void *dst, const void *src,
|
|
unsigned size)
|
|
{
|
|
return __copy_user_nocache(dst, src, size, 0);
|
|
}
|
|
|
|
unsigned long
|
|
copy_user_handle_tail(char *to, char *from, unsigned len, unsigned zerorest);
|
|
# 643 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h" 2
|
|
|
|
|
|
unsigned long _copy_from_user(void *to, const void *from,
|
|
unsigned n);
|
|
unsigned long _copy_to_user(void *to, const void *from,
|
|
unsigned n);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern void __attribute__((warning("copy_from_user() buffer size is too small")))
|
|
copy_from_user_overflow(void);
|
|
extern void __attribute__((warning("copy_to_user() buffer size is too small")))
|
|
copy_to_user_overflow(void) __asm__("copy_from_user_overflow");
|
|
# 677 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h"
|
|
static inline __attribute__((no_instrument_function)) void
|
|
__copy_from_user_overflow(int size, unsigned long count)
|
|
{
|
|
({ int __ret_warn_on = !!(1); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_fmt("/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h", 680, "Buffer overflow detected (%d < %lu)!\n", size, count); __builtin_expect(!!(__ret_warn_on), 0); });
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long
|
|
copy_from_user(void *to, const void *from, unsigned long n)
|
|
{
|
|
int sz = -1;
|
|
|
|
might_fault();
|
|
# 712 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/uaccess.h"
|
|
if (__builtin_expect(!!(sz < 0 || sz >= n), 1))
|
|
n = _copy_from_user(to, from, n);
|
|
else if(__builtin_constant_p(n))
|
|
copy_from_user_overflow();
|
|
else
|
|
__copy_from_user_overflow(sz, n);
|
|
|
|
return n;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long
|
|
copy_to_user(void *to, const void *from, unsigned long n)
|
|
{
|
|
int sz = -1;
|
|
|
|
might_fault();
|
|
|
|
|
|
if (__builtin_expect(!!(sz < 0 || sz >= n), 1))
|
|
n = _copy_to_user(to, from, n);
|
|
else if(__builtin_constant_p(n))
|
|
copy_to_user_overflow();
|
|
else
|
|
__copy_from_user_overflow(sz, n);
|
|
|
|
return n;
|
|
}
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/poll.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/poll.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/poll.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/poll.h" 1
|
|
# 35 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/poll.h"
|
|
struct pollfd {
|
|
int fd;
|
|
short events;
|
|
short revents;
|
|
};
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/poll.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/poll.h" 2
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/poll.h" 2
|
|
|
|
extern struct ctl_table epoll_table[];
|
|
# 26 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/poll.h"
|
|
struct poll_table_struct;
|
|
|
|
|
|
|
|
|
|
typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct poll_table_struct {
|
|
poll_queue_proc _qproc;
|
|
unsigned long _key;
|
|
} poll_table;
|
|
|
|
static inline __attribute__((no_instrument_function)) void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)
|
|
{
|
|
if (p && p->_qproc && wait_address)
|
|
p->_qproc(filp, wait_address, p);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool poll_does_not_wait(const poll_table *p)
|
|
{
|
|
return p == ((void *)0) || p->_qproc == ((void *)0);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long poll_requested_events(const poll_table *p)
|
|
{
|
|
return p ? p->_key : ~0UL;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void init_poll_funcptr(poll_table *pt, poll_queue_proc qproc)
|
|
{
|
|
pt->_qproc = qproc;
|
|
pt->_key = ~0UL;
|
|
}
|
|
|
|
struct poll_table_entry {
|
|
struct file *filp;
|
|
unsigned long key;
|
|
wait_queue_t wait;
|
|
wait_queue_head_t *wait_address;
|
|
};
|
|
|
|
|
|
|
|
|
|
struct poll_wqueues {
|
|
poll_table pt;
|
|
struct poll_table_page *table;
|
|
struct task_struct *polling_task;
|
|
int triggered;
|
|
int error;
|
|
int inline_index;
|
|
struct poll_table_entry inline_entries[((832 - 256) / sizeof(struct poll_table_entry))];
|
|
};
|
|
|
|
extern void poll_initwait(struct poll_wqueues *pwq);
|
|
extern void poll_freewait(struct poll_wqueues *pwq);
|
|
extern int poll_schedule_timeout(struct poll_wqueues *pwq, int state,
|
|
ktime_t *expires, unsigned long slack);
|
|
extern long select_estimate_accuracy(struct timespec *tv);
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int poll_schedule(struct poll_wqueues *pwq, int state)
|
|
{
|
|
return poll_schedule_timeout(pwq, state, ((void *)0), 0);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
unsigned long *in, *out, *ex;
|
|
unsigned long *res_in, *res_out, *res_ex;
|
|
} fd_set_bits;
|
|
# 129 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/poll.h"
|
|
static inline __attribute__((no_instrument_function))
|
|
int get_fd_set(unsigned long nr, void *ufdset, unsigned long *fdset)
|
|
{
|
|
nr = ((((nr)+(8*sizeof(long))-1)/(8*sizeof(long)))*sizeof(long));
|
|
if (ufdset)
|
|
return copy_from_user(fdset, ufdset, nr) ? -14 : 0;
|
|
|
|
memset(fdset, 0, nr);
|
|
return 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long
|
|
set_fd_set(unsigned long nr, void *ufdset, unsigned long *fdset)
|
|
{
|
|
if (ufdset)
|
|
return __copy_to_user(ufdset, fdset, ((((nr)+(8*sizeof(long))-1)/(8*sizeof(long)))*sizeof(long)));
|
|
return 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function))
|
|
void zero_fd_set(unsigned long nr, unsigned long *fdset)
|
|
{
|
|
memset(fdset, 0, ((((nr)+(8*sizeof(long))-1)/(8*sizeof(long)))*sizeof(long)));
|
|
}
|
|
|
|
|
|
|
|
extern int do_select(int n, fd_set_bits *fds, struct timespec *end_time);
|
|
extern int do_sys_poll(struct pollfd * ufds, unsigned int nfds,
|
|
struct timespec *end_time);
|
|
extern int core_sys_select(int n, fd_set *inp, fd_set *outp,
|
|
fd_set *exp, struct timespec *end_time);
|
|
|
|
extern int poll_select_set_timeout(struct timespec *to, long sec, long nsec);
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ring_buffer.h" 2
|
|
|
|
struct ring_buffer;
|
|
struct ring_buffer_iter;
|
|
|
|
|
|
|
|
|
|
struct ring_buffer_event {
|
|
;
|
|
u32 type_len:5, time_delta:27;
|
|
;
|
|
|
|
u32 array[];
|
|
};
|
|
# 55 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ring_buffer.h"
|
|
enum ring_buffer_type {
|
|
RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,
|
|
RINGBUF_TYPE_PADDING,
|
|
RINGBUF_TYPE_TIME_EXTEND,
|
|
|
|
RINGBUF_TYPE_TIME_STAMP,
|
|
};
|
|
|
|
unsigned ring_buffer_event_length(struct ring_buffer_event *event);
|
|
void *ring_buffer_event_data(struct ring_buffer_event *event);
|
|
# 80 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ring_buffer.h"
|
|
void ring_buffer_discard_commit(struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event);
|
|
|
|
|
|
|
|
|
|
struct ring_buffer *
|
|
__ring_buffer_alloc(unsigned long size, unsigned flags, struct lock_class_key *key);
|
|
# 100 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ring_buffer.h"
|
|
int ring_buffer_wait(struct ring_buffer *buffer, int cpu, bool full);
|
|
int ring_buffer_poll_wait(struct ring_buffer *buffer, int cpu,
|
|
struct file *filp, poll_table *poll_table);
|
|
|
|
|
|
|
|
|
|
void ring_buffer_free(struct ring_buffer *buffer);
|
|
|
|
int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size, int cpu);
|
|
|
|
void ring_buffer_change_overwrite(struct ring_buffer *buffer, int val);
|
|
|
|
struct ring_buffer_event *ring_buffer_lock_reserve(struct ring_buffer *buffer,
|
|
unsigned long length);
|
|
int ring_buffer_unlock_commit(struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event);
|
|
int ring_buffer_write(struct ring_buffer *buffer,
|
|
unsigned long length, void *data);
|
|
|
|
struct ring_buffer_event *
|
|
ring_buffer_peek(struct ring_buffer *buffer, int cpu, u64 *ts,
|
|
unsigned long *lost_events);
|
|
struct ring_buffer_event *
|
|
ring_buffer_consume(struct ring_buffer *buffer, int cpu, u64 *ts,
|
|
unsigned long *lost_events);
|
|
|
|
struct ring_buffer_iter *
|
|
ring_buffer_read_prepare(struct ring_buffer *buffer, int cpu);
|
|
void ring_buffer_read_prepare_sync(void);
|
|
void ring_buffer_read_start(struct ring_buffer_iter *iter);
|
|
void ring_buffer_read_finish(struct ring_buffer_iter *iter);
|
|
|
|
struct ring_buffer_event *
|
|
ring_buffer_iter_peek(struct ring_buffer_iter *iter, u64 *ts);
|
|
struct ring_buffer_event *
|
|
ring_buffer_read(struct ring_buffer_iter *iter, u64 *ts);
|
|
void ring_buffer_iter_reset(struct ring_buffer_iter *iter);
|
|
int ring_buffer_iter_empty(struct ring_buffer_iter *iter);
|
|
|
|
unsigned long ring_buffer_size(struct ring_buffer *buffer, int cpu);
|
|
|
|
void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu);
|
|
void ring_buffer_reset(struct ring_buffer *buffer);
|
|
|
|
|
|
int ring_buffer_swap_cpu(struct ring_buffer *buffer_a,
|
|
struct ring_buffer *buffer_b, int cpu);
|
|
# 157 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ring_buffer.h"
|
|
int ring_buffer_empty(struct ring_buffer *buffer);
|
|
int ring_buffer_empty_cpu(struct ring_buffer *buffer, int cpu);
|
|
|
|
void ring_buffer_record_disable(struct ring_buffer *buffer);
|
|
void ring_buffer_record_enable(struct ring_buffer *buffer);
|
|
void ring_buffer_record_off(struct ring_buffer *buffer);
|
|
void ring_buffer_record_on(struct ring_buffer *buffer);
|
|
int ring_buffer_record_is_on(struct ring_buffer *buffer);
|
|
void ring_buffer_record_disable_cpu(struct ring_buffer *buffer, int cpu);
|
|
void ring_buffer_record_enable_cpu(struct ring_buffer *buffer, int cpu);
|
|
|
|
u64 ring_buffer_oldest_event_ts(struct ring_buffer *buffer, int cpu);
|
|
unsigned long ring_buffer_bytes_cpu(struct ring_buffer *buffer, int cpu);
|
|
unsigned long ring_buffer_entries(struct ring_buffer *buffer);
|
|
unsigned long ring_buffer_overruns(struct ring_buffer *buffer);
|
|
unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu);
|
|
unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu);
|
|
unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu);
|
|
unsigned long ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu);
|
|
unsigned long ring_buffer_read_events_cpu(struct ring_buffer *buffer, int cpu);
|
|
|
|
u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu);
|
|
void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer,
|
|
int cpu, u64 *ts);
|
|
void ring_buffer_set_clock(struct ring_buffer *buffer,
|
|
u64 (*clock)(void));
|
|
|
|
size_t ring_buffer_page_len(void *page);
|
|
|
|
|
|
void *ring_buffer_alloc_read_page(struct ring_buffer *buffer, int cpu);
|
|
void ring_buffer_free_read_page(struct ring_buffer *buffer, void *data);
|
|
int ring_buffer_read_page(struct ring_buffer *buffer, void **data_page,
|
|
size_t len, int cpu, int full);
|
|
|
|
struct trace_seq;
|
|
|
|
int ring_buffer_print_entry_header(struct trace_seq *s);
|
|
int ring_buffer_print_page_header(struct trace_seq *s);
|
|
|
|
enum ring_buffer_flags {
|
|
RB_FL_OVERWRITE = 1 << 0,
|
|
};
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/trace_seq.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_buf.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_buf.h"
|
|
struct seq_buf {
|
|
char *buffer;
|
|
size_t size;
|
|
size_t len;
|
|
loff_t readpos;
|
|
};
|
|
|
|
static inline __attribute__((no_instrument_function)) void seq_buf_clear(struct seq_buf *s)
|
|
{
|
|
s->len = 0;
|
|
s->readpos = 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
seq_buf_init(struct seq_buf *s, unsigned char *buf, unsigned int size)
|
|
{
|
|
s->buffer = buf;
|
|
s->size = size;
|
|
seq_buf_clear(s);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool
|
|
seq_buf_has_overflowed(struct seq_buf *s)
|
|
{
|
|
return s->len > s->size;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
seq_buf_set_overflow(struct seq_buf *s)
|
|
{
|
|
s->len = s->size + 1;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int
|
|
seq_buf_buffer_left(struct seq_buf *s)
|
|
{
|
|
if (seq_buf_has_overflowed(s))
|
|
return 0;
|
|
|
|
return s->size - s->len;
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int seq_buf_used(struct seq_buf *s)
|
|
{
|
|
return ({ typeof(s->len) _min1 = (s->len); typeof(s->size) _min2 = (s->size); (void) (&_min1 == &_min2); _min1 < _min2 ? _min1 : _min2; });
|
|
}
|
|
# 81 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_buf.h"
|
|
static inline __attribute__((no_instrument_function)) size_t seq_buf_get_buf(struct seq_buf *s, char **bufp)
|
|
{
|
|
({ int __ret_warn_on = !!(s->len > s->size + 1); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_buf.h", 83); __builtin_expect(!!(__ret_warn_on), 0); });
|
|
|
|
if (s->len < s->size) {
|
|
*bufp = s->buffer + s->len;
|
|
return s->size - s->len;
|
|
}
|
|
|
|
*bufp = ((void *)0);
|
|
return 0;
|
|
}
|
|
# 103 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_buf.h"
|
|
static inline __attribute__((no_instrument_function)) void seq_buf_commit(struct seq_buf *s, int num)
|
|
{
|
|
if (num < 0) {
|
|
seq_buf_set_overflow(s);
|
|
} else {
|
|
|
|
do { if (__builtin_expect(!!(s->len + num > s->size), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seq_buf.h"), "i" (109), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0); } while (0);
|
|
s->len += num;
|
|
}
|
|
}
|
|
|
|
extern __attribute__((format(printf, 2, 3)))
|
|
int seq_buf_printf(struct seq_buf *s, const char *fmt, ...);
|
|
extern __attribute__((format(printf, 2, 0)))
|
|
int seq_buf_vprintf(struct seq_buf *s, const char *fmt, va_list args);
|
|
extern int seq_buf_print_seq(struct seq_file *m, struct seq_buf *s);
|
|
extern int seq_buf_to_user(struct seq_buf *s, char *ubuf,
|
|
int cnt);
|
|
extern int seq_buf_puts(struct seq_buf *s, const char *str);
|
|
extern int seq_buf_putc(struct seq_buf *s, unsigned char c);
|
|
extern int seq_buf_putmem(struct seq_buf *s, const void *mem, unsigned int len);
|
|
extern int seq_buf_putmem_hex(struct seq_buf *s, const void *mem,
|
|
unsigned int len);
|
|
extern int seq_buf_path(struct seq_buf *s, const struct path *path, const char *esc);
|
|
|
|
extern int seq_buf_bitmask(struct seq_buf *s, const unsigned long *maskp,
|
|
int nmaskbits);
|
|
|
|
|
|
extern int
|
|
seq_buf_bprintf(struct seq_buf *s, const char *fmt, const u32 *binary);
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/trace_seq.h" 2
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/trace_seq.h"
|
|
struct trace_seq {
|
|
unsigned char buffer[((1UL) << 12)];
|
|
struct seq_buf seq;
|
|
int full;
|
|
};
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
trace_seq_init(struct trace_seq *s)
|
|
{
|
|
seq_buf_init(&s->seq, s->buffer, ((1UL) << 12));
|
|
s->full = 0;
|
|
}
|
|
# 39 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/trace_seq.h"
|
|
static inline __attribute__((no_instrument_function)) int trace_seq_used(struct trace_seq *s)
|
|
{
|
|
return seq_buf_used(&s->seq);
|
|
}
|
|
# 53 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/trace_seq.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned char *
|
|
trace_seq_buffer_ptr(struct trace_seq *s)
|
|
{
|
|
return s->buffer + seq_buf_used(&s->seq);
|
|
}
|
|
# 66 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/trace_seq.h"
|
|
static inline __attribute__((no_instrument_function)) bool trace_seq_has_overflowed(struct trace_seq *s)
|
|
{
|
|
return s->full || seq_buf_has_overflowed(&s->seq);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
extern __attribute__((format(printf, 2, 3)))
|
|
void trace_seq_printf(struct trace_seq *s, const char *fmt, ...);
|
|
extern __attribute__((format(printf, 2, 0)))
|
|
void trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args);
|
|
extern void
|
|
trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary);
|
|
extern int trace_print_seq(struct seq_file *m, struct trace_seq *s);
|
|
extern int trace_seq_to_user(struct trace_seq *s, char *ubuf,
|
|
int cnt);
|
|
extern void trace_seq_puts(struct trace_seq *s, const char *str);
|
|
extern void trace_seq_putc(struct trace_seq *s, unsigned char c);
|
|
extern void trace_seq_putmem(struct trace_seq *s, const void *mem, unsigned int len);
|
|
extern void trace_seq_putmem_hex(struct trace_seq *s, const void *mem,
|
|
unsigned int len);
|
|
extern int trace_seq_path(struct trace_seq *s, const struct path *path);
|
|
|
|
extern void trace_seq_bitmask(struct trace_seq *s, const unsigned long *maskp,
|
|
int nmaskbits);
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hardirq.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_irq.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_irq.h"
|
|
static inline __attribute__((no_instrument_function)) void ftrace_nmi_enter(void) { }
|
|
static inline __attribute__((no_instrument_function)) void ftrace_nmi_exit(void) { }
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hardirq.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vtime.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/context_tracking_state.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/static_key.h" 1
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/context_tracking_state.h" 2
|
|
|
|
struct context_tracking {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool active;
|
|
enum ctx_state {
|
|
IN_KERNEL = 0,
|
|
IN_USER,
|
|
} state;
|
|
};
|
|
|
|
|
|
extern struct static_key context_tracking_enabled;
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(struct context_tracking) context_tracking;
|
|
|
|
static inline __attribute__((no_instrument_function)) bool context_tracking_is_enabled(void)
|
|
{
|
|
return static_key_false(&context_tracking_enabled);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool context_tracking_cpu_is_enabled(void)
|
|
{
|
|
return ({ __this_cpu_preempt_check("read"); ({ typeof(context_tracking.active) pscr_ret__; do { const void *__vpp_verify = (typeof((&(context_tracking.active)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(context_tracking.active)) { case 1: pscr_ret__ = ({ typeof(context_tracking.active) pfo_ret__; switch (sizeof(context_tracking.active)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (context_tracking.active)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 2: pscr_ret__ = ({ typeof(context_tracking.active) pfo_ret__; switch (sizeof(context_tracking.active)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (context_tracking.active)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 4: pscr_ret__ = ({ typeof(context_tracking.active) pfo_ret__; switch (sizeof(context_tracking.active)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (context_tracking.active)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 8: pscr_ret__ = ({ typeof(context_tracking.active) pfo_ret__; switch (sizeof(context_tracking.active)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (context_tracking.active)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.active)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; default: __bad_size_call_parameter(); break; } pscr_ret__; }); });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool context_tracking_in_user(void)
|
|
{
|
|
return ({ __this_cpu_preempt_check("read"); ({ typeof(context_tracking.state) pscr_ret__; do { const void *__vpp_verify = (typeof((&(context_tracking.state)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(context_tracking.state)) { case 1: pscr_ret__ = ({ typeof(context_tracking.state) pfo_ret__; switch (sizeof(context_tracking.state)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (context_tracking.state)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 2: pscr_ret__ = ({ typeof(context_tracking.state) pfo_ret__; switch (sizeof(context_tracking.state)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (context_tracking.state)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 4: pscr_ret__ = ({ typeof(context_tracking.state) pfo_ret__; switch (sizeof(context_tracking.state)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (context_tracking.state)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 8: pscr_ret__ = ({ typeof(context_tracking.state) pfo_ret__; switch (sizeof(context_tracking.state)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (context_tracking.state)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (context_tracking.state)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; default: __bad_size_call_parameter(); break; } pscr_ret__; }); }) == IN_USER;
|
|
}
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vtime.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
struct task_struct;
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vtime.h"
|
|
static inline __attribute__((no_instrument_function)) bool vtime_accounting_enabled(void) { return false; }
|
|
# 69 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vtime.h"
|
|
static inline __attribute__((no_instrument_function)) void vtime_task_switch(struct task_struct *prev) { }
|
|
static inline __attribute__((no_instrument_function)) void vtime_account_system(struct task_struct *tsk) { }
|
|
static inline __attribute__((no_instrument_function)) void vtime_account_user(struct task_struct *tsk) { }
|
|
static inline __attribute__((no_instrument_function)) void vtime_account_irq_enter(struct task_struct *tsk) { }
|
|
# 95 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/vtime.h"
|
|
static inline __attribute__((no_instrument_function)) void vtime_account_irq_exit(struct task_struct *tsk)
|
|
{
|
|
|
|
vtime_account_system(tsk);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void vtime_user_enter(struct task_struct *tsk) { }
|
|
static inline __attribute__((no_instrument_function)) void vtime_user_exit(struct task_struct *tsk) { }
|
|
static inline __attribute__((no_instrument_function)) void vtime_guest_enter(struct task_struct *tsk) { }
|
|
static inline __attribute__((no_instrument_function)) void vtime_guest_exit(struct task_struct *tsk) { }
|
|
static inline __attribute__((no_instrument_function)) void vtime_init_idle(struct task_struct *tsk, int cpu) { }
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void irqtime_account_irq(struct task_struct *tsk) { }
|
|
|
|
|
|
static 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__((no_instrument_function)) void account_irq_exit_time(struct task_struct *tsk)
|
|
{
|
|
vtime_account_irq_exit(tsk);
|
|
irqtime_account_irq(tsk);
|
|
}
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hardirq.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hardirq.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqhandler.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqhandler.h"
|
|
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);
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqreturn.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqreturn.h"
|
|
enum irqreturn {
|
|
IRQ_NONE = (0 << 0),
|
|
IRQ_HANDLED = (1 << 0),
|
|
IRQ_WAKE_THREAD = (1 << 1),
|
|
};
|
|
|
|
typedef enum irqreturn irqreturn_t;
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqnr.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/irqnr.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h" 2
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/io.h" 1
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/io.h"
|
|
void *devm_ioremap(struct device *dev, resource_size_t offset,
|
|
resource_size_t size);
|
|
void *devm_ioremap_nocache(struct device *dev, resource_size_t offset,
|
|
resource_size_t 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);
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irq.h" 1
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irq.h"
|
|
static inline __attribute__((no_instrument_function)) int irq_canonicalize(int irq)
|
|
{
|
|
return ((irq == 2) ? 9 : irq);
|
|
}
|
|
# 28 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irq.h"
|
|
extern int check_irq_vectors_for_cpu_disable(void);
|
|
extern void fixup_irqs(void);
|
|
extern void irq_force_complete_move(int);
|
|
|
|
|
|
extern void (*x86_platform_ipi_callback)(void);
|
|
extern void native_init_IRQ(void);
|
|
extern bool handle_irq(unsigned irq, struct pt_regs *regs);
|
|
|
|
extern __attribute__((externally_visible)) unsigned int do_IRQ(struct pt_regs *regs);
|
|
|
|
|
|
extern unsigned long used_vectors[(((256) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
|
|
extern int vector_used_by_percpu_irq(unsigned int vector);
|
|
|
|
extern void init_ISA_irqs(void);
|
|
|
|
|
|
void arch_trigger_all_cpu_backtrace(bool);
|
|
# 27 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irq_regs.h" 1
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irq_regs.h"
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(struct pt_regs *) irq_regs;
|
|
|
|
static inline __attribute__((no_instrument_function)) struct pt_regs *get_irq_regs(void)
|
|
{
|
|
return ({ typeof(irq_regs) pscr_ret__; do { const void *__vpp_verify = (typeof((&(irq_regs)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(irq_regs)) { case 1: pscr_ret__ = ({ typeof(irq_regs) pfo_ret__; switch (sizeof(irq_regs)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (irq_regs)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 2: pscr_ret__ = ({ typeof(irq_regs) pfo_ret__; switch (sizeof(irq_regs)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (irq_regs)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 4: pscr_ret__ = ({ typeof(irq_regs) pfo_ret__; switch (sizeof(irq_regs)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (irq_regs)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 8: pscr_ret__ = ({ typeof(irq_regs) pfo_ret__; switch (sizeof(irq_regs)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (irq_regs)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (irq_regs)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; default: __bad_size_call_parameter(); break; } pscr_ret__; });
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct pt_regs *set_irq_regs(struct pt_regs *new_regs)
|
|
{
|
|
struct pt_regs *old_regs;
|
|
|
|
old_regs = get_irq_regs();
|
|
do { do { const void *__vpp_verify = (typeof((&(irq_regs)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(irq_regs)) { case 1: do { typedef typeof((irq_regs)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (new_regs); (void)pto_tmp__; } switch (sizeof((irq_regs))) { case 1: asm("mov" "b %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "qi" ((pto_T__)(new_regs))); break; case 2: asm("mov" "w %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "ri" ((pto_T__)(new_regs))); break; case 4: asm("mov" "l %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "ri" ((pto_T__)(new_regs))); break; case 8: asm("mov" "q %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "re" ((pto_T__)(new_regs))); break; default: __bad_percpu_size(); } } while (0);break; case 2: do { typedef typeof((irq_regs)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (new_regs); (void)pto_tmp__; } switch (sizeof((irq_regs))) { case 1: asm("mov" "b %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "qi" ((pto_T__)(new_regs))); break; case 2: asm("mov" "w %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "ri" ((pto_T__)(new_regs))); break; case 4: asm("mov" "l %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "ri" ((pto_T__)(new_regs))); break; case 8: asm("mov" "q %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "re" ((pto_T__)(new_regs))); break; default: __bad_percpu_size(); } } while (0);break; case 4: do { typedef typeof((irq_regs)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (new_regs); (void)pto_tmp__; } switch (sizeof((irq_regs))) { case 1: asm("mov" "b %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "qi" ((pto_T__)(new_regs))); break; case 2: asm("mov" "w %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "ri" ((pto_T__)(new_regs))); break; case 4: asm("mov" "l %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "ri" ((pto_T__)(new_regs))); break; case 8: asm("mov" "q %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "re" ((pto_T__)(new_regs))); break; default: __bad_percpu_size(); } } while (0);break; case 8: do { typedef typeof((irq_regs)) pto_T__; if (0) { pto_T__ pto_tmp__; pto_tmp__ = (new_regs); (void)pto_tmp__; } switch (sizeof((irq_regs))) { case 1: asm("mov" "b %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "qi" ((pto_T__)(new_regs))); break; case 2: asm("mov" "w %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "ri" ((pto_T__)(new_regs))); break; case 4: asm("mov" "l %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "ri" ((pto_T__)(new_regs))); break; case 8: asm("mov" "q %1,""%%""gs"":" "%" "0" : "+m" ((irq_regs)) : "re" ((pto_T__)(new_regs))); break; default: __bad_percpu_size(); } } while (0);break; default: __bad_size_call_parameter();break; } } while (0);
|
|
|
|
return old_regs;
|
|
}
|
|
# 29 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h" 2
|
|
|
|
struct seq_file;
|
|
struct module;
|
|
struct msi_msg;
|
|
# 75 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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),
|
|
};
|
|
# 118 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h"
|
|
enum {
|
|
IRQ_SET_MASK_OK = 0,
|
|
IRQ_SET_MASK_OK_NOCOPY,
|
|
IRQ_SET_MASK_OK_DONE,
|
|
};
|
|
|
|
struct msi_desc;
|
|
struct irq_domain;
|
|
# 150 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
# 185 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) bool irqd_is_setaffinity_pending(struct irq_data *d)
|
|
{
|
|
return d->state_use_accessors & IRQD_SETAFFINITY_PENDING;
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) bool irqd_affinity_was_set(struct irq_data *d)
|
|
{
|
|
return d->state_use_accessors & IRQD_AFFINITY_SET;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) u32 irqd_get_trigger_type(struct irq_data *d)
|
|
{
|
|
return d->state_use_accessors & IRQD_TRIGGER_MASK;
|
|
}
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function)) bool irqd_is_level_type(struct irq_data *d)
|
|
{
|
|
return d->state_use_accessors & IRQD_LEVEL;
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) bool irqd_irq_disabled(struct irq_data *d)
|
|
{
|
|
return d->state_use_accessors & IRQD_IRQ_DISABLED;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool irqd_irq_masked(struct irq_data *d)
|
|
{
|
|
return d->state_use_accessors & IRQD_IRQ_MASKED;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool irqd_irq_inprogress(struct irq_data *d)
|
|
{
|
|
return d->state_use_accessors & IRQD_IRQ_INPROGRESS;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void irqd_set_chained_irq_inprogress(struct irq_data *d)
|
|
{
|
|
d->state_use_accessors |= IRQD_IRQ_INPROGRESS;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) irq_hw_number_t irqd_to_hwirq(struct irq_data *d)
|
|
{
|
|
return d->hwirq;
|
|
}
|
|
# 329 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
void (*irq_compose_msi_msg)(struct irq_data *data, struct msi_msg *msg);
|
|
void (*irq_write_msi_msg)(struct irq_data *data, struct msi_msg *msg);
|
|
|
|
unsigned long flags;
|
|
};
|
|
# 381 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqdesc.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqdesc.h"
|
|
struct irq_affinity_notify;
|
|
struct proc_dir_entry;
|
|
struct module;
|
|
struct irq_desc;
|
|
struct irq_domain;
|
|
struct pt_regs;
|
|
# 49 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
cpumask_var_t pending_mask;
|
|
|
|
|
|
unsigned long threads_oneshot;
|
|
atomic_t threads_active;
|
|
wait_queue_head_t wait_for_threads;
|
|
|
|
unsigned int nr_actions;
|
|
unsigned int no_suspend_depth;
|
|
unsigned int force_resume_depth;
|
|
|
|
|
|
struct proc_dir_entry *dir;
|
|
|
|
int parent_irq;
|
|
struct module *owner;
|
|
const char *name;
|
|
} __attribute__((__aligned__(1 << (6))));
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) struct irq_data *irq_desc_get_irq_data(struct irq_desc *desc)
|
|
{
|
|
return &desc->irq_data;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct irq_chip *irq_desc_get_chip(struct irq_desc *desc)
|
|
{
|
|
return desc->irq_data.chip;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void *irq_desc_get_chip_data(struct irq_desc *desc)
|
|
{
|
|
return desc->irq_data.chip_data;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void *irq_desc_get_handler_data(struct irq_desc *desc)
|
|
{
|
|
return desc->irq_data.handler_data;
|
|
}
|
|
|
|
static 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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irqdesc.h"
|
|
static 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__((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__((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__((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__((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__((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);
|
|
}
|
|
# 393 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hw_irq.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hw_irq.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/profile.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/profile.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/errno.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/profile.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct proc_dir_entry;
|
|
struct pt_regs;
|
|
struct notifier_block;
|
|
|
|
|
|
void create_prof_cpu_mask(void);
|
|
int create_proc_profile(void);
|
|
# 34 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/profile.h"
|
|
enum profile_type {
|
|
PROFILE_TASK_EXIT,
|
|
PROFILE_MUNMAP
|
|
};
|
|
|
|
|
|
|
|
extern int prof_on __attribute__((__section__(".data..read_mostly")));
|
|
|
|
|
|
int profile_init(void);
|
|
int profile_setup(char *str);
|
|
void profile_tick(int type);
|
|
int setup_profiling_timer(unsigned int multiplier);
|
|
|
|
|
|
|
|
|
|
void profile_hits(int type, void *ip, unsigned int nr_hits);
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void profile_hit(int type, void *ip)
|
|
{
|
|
|
|
|
|
|
|
if (__builtin_expect(!!(prof_on == type), 0))
|
|
profile_hits(type, ip, 1);
|
|
}
|
|
|
|
struct task_struct;
|
|
struct mm_struct;
|
|
|
|
|
|
void profile_task_exit(struct task_struct * task);
|
|
|
|
|
|
|
|
|
|
int profile_handoff_task(struct task_struct * task);
|
|
|
|
|
|
void profile_munmap(unsigned long addr);
|
|
|
|
int task_handoff_register(struct notifier_block * n);
|
|
int task_handoff_unregister(struct notifier_block * n);
|
|
|
|
int profile_event_register(enum profile_type, struct notifier_block * n);
|
|
int profile_event_unregister(enum profile_type, struct notifier_block * n);
|
|
|
|
struct pt_regs;
|
|
# 22 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hw_irq.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/sections.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/sections.h" 1
|
|
# 28 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/sections.h"
|
|
extern char _text[], _stext[], _etext[];
|
|
extern char _data[], _sdata[], _edata[];
|
|
extern char __bss_start[], __bss_stop[];
|
|
extern char __init_begin[], __init_end[];
|
|
extern char _sinittext[], _einittext[];
|
|
extern char _end[];
|
|
extern char __per_cpu_load[], __per_cpu_start[], __per_cpu_end[];
|
|
extern char __kprobes_text_start[], __kprobes_text_end[];
|
|
extern char __entry_text_start[], __entry_text_end[];
|
|
extern char __start_rodata[], __end_rodata[];
|
|
|
|
|
|
extern char __ctors_start[], __ctors_end[];
|
|
|
|
extern __attribute__((externally_visible)) const void __nosave_begin, __nosave_end;
|
|
# 53 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/sections.h"
|
|
static inline __attribute__((no_instrument_function)) int arch_is_kernel_text(unsigned long addr)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int arch_is_kernel_data(unsigned long addr)
|
|
{
|
|
return 0;
|
|
}
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/sections.h" 2
|
|
|
|
|
|
extern char __brk_base[], __brk_limit[];
|
|
extern struct exception_table_entry __stop___ex_table[];
|
|
|
|
|
|
extern char __end_rodata_hpage_align[];
|
|
# 27 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hw_irq.h" 2
|
|
|
|
|
|
extern void apic_timer_interrupt(void);
|
|
extern void x86_platform_ipi(void);
|
|
extern void kvm_posted_intr_ipi(void);
|
|
extern void error_interrupt(void);
|
|
extern void irq_work_interrupt(void);
|
|
|
|
extern void spurious_interrupt(void);
|
|
extern void thermal_interrupt(void);
|
|
extern void reschedule_interrupt(void);
|
|
|
|
extern void invalidate_interrupt(void);
|
|
extern void invalidate_interrupt0(void);
|
|
extern void invalidate_interrupt1(void);
|
|
extern void invalidate_interrupt2(void);
|
|
extern void invalidate_interrupt3(void);
|
|
extern void invalidate_interrupt4(void);
|
|
extern void invalidate_interrupt5(void);
|
|
extern void invalidate_interrupt6(void);
|
|
extern void invalidate_interrupt7(void);
|
|
extern void invalidate_interrupt8(void);
|
|
extern void invalidate_interrupt9(void);
|
|
extern void invalidate_interrupt10(void);
|
|
extern void invalidate_interrupt11(void);
|
|
extern void invalidate_interrupt12(void);
|
|
extern void invalidate_interrupt13(void);
|
|
extern void invalidate_interrupt14(void);
|
|
extern void invalidate_interrupt15(void);
|
|
extern void invalidate_interrupt16(void);
|
|
extern void invalidate_interrupt17(void);
|
|
extern void invalidate_interrupt18(void);
|
|
extern void invalidate_interrupt19(void);
|
|
extern void invalidate_interrupt20(void);
|
|
extern void invalidate_interrupt21(void);
|
|
extern void invalidate_interrupt22(void);
|
|
extern void invalidate_interrupt23(void);
|
|
extern void invalidate_interrupt24(void);
|
|
extern void invalidate_interrupt25(void);
|
|
extern void invalidate_interrupt26(void);
|
|
extern void invalidate_interrupt27(void);
|
|
extern void invalidate_interrupt28(void);
|
|
extern void invalidate_interrupt29(void);
|
|
extern void invalidate_interrupt30(void);
|
|
extern void invalidate_interrupt31(void);
|
|
|
|
extern void irq_move_cleanup_interrupt(void);
|
|
extern void reboot_interrupt(void);
|
|
extern void threshold_interrupt(void);
|
|
|
|
extern void call_function_interrupt(void);
|
|
extern void call_function_single_interrupt(void);
|
|
|
|
|
|
|
|
extern void trace_apic_timer_interrupt(void);
|
|
extern void trace_x86_platform_ipi(void);
|
|
extern void trace_error_interrupt(void);
|
|
extern void trace_irq_work_interrupt(void);
|
|
extern void trace_spurious_interrupt(void);
|
|
extern void trace_thermal_interrupt(void);
|
|
extern void trace_reschedule_interrupt(void);
|
|
extern void trace_threshold_interrupt(void);
|
|
extern void trace_call_function_interrupt(void);
|
|
extern void trace_call_function_single_interrupt(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct irq_2_iommu {
|
|
struct intel_iommu *iommu;
|
|
u16 irte_index;
|
|
u16 sub_handle;
|
|
u8 irte_mask;
|
|
};
|
|
|
|
|
|
struct irq_2_irte {
|
|
u16 devid;
|
|
u16 index;
|
|
};
|
|
|
|
|
|
|
|
struct irq_data;
|
|
|
|
struct irq_cfg {
|
|
cpumask_var_t domain;
|
|
cpumask_var_t old_domain;
|
|
u8 vector;
|
|
u8 move_in_progress : 1;
|
|
|
|
u8 remapped : 1;
|
|
union {
|
|
struct irq_2_iommu irq_2_iommu;
|
|
struct irq_2_irte irq_2_irte;
|
|
};
|
|
|
|
union {
|
|
|
|
struct {
|
|
struct list_head irq_2_pin;
|
|
};
|
|
|
|
};
|
|
};
|
|
|
|
extern struct irq_cfg *irq_cfg(unsigned int irq);
|
|
extern struct irq_cfg *irqd_cfg(struct irq_data *irq_data);
|
|
extern struct irq_cfg *alloc_irq_and_cfg_at(unsigned int at, int node);
|
|
extern void lock_vector_lock(void);
|
|
extern void unlock_vector_lock(void);
|
|
extern int assign_irq_vector(int, struct irq_cfg *, const struct cpumask *);
|
|
extern void clear_irq_vector(int irq, struct irq_cfg *cfg);
|
|
extern void setup_vector_irq(int cpu);
|
|
|
|
extern void send_cleanup_vector(struct irq_cfg *);
|
|
extern void irq_complete_move(struct irq_cfg *cfg);
|
|
|
|
|
|
|
|
|
|
|
|
extern int apic_retrigger_irq(struct irq_data *data);
|
|
extern void apic_ack_edge(struct irq_data *data);
|
|
extern int apic_set_affinity(struct irq_data *data, const struct cpumask *mask,
|
|
unsigned int *dest_id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern atomic_t irq_err_count;
|
|
extern atomic_t irq_mis_count;
|
|
|
|
|
|
extern void eisa_set_level_irq(unsigned int irq);
|
|
|
|
|
|
extern __attribute__((externally_visible)) void smp_apic_timer_interrupt(struct pt_regs *);
|
|
extern __attribute__((externally_visible)) void smp_spurious_interrupt(struct pt_regs *);
|
|
extern __attribute__((externally_visible)) void smp_x86_platform_ipi(struct pt_regs *);
|
|
extern __attribute__((externally_visible)) void smp_error_interrupt(struct pt_regs *);
|
|
|
|
extern void smp_irq_move_cleanup_interrupt(void);
|
|
|
|
|
|
extern __attribute__((externally_visible)) void smp_reschedule_interrupt(struct pt_regs *);
|
|
extern __attribute__((externally_visible)) void smp_call_function_interrupt(struct pt_regs *);
|
|
extern __attribute__((externally_visible)) void smp_call_function_single_interrupt(struct pt_regs *);
|
|
extern __attribute__((externally_visible)) void smp_invalidate_interrupt(struct pt_regs *);
|
|
|
|
|
|
extern void (*__attribute__ ((__section__(".init.rodata"))) interrupt[0xef
|
|
- 0x20])(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef int vector_irq_t[256];
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(vector_irq_t) vector_irq;
|
|
# 398 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h" 2
|
|
# 409 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
|
|
void irq_move_irq(struct irq_data *data);
|
|
void irq_move_masked_irq(struct irq_data *data);
|
|
|
|
|
|
|
|
|
|
|
|
extern int no_irq_affinity;
|
|
|
|
|
|
|
|
|
|
static 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 int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg);
|
|
# 466 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h"
|
|
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__((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__((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__((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__((no_instrument_function)) void irq_set_status_flags(unsigned int irq, unsigned long set)
|
|
{
|
|
irq_modify_status(irq, 0, set);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void irq_set_noprobe(unsigned int irq)
|
|
{
|
|
irq_modify_status(irq, 0, IRQ_NOPROBE);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void irq_set_probe(unsigned int irq)
|
|
{
|
|
irq_modify_status(irq, IRQ_NOPROBE, 0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void irq_set_nothread(unsigned int irq)
|
|
{
|
|
irq_modify_status(irq, 0, IRQ_NOTHREAD);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void irq_set_thread(unsigned int irq)
|
|
{
|
|
irq_modify_status(irq, IRQ_NOTHREAD, 0);
|
|
}
|
|
|
|
static 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__((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__((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__((no_instrument_function)) struct irq_chip *irq_data_get_irq_chip(struct irq_data *d)
|
|
{
|
|
return d->chip;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void *irq_data_get_irq_chip_data(struct irq_data *d)
|
|
{
|
|
return d->chip_data;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void *irq_data_get_irq_handler_data(struct irq_data *d)
|
|
{
|
|
return d->handler_data;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) struct msi_desc *irq_data_get_msi(struct irq_data *d)
|
|
{
|
|
return d->msi_desc;
|
|
}
|
|
|
|
static 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);
|
|
# 641 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h"
|
|
void irq_free_descs(unsigned int irq, unsigned int cnt);
|
|
static inline __attribute__((no_instrument_function)) void irq_free_desc(unsigned int irq)
|
|
{
|
|
irq_free_descs(irq, 1);
|
|
}
|
|
|
|
|
|
unsigned int irq_alloc_hwirqs(int cnt, int node);
|
|
static inline __attribute__((no_instrument_function)) unsigned int irq_alloc_hwirq(int node)
|
|
{
|
|
return irq_alloc_hwirqs(1, node);
|
|
}
|
|
void irq_free_hwirqs(unsigned int from, int cnt);
|
|
static inline __attribute__((no_instrument_function)) void irq_free_hwirq(unsigned int irq)
|
|
{
|
|
return irq_free_hwirqs(irq, 1);
|
|
}
|
|
int arch_setup_hwirq(unsigned int irq, int node);
|
|
void arch_teardown_hwirq(unsigned int irq);
|
|
# 676 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
# 699 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
# 735 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq.h"
|
|
struct irq_chip_generic {
|
|
raw_spinlock_t lock;
|
|
void *reg_base;
|
|
u32 (*reg_readl)(void *addr);
|
|
void (*reg_writel)(u32 val, void *addr);
|
|
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];
|
|
};
|
|
# 766 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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,
|
|
IRQ_GC_BE_IO = 1 << 4,
|
|
};
|
|
# 783 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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__((no_instrument_function)) void irq_gc_lock(struct irq_chip_generic *gc)
|
|
{
|
|
_raw_spin_lock(&gc->lock);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void irq_gc_unlock(struct irq_chip_generic *gc)
|
|
{
|
|
_raw_spin_unlock(&gc->lock);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void irq_reg_writel(struct irq_chip_generic *gc,
|
|
u32 val, int reg_offset)
|
|
{
|
|
if (gc->reg_writel)
|
|
gc->reg_writel(val, gc->reg_base + reg_offset);
|
|
else
|
|
writel(val, gc->reg_base + reg_offset);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) u32 irq_reg_readl(struct irq_chip_generic *gc,
|
|
int reg_offset)
|
|
{
|
|
if (gc->reg_readl)
|
|
return gc->reg_readl(gc->reg_base + reg_offset);
|
|
else
|
|
return readl(gc->reg_base + reg_offset);
|
|
}
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hardirq.h" 2
|
|
|
|
typedef struct {
|
|
unsigned int __softirq_pending;
|
|
unsigned int __nmi_count;
|
|
|
|
unsigned int apic_timer_irqs;
|
|
unsigned int irq_spurious_count;
|
|
unsigned int icr_read_retry_count;
|
|
|
|
|
|
unsigned int kvm_posted_intr_ipis;
|
|
|
|
unsigned int x86_platform_ipis;
|
|
unsigned int apic_perf_irqs;
|
|
unsigned int apic_irq_work_irqs;
|
|
|
|
unsigned int irq_resched_count;
|
|
unsigned int irq_call_count;
|
|
|
|
|
|
|
|
|
|
unsigned int irq_tlb_count;
|
|
|
|
|
|
unsigned int irq_thermal_count;
|
|
|
|
|
|
unsigned int irq_threshold_count;
|
|
|
|
|
|
unsigned int irq_hv_callback_count;
|
|
|
|
} __attribute__((__aligned__((1 << (6))))) irq_cpustat_t;
|
|
|
|
extern __attribute__((section(".data..percpu" "..shared_aligned"))) __typeof__(irq_cpustat_t) irq_stat __attribute__((__aligned__((1 << (6)))));
|
|
# 55 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hardirq.h"
|
|
extern void ack_bad_irq(unsigned int irq);
|
|
|
|
extern u64 arch_irq_stat_cpu(unsigned int cpu);
|
|
|
|
|
|
extern u64 arch_irq_stat(void);
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hardirq.h" 2
|
|
|
|
|
|
extern void synchronize_irq(unsigned int irq);
|
|
extern void synchronize_hardirq(unsigned int irq);
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hardirq.h"
|
|
extern void rcu_nmi_enter(void);
|
|
extern void rcu_nmi_exit(void);
|
|
# 45 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hardirq.h"
|
|
extern void irq_enter(void);
|
|
# 60 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hardirq.h"
|
|
extern void irq_exit(void);
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h" 1
|
|
# 28 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
enum perf_type_id {
|
|
PERF_TYPE_HARDWARE = 0,
|
|
PERF_TYPE_SOFTWARE = 1,
|
|
PERF_TYPE_TRACEPOINT = 2,
|
|
PERF_TYPE_HW_CACHE = 3,
|
|
PERF_TYPE_RAW = 4,
|
|
PERF_TYPE_BREAKPOINT = 5,
|
|
|
|
PERF_TYPE_MAX,
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum perf_hw_id {
|
|
|
|
|
|
|
|
PERF_COUNT_HW_CPU_CYCLES = 0,
|
|
PERF_COUNT_HW_INSTRUCTIONS = 1,
|
|
PERF_COUNT_HW_CACHE_REFERENCES = 2,
|
|
PERF_COUNT_HW_CACHE_MISSES = 3,
|
|
PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
|
|
PERF_COUNT_HW_BRANCH_MISSES = 5,
|
|
PERF_COUNT_HW_BUS_CYCLES = 6,
|
|
PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
|
|
PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
|
|
PERF_COUNT_HW_REF_CPU_CYCLES = 9,
|
|
|
|
PERF_COUNT_HW_MAX,
|
|
};
|
|
# 69 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
enum perf_hw_cache_id {
|
|
PERF_COUNT_HW_CACHE_L1D = 0,
|
|
PERF_COUNT_HW_CACHE_L1I = 1,
|
|
PERF_COUNT_HW_CACHE_LL = 2,
|
|
PERF_COUNT_HW_CACHE_DTLB = 3,
|
|
PERF_COUNT_HW_CACHE_ITLB = 4,
|
|
PERF_COUNT_HW_CACHE_BPU = 5,
|
|
PERF_COUNT_HW_CACHE_NODE = 6,
|
|
|
|
PERF_COUNT_HW_CACHE_MAX,
|
|
};
|
|
|
|
enum perf_hw_cache_op_id {
|
|
PERF_COUNT_HW_CACHE_OP_READ = 0,
|
|
PERF_COUNT_HW_CACHE_OP_WRITE = 1,
|
|
PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
|
|
|
|
PERF_COUNT_HW_CACHE_OP_MAX,
|
|
};
|
|
|
|
enum perf_hw_cache_op_result_id {
|
|
PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
|
|
PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
|
|
|
|
PERF_COUNT_HW_CACHE_RESULT_MAX,
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum perf_sw_ids {
|
|
PERF_COUNT_SW_CPU_CLOCK = 0,
|
|
PERF_COUNT_SW_TASK_CLOCK = 1,
|
|
PERF_COUNT_SW_PAGE_FAULTS = 2,
|
|
PERF_COUNT_SW_CONTEXT_SWITCHES = 3,
|
|
PERF_COUNT_SW_CPU_MIGRATIONS = 4,
|
|
PERF_COUNT_SW_PAGE_FAULTS_MIN = 5,
|
|
PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,
|
|
PERF_COUNT_SW_ALIGNMENT_FAULTS = 7,
|
|
PERF_COUNT_SW_EMULATION_FAULTS = 8,
|
|
PERF_COUNT_SW_DUMMY = 9,
|
|
|
|
PERF_COUNT_SW_MAX,
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum perf_event_sample_format {
|
|
PERF_SAMPLE_IP = 1U << 0,
|
|
PERF_SAMPLE_TID = 1U << 1,
|
|
PERF_SAMPLE_TIME = 1U << 2,
|
|
PERF_SAMPLE_ADDR = 1U << 3,
|
|
PERF_SAMPLE_READ = 1U << 4,
|
|
PERF_SAMPLE_CALLCHAIN = 1U << 5,
|
|
PERF_SAMPLE_ID = 1U << 6,
|
|
PERF_SAMPLE_CPU = 1U << 7,
|
|
PERF_SAMPLE_PERIOD = 1U << 8,
|
|
PERF_SAMPLE_STREAM_ID = 1U << 9,
|
|
PERF_SAMPLE_RAW = 1U << 10,
|
|
PERF_SAMPLE_BRANCH_STACK = 1U << 11,
|
|
PERF_SAMPLE_REGS_USER = 1U << 12,
|
|
PERF_SAMPLE_STACK_USER = 1U << 13,
|
|
PERF_SAMPLE_WEIGHT = 1U << 14,
|
|
PERF_SAMPLE_DATA_SRC = 1U << 15,
|
|
PERF_SAMPLE_IDENTIFIER = 1U << 16,
|
|
PERF_SAMPLE_TRANSACTION = 1U << 17,
|
|
PERF_SAMPLE_REGS_INTR = 1U << 18,
|
|
|
|
PERF_SAMPLE_MAX = 1U << 19,
|
|
};
|
|
# 155 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
enum perf_branch_sample_type {
|
|
PERF_SAMPLE_BRANCH_USER = 1U << 0,
|
|
PERF_SAMPLE_BRANCH_KERNEL = 1U << 1,
|
|
PERF_SAMPLE_BRANCH_HV = 1U << 2,
|
|
|
|
PERF_SAMPLE_BRANCH_ANY = 1U << 3,
|
|
PERF_SAMPLE_BRANCH_ANY_CALL = 1U << 4,
|
|
PERF_SAMPLE_BRANCH_ANY_RETURN = 1U << 5,
|
|
PERF_SAMPLE_BRANCH_IND_CALL = 1U << 6,
|
|
PERF_SAMPLE_BRANCH_ABORT_TX = 1U << 7,
|
|
PERF_SAMPLE_BRANCH_IN_TX = 1U << 8,
|
|
PERF_SAMPLE_BRANCH_NO_TX = 1U << 9,
|
|
PERF_SAMPLE_BRANCH_COND = 1U << 10,
|
|
|
|
PERF_SAMPLE_BRANCH_MAX = 1U << 11,
|
|
};
|
|
# 180 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
enum perf_sample_regs_abi {
|
|
PERF_SAMPLE_REGS_ABI_NONE = 0,
|
|
PERF_SAMPLE_REGS_ABI_32 = 1,
|
|
PERF_SAMPLE_REGS_ABI_64 = 2,
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum {
|
|
PERF_TXN_ELISION = (1 << 0),
|
|
PERF_TXN_TRANSACTION = (1 << 1),
|
|
PERF_TXN_SYNC = (1 << 2),
|
|
PERF_TXN_ASYNC = (1 << 3),
|
|
PERF_TXN_RETRY = (1 << 4),
|
|
PERF_TXN_CONFLICT = (1 << 5),
|
|
PERF_TXN_CAPACITY_WRITE = (1 << 6),
|
|
PERF_TXN_CAPACITY_READ = (1 << 7),
|
|
|
|
PERF_TXN_MAX = (1 << 8),
|
|
|
|
|
|
|
|
PERF_TXN_ABORT_MASK = (0xffffffffULL << 32),
|
|
PERF_TXN_ABORT_SHIFT = 32,
|
|
};
|
|
# 228 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
enum perf_event_read_format {
|
|
PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0,
|
|
PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1,
|
|
PERF_FORMAT_ID = 1U << 2,
|
|
PERF_FORMAT_GROUP = 1U << 3,
|
|
|
|
PERF_FORMAT_MAX = 1U << 4,
|
|
};
|
|
# 247 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
struct perf_event_attr {
|
|
|
|
|
|
|
|
|
|
__u32 type;
|
|
|
|
|
|
|
|
|
|
__u32 size;
|
|
|
|
|
|
|
|
|
|
__u64 config;
|
|
|
|
union {
|
|
__u64 sample_period;
|
|
__u64 sample_freq;
|
|
};
|
|
|
|
__u64 sample_type;
|
|
__u64 read_format;
|
|
|
|
__u64 disabled : 1,
|
|
inherit : 1,
|
|
pinned : 1,
|
|
exclusive : 1,
|
|
exclude_user : 1,
|
|
exclude_kernel : 1,
|
|
exclude_hv : 1,
|
|
exclude_idle : 1,
|
|
mmap : 1,
|
|
comm : 1,
|
|
freq : 1,
|
|
inherit_stat : 1,
|
|
enable_on_exec : 1,
|
|
task : 1,
|
|
watermark : 1,
|
|
# 297 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
precise_ip : 2,
|
|
mmap_data : 1,
|
|
sample_id_all : 1,
|
|
|
|
exclude_host : 1,
|
|
exclude_guest : 1,
|
|
|
|
exclude_callchain_kernel : 1,
|
|
exclude_callchain_user : 1,
|
|
mmap2 : 1,
|
|
comm_exec : 1,
|
|
__reserved_1 : 39;
|
|
|
|
union {
|
|
__u32 wakeup_events;
|
|
__u32 wakeup_watermark;
|
|
};
|
|
|
|
__u32 bp_type;
|
|
union {
|
|
__u64 bp_addr;
|
|
__u64 config1;
|
|
};
|
|
union {
|
|
__u64 bp_len;
|
|
__u64 config2;
|
|
};
|
|
__u64 branch_sample_type;
|
|
|
|
|
|
|
|
|
|
|
|
__u64 sample_regs_user;
|
|
|
|
|
|
|
|
|
|
__u32 sample_stack_user;
|
|
|
|
|
|
__u32 __reserved_2;
|
|
# 347 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
__u64 sample_regs_intr;
|
|
};
|
|
# 364 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
enum perf_event_ioc_flags {
|
|
PERF_IOC_FLAG_GROUP = 1U << 0,
|
|
};
|
|
|
|
|
|
|
|
|
|
struct perf_event_mmap_page {
|
|
__u32 version;
|
|
__u32 compat_version;
|
|
# 410 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
__u32 lock;
|
|
__u32 index;
|
|
__s64 offset;
|
|
__u64 time_enabled;
|
|
__u64 time_running;
|
|
union {
|
|
__u64 capabilities;
|
|
struct {
|
|
__u64 cap_bit0 : 1,
|
|
cap_bit0_is_deprecated : 1,
|
|
|
|
cap_user_rdpmc : 1,
|
|
cap_user_time : 1,
|
|
cap_user_time_zero : 1,
|
|
cap_____res : 59;
|
|
};
|
|
};
|
|
# 437 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
__u16 pmc_width;
|
|
# 463 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
__u16 time_shift;
|
|
__u32 time_mult;
|
|
__u64 time_offset;
|
|
# 482 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
__u64 time_zero;
|
|
__u32 size;
|
|
|
|
|
|
|
|
|
|
|
|
__u8 __reserved[118*8+4];
|
|
# 504 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
__u64 data_head;
|
|
__u64 data_tail;
|
|
};
|
|
# 533 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
struct perf_event_header {
|
|
__u32 type;
|
|
__u16 misc;
|
|
__u16 size;
|
|
};
|
|
|
|
enum perf_event_type {
|
|
# 580 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
PERF_RECORD_MMAP = 1,
|
|
# 590 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
PERF_RECORD_LOST = 2,
|
|
# 601 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
PERF_RECORD_COMM = 3,
|
|
# 612 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
PERF_RECORD_EXIT = 4,
|
|
# 623 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
PERF_RECORD_THROTTLE = 5,
|
|
PERF_RECORD_UNTHROTTLE = 6,
|
|
# 635 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
PERF_RECORD_FORK = 7,
|
|
# 646 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
PERF_RECORD_READ = 8,
|
|
# 704 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
PERF_RECORD_SAMPLE = 9,
|
|
# 726 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
PERF_RECORD_MMAP2 = 10,
|
|
|
|
PERF_RECORD_MAX,
|
|
};
|
|
|
|
|
|
|
|
enum perf_callchain_context {
|
|
PERF_CONTEXT_HV = (__u64)-32,
|
|
PERF_CONTEXT_KERNEL = (__u64)-128,
|
|
PERF_CONTEXT_USER = (__u64)-512,
|
|
|
|
PERF_CONTEXT_GUEST = (__u64)-2048,
|
|
PERF_CONTEXT_GUEST_KERNEL = (__u64)-2176,
|
|
PERF_CONTEXT_GUEST_USER = (__u64)-2560,
|
|
|
|
PERF_CONTEXT_MAX = (__u64)-4095,
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
union perf_mem_data_src {
|
|
__u64 val;
|
|
struct {
|
|
__u64 mem_op:5,
|
|
mem_lvl:14,
|
|
mem_snoop:5,
|
|
mem_lock:2,
|
|
mem_dtlb:7,
|
|
mem_rsvd:31;
|
|
};
|
|
};
|
|
# 827 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/perf_event.h"
|
|
struct perf_branch_entry {
|
|
__u64 from;
|
|
__u64 to;
|
|
__u64 mispred:1,
|
|
predicted:1,
|
|
in_tx:1,
|
|
abort:1,
|
|
reserved:60;
|
|
};
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/perf_event.h" 1
|
|
# 85 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/perf_event.h"
|
|
union cpuid10_eax {
|
|
struct {
|
|
unsigned int version_id:8;
|
|
unsigned int num_counters:8;
|
|
unsigned int bit_width:8;
|
|
unsigned int mask_length:8;
|
|
} split;
|
|
unsigned int full;
|
|
};
|
|
|
|
union cpuid10_ebx {
|
|
struct {
|
|
unsigned int no_unhalted_core_cycles:1;
|
|
unsigned int no_instructions_retired:1;
|
|
unsigned int no_unhalted_reference_cycles:1;
|
|
unsigned int no_llc_reference:1;
|
|
unsigned int no_llc_misses:1;
|
|
unsigned int no_branch_instruction_retired:1;
|
|
unsigned int no_branch_misses_retired:1;
|
|
} split;
|
|
unsigned int full;
|
|
};
|
|
|
|
union cpuid10_edx {
|
|
struct {
|
|
unsigned int num_counters_fixed:5;
|
|
unsigned int bit_width_fixed:8;
|
|
unsigned int reserved:19;
|
|
} split;
|
|
unsigned int full;
|
|
};
|
|
|
|
struct x86_pmu_capability {
|
|
int version;
|
|
int num_counters_gp;
|
|
int num_counters_fixed;
|
|
int bit_width_gp;
|
|
int bit_width_fixed;
|
|
unsigned int events_mask;
|
|
int events_mask_len;
|
|
};
|
|
# 213 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/perf_event.h"
|
|
extern u32 get_ibs_caps(void);
|
|
|
|
|
|
|
|
|
|
|
|
extern void perf_events_lapic_init(void);
|
|
# 233 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/perf_event.h"
|
|
struct pt_regs;
|
|
extern unsigned long perf_instruction_pointer(struct pt_regs *regs);
|
|
extern unsigned long perf_misc_flags(struct pt_regs *regs);
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/stacktrace.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/stacktrace.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/uaccess.h" 1
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/uaccess.h"
|
|
static inline __attribute__((no_instrument_function)) void pagefault_disable(void)
|
|
{
|
|
__preempt_count_add(1);
|
|
|
|
|
|
|
|
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pagefault_enable(void)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
__asm__ __volatile__("": : :"memory");
|
|
__preempt_count_sub(1);
|
|
|
|
|
|
|
|
}
|
|
# 95 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/uaccess.h"
|
|
extern long probe_kernel_read(void *dst, const void *src, size_t size);
|
|
extern long __probe_kernel_read(void *dst, const void *src, size_t size);
|
|
# 107 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/uaccess.h"
|
|
extern long __attribute__((no_instrument_function)) probe_kernel_write(void *dst, const void *src, size_t size);
|
|
extern long __attribute__((no_instrument_function)) __probe_kernel_write(void *dst, const void *src, size_t size);
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/stacktrace.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/sched.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched/prio.h" 1
|
|
# 47 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched/prio.h"
|
|
static inline __attribute__((no_instrument_function)) long nice_to_rlimit(long nice)
|
|
{
|
|
return (19 - nice + 1);
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) long rlimit_to_nice(long prio)
|
|
{
|
|
return (19 - prio + 1);
|
|
}
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
|
|
|
|
struct sched_param {
|
|
int sched_priority;
|
|
};
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/param.h" 1
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/plist.h" 1
|
|
# 81 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/plist.h"
|
|
static inline __attribute__((no_instrument_function)) void
|
|
plist_head_init(struct plist_head *head)
|
|
{
|
|
INIT_LIST_HEAD(&head->node_list);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/plist.h"
|
|
static inline __attribute__((no_instrument_function)) int plist_head_empty(const struct plist_head *head)
|
|
{
|
|
return list_empty(&head->node_list);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int plist_node_empty(const struct plist_node *node)
|
|
{
|
|
return list_empty(&node->node_list);
|
|
}
|
|
# 282 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/plist.h"
|
|
static 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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
# 32 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cputime.h" 1
|
|
|
|
|
|
|
|
# 1 "arch/x86/include/generated/asm/cputime.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/cputime.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/cputime_jiffies.h" 1
|
|
|
|
|
|
|
|
typedef unsigned long cputime_t;
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/cputime_jiffies.h"
|
|
typedef u64 cputime64_t;
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/cputime.h" 2
|
|
# 1 "arch/x86/include/generated/asm/cputime.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cputime.h" 2
|
|
# 33 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/shm.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/shm.h" 1
|
|
# 26 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/shmbuf.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/shmbuf.h" 1
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/asm-generic/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;
|
|
__kernel_ulong_t shm_nattch;
|
|
__kernel_ulong_t __unused4;
|
|
__kernel_ulong_t __unused5;
|
|
};
|
|
|
|
struct shminfo64 {
|
|
__kernel_ulong_t shmmax;
|
|
__kernel_ulong_t shmmin;
|
|
__kernel_ulong_t shmmni;
|
|
__kernel_ulong_t shmseg;
|
|
__kernel_ulong_t shmall;
|
|
__kernel_ulong_t __unused1;
|
|
__kernel_ulong_t __unused2;
|
|
__kernel_ulong_t __unused3;
|
|
__kernel_ulong_t __unused4;
|
|
};
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/shmbuf.h" 2
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/shm.h" 2
|
|
# 62 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/shm.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/shmparam.h" 1
|
|
# 8 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/proportions.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seccomp.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/seccomp.h" 1
|
|
# 47 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/seccomp.h"
|
|
struct seccomp_data {
|
|
int nr;
|
|
__u32 arch;
|
|
__u64 instruction_pointer;
|
|
__u64 args[6];
|
|
};
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seccomp.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/seccomp.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/seccomp_64.h" 1
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ia32_unistd.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ia32_unistd.h"
|
|
# 1 "arch/x86/include/generated/asm/unistd_32_ia32.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ia32_unistd.h" 2
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/seccomp_64.h" 2
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/seccomp.h" 2
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seccomp.h" 2
|
|
|
|
struct seccomp_filter;
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seccomp.h"
|
|
struct seccomp {
|
|
int mode;
|
|
struct seccomp_filter *filter;
|
|
};
|
|
|
|
|
|
extern int __secure_computing(void);
|
|
static inline __attribute__((no_instrument_function)) int secure_computing(void)
|
|
{
|
|
if (__builtin_expect(!!(test_ti_thread_flag(current_thread_info(), 8)), 0))
|
|
return __secure_computing();
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
extern u32 seccomp_phase1(struct seccomp_data *sd);
|
|
int seccomp_phase2(u32 phase1_result);
|
|
|
|
|
|
|
|
|
|
extern long prctl_get_seccomp(void);
|
|
extern long prctl_set_seccomp(unsigned long, char *);
|
|
|
|
static inline __attribute__((no_instrument_function)) int seccomp_mode(struct seccomp *s)
|
|
{
|
|
return s->mode;
|
|
}
|
|
# 86 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/seccomp.h"
|
|
extern void put_seccomp_filter(struct task_struct *tsk);
|
|
extern void get_seccomp_filter(struct task_struct *tsk);
|
|
# 45 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rtmutex.h" 1
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rtmutex.h"
|
|
extern int max_lock_depth;
|
|
# 29 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) int rt_mutex_debug_check_no_locks_freed(const void *from,
|
|
unsigned long len)
|
|
{
|
|
return 0;
|
|
}
|
|
# 84 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/rtmutex.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hrtimer.h" 1
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hrtimer.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/timerqueue.h"
|
|
static inline __attribute__((no_instrument_function))
|
|
struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head)
|
|
{
|
|
return head->next;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void timerqueue_init(struct timerqueue_node *node)
|
|
{
|
|
((&node->node)->__rb_parent_color = (unsigned long)(&node->node));
|
|
}
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
int start_pid;
|
|
void *start_site;
|
|
char start_comm[16];
|
|
|
|
};
|
|
# 128 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hrtimer.h"
|
|
struct hrtimer_sleeper {
|
|
struct hrtimer timer;
|
|
struct task_struct *task;
|
|
};
|
|
# 145 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hrtimer.h"
|
|
struct hrtimer_cpu_base {
|
|
raw_spinlock_t lock;
|
|
unsigned int cpu;
|
|
unsigned int active_bases;
|
|
unsigned int clock_was_set;
|
|
|
|
ktime_t expires_next;
|
|
int hres_active;
|
|
int hang_detected;
|
|
unsigned long nr_events;
|
|
unsigned long nr_retries;
|
|
unsigned long nr_hangs;
|
|
ktime_t max_hang_time;
|
|
|
|
struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES];
|
|
};
|
|
|
|
static 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__((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__((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__((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__((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__((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__((no_instrument_function)) ktime_t hrtimer_get_expires(const struct hrtimer *timer)
|
|
{
|
|
return timer->node.expires;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) ktime_t hrtimer_get_softexpires(const struct hrtimer *timer)
|
|
{
|
|
return timer->_softexpires;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) s64 hrtimer_get_expires_tv64(const struct hrtimer *timer)
|
|
{
|
|
return timer->node.expires.tv64;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) s64 hrtimer_get_softexpires_tv64(const struct hrtimer *timer)
|
|
{
|
|
return timer->_softexpires.tv64;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) s64 hrtimer_get_expires_ns(const struct hrtimer *timer)
|
|
{
|
|
return ((timer->node.expires).tv64);
|
|
}
|
|
|
|
static 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 }; });
|
|
}
|
|
|
|
|
|
struct clock_event_device;
|
|
|
|
extern void hrtimer_interrupt(struct clock_event_device *dev);
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) ktime_t hrtimer_cb_get_time(struct hrtimer *timer)
|
|
{
|
|
return timer->base->get_time();
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int hrtimer_is_hres_active(struct hrtimer *timer)
|
|
{
|
|
return timer->base->cpu_base->hres_active;
|
|
}
|
|
|
|
extern void hrtimer_peek_ahead_timers(void);
|
|
# 294 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hrtimer.h"
|
|
extern void clock_was_set_delayed(void);
|
|
# 321 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/hrtimer.h"
|
|
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__((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__((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__((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__((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__((no_instrument_function)) int hrtimer_active(const struct hrtimer *timer)
|
|
{
|
|
return timer->state != 0x00;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int hrtimer_is_queued(struct hrtimer *timer)
|
|
{
|
|
return timer->state & 0x01;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((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);
|
|
# 54 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/task_io_accounting.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/task_io_accounting.h"
|
|
struct task_io_accounting {
|
|
|
|
|
|
u64 rchar;
|
|
|
|
u64 wchar;
|
|
|
|
u64 syscr;
|
|
|
|
u64 syscw;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u64 read_bytes;
|
|
|
|
|
|
|
|
|
|
|
|
u64 write_bytes;
|
|
# 43 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/task_io_accounting.h"
|
|
u64 cancelled_write_bytes;
|
|
|
|
};
|
|
# 55 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/latencytop.h" 1
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/latencytop.h"
|
|
struct task_struct;
|
|
# 42 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/latencytop.h"
|
|
static inline __attribute__((no_instrument_function)) void
|
|
account_scheduler_latency(struct task_struct *task, int usecs, int inter)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void clear_all_latency_tracing(struct task_struct *p)
|
|
{
|
|
}
|
|
# 56 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cred.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cred.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/selinux.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/selinux.h"
|
|
struct selinux_audit_rule;
|
|
struct audit_context;
|
|
struct kern_ipc_perm;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool selinux_is_enabled(void);
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cred.h"
|
|
static inline __attribute__((no_instrument_function)) struct group_info *get_group_info(struct group_info *gi)
|
|
{
|
|
atomic_inc(&gi->usage);
|
|
return gi;
|
|
}
|
|
# 65 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
unsigned char jit_keyring;
|
|
|
|
struct key *session_keyring;
|
|
struct key *process_keyring;
|
|
struct key *thread_keyring;
|
|
struct key *request_key_auth;
|
|
|
|
|
|
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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cred.h"
|
|
static inline __attribute__((no_instrument_function)) void validate_creds(const struct cred *cred)
|
|
{
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void validate_creds_for_do_exit(struct task_struct *tsk)
|
|
{
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void validate_process_creds(void)
|
|
{
|
|
}
|
|
# 207 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cred.h"
|
|
static inline __attribute__((no_instrument_function)) struct cred *get_new_cred(struct cred *cred)
|
|
{
|
|
atomic_inc(&cred->usage);
|
|
return cred;
|
|
}
|
|
# 226 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cred.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cred.h"
|
|
static inline __attribute__((no_instrument_function)) void put_cred(const struct cred *_cred)
|
|
{
|
|
struct cred *cred = (struct cred *) _cred;
|
|
|
|
validate_creds(cred);
|
|
if (atomic_dec_and_test(&(cred)->usage))
|
|
__put_cred(cred);
|
|
}
|
|
# 353 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cred.h"
|
|
extern struct user_namespace init_user_ns;
|
|
# 57 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/magic.h" 1
|
|
# 61 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h" 2
|
|
# 110 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
extern unsigned long avenrun[];
|
|
extern void get_avenrun(unsigned long *loads, unsigned long offset, int shift);
|
|
# 166 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
|
|
struct task_migration_notifier {
|
|
struct task_struct *task;
|
|
int from_cpu;
|
|
int to_cpu;
|
|
};
|
|
extern void register_task_migration_notifier(struct notifier_block *n);
|
|
|
|
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);
|
|
# 229 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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)];
|
|
# 325 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
|
|
extern void nohz_balance_enter_idle(int cpu);
|
|
extern void set_cpu_sd_state_idle(void);
|
|
extern int get_nohz_timer_target(int pinned);
|
|
# 358 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
extern void show_state_filter(unsigned long state_filter);
|
|
|
|
static 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);
|
|
|
|
|
|
extern void touch_softlockup_watchdog(void);
|
|
extern void touch_softlockup_watchdog_sync(void);
|
|
extern void touch_all_softlockup_watchdogs(void);
|
|
extern int proc_dowatchdog_thresh(struct ctl_table *table, int write,
|
|
void *buffer,
|
|
size_t *lenp, loff_t *ppos);
|
|
extern unsigned int softlockup_panic;
|
|
void lockup_detector_init(void);
|
|
# 409 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
void reset_hung_task_detector(void);
|
|
# 420 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
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);
|
|
# 459 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
extern void set_dumpable(struct mm_struct *mm, int value);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int __get_dumpable(unsigned long mm_flags)
|
|
{
|
|
return mm_flags & ((1 << 2) - 1);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int get_dumpable(struct mm_struct *mm)
|
|
{
|
|
return __get_dumpable(mm->flags);
|
|
}
|
|
# 508 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
struct sighand_struct {
|
|
atomic_t count;
|
|
struct k_sigaction action[64];
|
|
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;
|
|
};
|
|
# 537 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
struct cputime {
|
|
cputime_t utime;
|
|
cputime_t stime;
|
|
};
|
|
# 556 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
struct task_cputime {
|
|
cputime_t utime;
|
|
cputime_t stime;
|
|
unsigned long long sum_exec_runtime;
|
|
};
|
|
# 598 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
struct thread_group_cputimer {
|
|
struct task_cputime cputime;
|
|
int running;
|
|
raw_spinlock_t lock;
|
|
};
|
|
|
|
|
|
struct autogroup;
|
|
# 614 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
# 651 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
|
|
struct autogroup *autogroup;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
# 727 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
struct rlimit rlim[16];
|
|
|
|
|
|
struct pacct_struct pacct;
|
|
|
|
|
|
struct taskstats *stats;
|
|
|
|
|
|
unsigned audit_tty;
|
|
unsigned audit_tty_log_passwd;
|
|
struct tty_audit_buf *tty_audit_buf;
|
|
# 750 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
|
|
};
|
|
# 780 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static 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_t fanotify_listeners;
|
|
|
|
|
|
atomic_long_t epoll_watches;
|
|
|
|
|
|
|
|
unsigned long mq_bytes;
|
|
|
|
unsigned long locked_shm;
|
|
|
|
|
|
struct key *uid_keyring;
|
|
struct key *session_keyring;
|
|
|
|
|
|
|
|
struct hlist_node uidhash_node;
|
|
kuid_t uid;
|
|
|
|
|
|
atomic_long_t locked_vm;
|
|
|
|
};
|
|
|
|
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;
|
|
|
|
|
|
struct sched_info {
|
|
|
|
unsigned long pcount;
|
|
unsigned long long run_delay;
|
|
|
|
|
|
unsigned long long last_arrival,
|
|
last_queued;
|
|
};
|
|
|
|
|
|
|
|
struct task_delay_info {
|
|
spinlock_t lock;
|
|
unsigned int flags;
|
|
# 866 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
u64 blkio_start;
|
|
u64 blkio_delay;
|
|
u64 swapin_delay;
|
|
u32 blkio_count;
|
|
|
|
u32 swapin_count;
|
|
|
|
|
|
u64 freepages_start;
|
|
u64 freepages_delay;
|
|
u32 freepages_count;
|
|
};
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int sched_info_on(void)
|
|
{
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
enum cpu_idle_type {
|
|
CPU_IDLE,
|
|
CPU_NOT_IDLE,
|
|
CPU_NEWLY_IDLE,
|
|
CPU_MAX_IDLE_TYPES
|
|
};
|
|
# 925 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) int cpu_smt_flags(void)
|
|
{
|
|
return 0x0080 | 0x0200;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int cpu_core_flags(void)
|
|
{
|
|
return 0x0200;
|
|
}
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int cpu_numa_flags(void)
|
|
{
|
|
return 0x4000;
|
|
}
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
unsigned int lb_count[CPU_MAX_IDLE_TYPES];
|
|
unsigned int lb_failed[CPU_MAX_IDLE_TYPES];
|
|
unsigned int lb_balanced[CPU_MAX_IDLE_TYPES];
|
|
unsigned int lb_imbalance[CPU_MAX_IDLE_TYPES];
|
|
unsigned int lb_gained[CPU_MAX_IDLE_TYPES];
|
|
unsigned int lb_hot_gained[CPU_MAX_IDLE_TYPES];
|
|
unsigned int lb_nobusyg[CPU_MAX_IDLE_TYPES];
|
|
unsigned int lb_nobusyq[CPU_MAX_IDLE_TYPES];
|
|
|
|
|
|
unsigned int alb_count;
|
|
unsigned int alb_failed;
|
|
unsigned int alb_pushed;
|
|
|
|
|
|
unsigned int sbe_count;
|
|
unsigned int sbe_balanced;
|
|
unsigned int sbe_pushed;
|
|
|
|
|
|
unsigned int sbf_count;
|
|
unsigned int sbf_balanced;
|
|
unsigned int sbf_pushed;
|
|
|
|
|
|
unsigned int ttwu_wake_remote;
|
|
unsigned int ttwu_move_affine;
|
|
unsigned int ttwu_move_balance;
|
|
|
|
|
|
char *name;
|
|
|
|
union {
|
|
void *private;
|
|
struct callback_head rcu;
|
|
};
|
|
|
|
unsigned int span_weight;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long span[0];
|
|
};
|
|
|
|
static 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);
|
|
# 1102 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
struct io_context;
|
|
|
|
|
|
|
|
|
|
|
|
static 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;
|
|
};
|
|
|
|
|
|
struct sched_statistics {
|
|
u64 wait_start;
|
|
u64 wait_max;
|
|
u64 wait_count;
|
|
u64 wait_sum;
|
|
u64 iowait_count;
|
|
u64 iowait_sum;
|
|
|
|
u64 sleep_start;
|
|
u64 sleep_max;
|
|
s64 sum_sleep_runtime;
|
|
|
|
u64 block_start;
|
|
u64 block_max;
|
|
u64 exec_max;
|
|
u64 slice_max;
|
|
|
|
u64 nr_migrations_cold;
|
|
u64 nr_failed_migrations_affine;
|
|
u64 nr_failed_migrations_running;
|
|
u64 nr_failed_migrations_hot;
|
|
u64 nr_forced_migrations;
|
|
|
|
u64 nr_wakeups;
|
|
u64 nr_wakeups_sync;
|
|
u64 nr_wakeups_migrate;
|
|
u64 nr_wakeups_local;
|
|
u64 nr_wakeups_remote;
|
|
u64 nr_wakeups_affine;
|
|
u64 nr_wakeups_affine_attempts;
|
|
u64 nr_wakeups_passive;
|
|
u64 nr_wakeups_idle;
|
|
};
|
|
|
|
|
|
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;
|
|
|
|
|
|
struct sched_statistics statistics;
|
|
|
|
|
|
|
|
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;
|
|
# 1257 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
|
|
|
|
struct hlist_head preempt_notifiers;
|
|
|
|
|
|
|
|
unsigned int btrace_seq;
|
|
|
|
|
|
unsigned int policy;
|
|
int nr_cpus_allowed;
|
|
cpumask_t cpus_allowed;
|
|
# 1339 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
struct sched_info sched_info;
|
|
|
|
|
|
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)];
|
|
|
|
struct task_rss_stat rss_stat;
|
|
|
|
|
|
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 memcg_kmem_skip_account:1;
|
|
|
|
|
|
unsigned long atomic_flags;
|
|
|
|
pid_t pid;
|
|
pid_t tgid;
|
|
|
|
|
|
|
|
unsigned long stack_canary;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
# 1433 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
|
|
|
|
unsigned long last_switch_count;
|
|
|
|
|
|
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;
|
|
|
|
kuid_t loginuid;
|
|
unsigned int sessionid;
|
|
|
|
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;
|
|
# 1539 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
u64 acct_rss_mem1;
|
|
u64 acct_vm_mem1;
|
|
cputime_t acct_timexpd;
|
|
|
|
|
|
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 compat_robust_list_head *compat_robust_list;
|
|
|
|
struct list_head pi_state_list;
|
|
struct futex_pi_state *pi_state_cache;
|
|
|
|
|
|
struct perf_event_context *perf_event_ctxp[perf_nr_task_contexts];
|
|
struct mutex perf_event_mutex;
|
|
struct list_head perf_event_list;
|
|
|
|
|
|
|
|
|
|
|
|
struct mempolicy *mempolicy;
|
|
short il_next;
|
|
short pref_node_fork;
|
|
|
|
|
|
int numa_scan_seq;
|
|
unsigned int numa_scan_period;
|
|
unsigned int numa_scan_period_max;
|
|
int numa_preferred_nid;
|
|
unsigned long numa_migrate_retry;
|
|
u64 node_stamp;
|
|
u64 last_task_numa_placement;
|
|
u64 last_sum_exec_runtime;
|
|
struct callback_head numa_work;
|
|
|
|
struct list_head numa_entry;
|
|
struct numa_group *numa_group;
|
|
# 1625 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
unsigned long *numa_faults;
|
|
unsigned long total_numa_faults;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long numa_faults_locality[2];
|
|
|
|
unsigned long numa_pages_migrated;
|
|
|
|
|
|
struct callback_head rcu;
|
|
|
|
|
|
|
|
|
|
struct pipe_inode_info *splice_pipe;
|
|
|
|
struct page_frag task_frag;
|
|
|
|
|
|
struct task_delay_info *delays;
|
|
# 1658 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
int nr_dirtied;
|
|
int nr_dirtied_pause;
|
|
unsigned long dirty_paused_when;
|
|
# 1670 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
unsigned long timer_slack_ns;
|
|
unsigned long default_timer_slack_ns;
|
|
|
|
|
|
|
|
int curr_ret_stack;
|
|
|
|
struct ftrace_ret_stack *ret_stack;
|
|
|
|
unsigned long long ftrace_timestamp;
|
|
|
|
|
|
|
|
|
|
atomic_t trace_overrun;
|
|
|
|
atomic_t tracing_graph_pause;
|
|
|
|
|
|
|
|
unsigned long trace;
|
|
|
|
unsigned long trace_recursion;
|
|
|
|
|
|
struct memcg_oom_info {
|
|
struct mem_cgroup *memcg;
|
|
gfp_t gfp_mask;
|
|
int order;
|
|
unsigned int may_oom:1;
|
|
} memcg_oom;
|
|
|
|
|
|
struct uprobe_task *utask;
|
|
|
|
|
|
unsigned int sequential_io;
|
|
unsigned int sequential_io_avg;
|
|
|
|
|
|
|
|
|
|
};
|
|
# 1723 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
extern void task_numa_fault(int last_node, int node, int pages, int flags);
|
|
extern pid_t task_numa_group_id(struct task_struct *p);
|
|
extern void set_numabalancing_state(bool enabled);
|
|
extern void task_numa_free(struct task_struct *p);
|
|
extern bool should_numa_migrate_memory(struct task_struct *p, struct page *page,
|
|
int src_nid, int dst_cpu);
|
|
# 1751 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) struct pid *task_pid(struct task_struct *task)
|
|
{
|
|
return task->pids[PIDTYPE_PID].pid;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct pid *task_tgid(struct task_struct *task)
|
|
{
|
|
return task->group_leader->pids[PIDTYPE_PID].pid;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) struct pid *task_pgrp(struct task_struct *task)
|
|
{
|
|
return task->group_leader->pids[PIDTYPE_PGID].pid;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct pid *task_session(struct task_struct *task)
|
|
{
|
|
return task->group_leader->pids[PIDTYPE_SID].pid;
|
|
}
|
|
|
|
struct pid_namespace;
|
|
# 1791 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) pid_t task_pid_nr(struct task_struct *tsk)
|
|
{
|
|
return tsk->pid;
|
|
}
|
|
|
|
static 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__((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__((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__((no_instrument_function)) pid_t task_tgid_vnr(struct task_struct *tsk)
|
|
{
|
|
return pid_vnr(task_tgid(tsk));
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int pid_alive(const struct task_struct *p);
|
|
static 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)) *)(*({ __attribute__((unused)) typeof((tsk->real_parent)) __var = ( typeof((tsk->real_parent))) 0; (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__((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__((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__((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__((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__((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__((no_instrument_function)) pid_t task_pgrp_nr(struct task_struct *tsk)
|
|
{
|
|
return task_pgrp_nr_ns(tsk, &init_pid_ns);
|
|
}
|
|
# 1881 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) int pid_alive(const struct task_struct *p)
|
|
{
|
|
return p->pids[PIDTYPE_PID].pid != ((void *)0);
|
|
}
|
|
# 1894 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static 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__((no_instrument_function)) void put_task_struct(struct task_struct *t)
|
|
{
|
|
if (atomic_dec_and_test(&t->usage))
|
|
__put_task_struct(t);
|
|
}
|
|
# 1919 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static 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__((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__((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);
|
|
# 2005 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) gfp_t memalloc_noio_flags(gfp_t flags)
|
|
{
|
|
if (__builtin_expect(!!(get_current()->flags & 0x00080000), 0))
|
|
flags &= ~((( gfp_t)0x40u) | (( gfp_t)0x80u));
|
|
return flags;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned int memalloc_noio_save(void)
|
|
{
|
|
unsigned int flags = get_current()->flags & 0x00080000;
|
|
get_current()->flags |= 0x00080000;
|
|
return flags;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void memalloc_noio_restore(unsigned int flags)
|
|
{
|
|
get_current()->flags = (get_current()->flags & ~0x00080000) | flags;
|
|
}
|
|
# 2040 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) bool task_no_new_privs(struct task_struct *p) { return (__builtin_constant_p((0)) ? constant_test_bit((0), (&p->atomic_flags)) : variable_test_bit((0), (&p->atomic_flags))); }
|
|
static inline __attribute__((no_instrument_function)) void task_set_no_new_privs(struct task_struct *p) { set_bit(0, &p->atomic_flags); }
|
|
|
|
static inline __attribute__((no_instrument_function)) bool task_spread_page(struct task_struct *p) { return (__builtin_constant_p((1)) ? constant_test_bit((1), (&p->atomic_flags)) : variable_test_bit((1), (&p->atomic_flags))); }
|
|
static inline __attribute__((no_instrument_function)) void task_set_spread_page(struct task_struct *p) { set_bit(1, &p->atomic_flags); }
|
|
static inline __attribute__((no_instrument_function)) void task_clear_spread_page(struct task_struct *p) { clear_bit(1, &p->atomic_flags); }
|
|
|
|
static inline __attribute__((no_instrument_function)) bool task_spread_slab(struct task_struct *p) { return (__builtin_constant_p((2)) ? constant_test_bit((2), (&p->atomic_flags)) : variable_test_bit((2), (&p->atomic_flags))); }
|
|
static inline __attribute__((no_instrument_function)) void task_set_spread_slab(struct task_struct *p) { set_bit(2, &p->atomic_flags); }
|
|
static inline __attribute__((no_instrument_function)) void task_clear_spread_slab(struct task_struct *p) { clear_bit(2, &p->atomic_flags); }
|
|
# 2075 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) void rcu_copy_process(struct task_struct *p)
|
|
{
|
|
# 2094 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
}
|
|
|
|
static 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 int cpuset_cpumask_can_shrink(const struct cpumask *cur,
|
|
const struct cpumask *trial);
|
|
extern int task_can_attach(struct task_struct *p,
|
|
const struct cpumask *cs_cpus_allowed);
|
|
|
|
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);
|
|
# 2128 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
void calc_load_enter_idle(void);
|
|
void calc_load_exit_idle(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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);
|
|
}
|
|
# 2150 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 running_clock(void);
|
|
extern u64 sched_clock_cpu(int cpu);
|
|
|
|
|
|
extern void sched_clock_init(void);
|
|
# 2181 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
extern int sched_clock_stable(void);
|
|
extern void set_sched_clock_stable(void);
|
|
extern void clear_sched_clock_stable(void);
|
|
|
|
extern void sched_clock_tick(void);
|
|
extern void sched_clock_idle_sleep_event(void);
|
|
extern void sched_clock_idle_wakeup_event(u64 delta_ns);
|
|
# 2199 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) void enable_sched_clock_irqtime(void) {}
|
|
static 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);
|
|
|
|
|
|
extern void idle_task_exit(void);
|
|
|
|
|
|
|
|
|
|
|
|
extern void wake_up_nohz_cpu(int cpu);
|
|
# 2232 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) bool sched_can_stop_tick(void) { return false; }
|
|
|
|
|
|
|
|
extern void sched_autogroup_create_attach(struct task_struct *p);
|
|
extern void sched_autogroup_detach(struct task_struct *p);
|
|
extern void sched_autogroup_fork(struct signal_struct *sig);
|
|
extern void sched_autogroup_exit(struct signal_struct *sig);
|
|
|
|
extern void proc_sched_autogroup_show_task(struct task_struct *p, struct seq_file *m);
|
|
extern int proc_sched_autogroup_set_nice(struct task_struct *p, int nice);
|
|
# 2251 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
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__((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__((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__((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;
|
|
# 2327 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) struct user_struct *get_uid(struct user_struct *u)
|
|
{
|
|
atomic_inc(&u->__count);
|
|
return u;
|
|
}
|
|
extern void free_uid(struct user_struct *);
|
|
|
|
|
|
|
|
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__((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 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__((no_instrument_function)) void restore_saved_sigmask(void)
|
|
{
|
|
if (test_and_clear_restore_sigmask())
|
|
__set_current_blocked(&get_current()->saved_sigmask);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) sigset_t *sigmask_to_save(void)
|
|
{
|
|
sigset_t *res = &get_current()->blocked;
|
|
if (__builtin_expect(!!(test_restore_sigmask()), 0))
|
|
res = &get_current()->saved_sigmask;
|
|
return res;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int kill_cad_pid(int sig, int priv)
|
|
{
|
|
return kill_pid(cad_pid, sig, priv);
|
|
}
|
|
# 2425 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) int on_sig_stack(unsigned long sp)
|
|
{
|
|
|
|
|
|
|
|
|
|
return sp > get_current()->sas_ss_sp &&
|
|
sp - get_current()->sas_ss_sp <= get_current()->sas_ss_size;
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int sas_ss_flags(unsigned long sp)
|
|
{
|
|
if (!get_current()->sas_ss_size)
|
|
return 2;
|
|
|
|
return on_sig_stack(sp) ? 1 : 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long sigsp(unsigned long sp, struct ksignal *ksig)
|
|
{
|
|
if (__builtin_expect(!!((ksig->ka.sa.sa_flags & 0x08000000u)), 0) && ! sas_ss_flags(sp))
|
|
|
|
|
|
|
|
return get_current()->sas_ss_sp + get_current()->sas_ss_size;
|
|
|
|
return sp;
|
|
}
|
|
|
|
|
|
|
|
|
|
extern struct mm_struct * mm_alloc(void);
|
|
|
|
|
|
extern void __mmdrop(struct mm_struct *);
|
|
static inline __attribute__((no_instrument_function)) void mmdrop(struct mm_struct * mm)
|
|
{
|
|
if (__builtin_expect(!!(atomic_dec_and_test(&mm->mm_count)), 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 int do_execveat(int, struct filename *,
|
|
const char * const *,
|
|
const char * const *,
|
|
int);
|
|
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__((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);
|
|
# 2530 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
extern bool current_is_single_threaded(void);
|
|
# 2552 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) int get_nr_threads(struct task_struct *tsk)
|
|
{
|
|
return tsk->signal->nr_threads;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool thread_group_leader(struct task_struct *p)
|
|
{
|
|
return p->exit_signal >= 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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__((no_instrument_function))
|
|
bool same_thread_group(struct task_struct *p1, struct task_struct *p2)
|
|
{
|
|
return p1->signal == p2->signal;
|
|
}
|
|
|
|
static 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)) *)(*({ __attribute__((unused)) typeof((__ptr)) __var = ( typeof((__ptr))) 0; (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__((no_instrument_function)) int thread_group_empty(struct task_struct *p)
|
|
{
|
|
return list_empty(&p->thread_group);
|
|
}
|
|
# 2603 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) void task_lock(struct task_struct *p)
|
|
{
|
|
spin_lock(&p->alloc_lock);
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) void unlock_task_sighand(struct task_struct *tsk,
|
|
unsigned long *flags)
|
|
{
|
|
spin_unlock_irqrestore(&tsk->sighand->siglock, *flags);
|
|
}
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void threadgroup_change_begin(struct task_struct *tsk)
|
|
{
|
|
down_read(&tsk->signal->group_rwsem);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void threadgroup_change_end(struct task_struct *tsk)
|
|
{
|
|
up_read(&tsk->signal->group_rwsem);
|
|
}
|
|
# 2658 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) void threadgroup_lock(struct task_struct *tsk)
|
|
{
|
|
down_write(&tsk->signal->group_rwsem);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void threadgroup_unlock(struct task_struct *tsk)
|
|
{
|
|
up_write(&tsk->signal->group_rwsem);
|
|
}
|
|
# 2685 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static 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;
|
|
}
|
|
# 2700 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static 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__((no_instrument_function)) int object_is_on_stack(void *obj)
|
|
{
|
|
void *stack = ((get_current())->stack);
|
|
|
|
return (obj >= stack) && (obj < (stack + (((1UL) << 12) << 2)));
|
|
}
|
|
|
|
extern void thread_info_cache_init(void);
|
|
# 2734 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
extern void set_task_stack_end_magic(struct task_struct *tsk);
|
|
|
|
|
|
|
|
|
|
static 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__((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__((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__((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__((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__((no_instrument_function)) void set_tsk_need_resched(struct task_struct *tsk)
|
|
{
|
|
set_tsk_thread_flag(tsk,3);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void clear_tsk_need_resched(struct task_struct *tsk)
|
|
{
|
|
clear_tsk_thread_flag(tsk,3);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int test_tsk_need_resched(struct task_struct *tsk)
|
|
{
|
|
return __builtin_expect(!!(test_tsk_thread_flag(tsk,3)), 0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int restart_syscall(void)
|
|
{
|
|
set_tsk_thread_flag(get_current(), 2);
|
|
return -513;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int signal_pending(struct task_struct *p)
|
|
{
|
|
return __builtin_expect(!!(test_tsk_thread_flag(p,2)), 0);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) int fatal_signal_pending(struct task_struct *p)
|
|
{
|
|
return signal_pending(p) && __fatal_signal_pending(p);
|
|
}
|
|
|
|
static 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);
|
|
}
|
|
# 2817 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
extern int _cond_resched(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern int __cond_resched_lock(spinlock_t *lock);
|
|
# 2837 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
extern int __cond_resched_softirq(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void cond_resched_rcu(void)
|
|
{
|
|
|
|
rcu_read_unlock();
|
|
({ ___might_sleep("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h", 2848, 0); _cond_resched(); });
|
|
rcu_read_lock();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int spin_needbreak(spinlock_t *lock)
|
|
{
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int tsk_is_polling(struct task_struct *p)
|
|
{
|
|
return test_tsk_thread_flag(p, 21);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __current_set_polling(void)
|
|
{
|
|
set_ti_thread_flag(current_thread_info(), 21);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool current_set_polling_and_test(void)
|
|
{
|
|
__current_set_polling();
|
|
|
|
|
|
|
|
|
|
|
|
__asm__ __volatile__("": : :"memory");
|
|
|
|
return __builtin_expect(!!(test_ti_thread_flag(current_thread_info(), 3)), 0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __current_clr_polling(void)
|
|
{
|
|
clear_ti_thread_flag(current_thread_info(), 21);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool current_clr_polling_and_test(void)
|
|
{
|
|
__current_clr_polling();
|
|
|
|
|
|
|
|
|
|
|
|
__asm__ __volatile__("": : :"memory");
|
|
|
|
return __builtin_expect(!!(test_ti_thread_flag(current_thread_info(), 3)), 0);
|
|
}
|
|
# 2928 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
static inline __attribute__((no_instrument_function)) void current_clr_polling(void)
|
|
{
|
|
__current_clr_polling();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
asm volatile("mfence":::"memory");
|
|
|
|
do { if (test_ti_thread_flag(current_thread_info(), 3)) set_preempt_need_resched(); } while (0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) bool need_resched(void)
|
|
{
|
|
return __builtin_expect(!!(test_ti_thread_flag(current_thread_info(), 3)), 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__((no_instrument_function)) void thread_group_cputime_init(struct signal_struct *sig)
|
|
{
|
|
do { *(&sig->cputimer.lock) = (raw_spinlock_t) { .raw_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__((no_instrument_function)) void signal_wake_up(struct task_struct *t, bool resume)
|
|
{
|
|
signal_wake_up_state(t, resume ? 128 : 0);
|
|
}
|
|
static 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__((no_instrument_function)) unsigned int task_cpu(const struct task_struct *p)
|
|
{
|
|
return ((struct thread_info *)(p)->stack)->cpu;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int task_node(const struct task_struct *p)
|
|
{
|
|
return cpu_to_node(task_cpu(p));
|
|
}
|
|
|
|
extern void set_task_cpu(struct task_struct *p, unsigned int cpu);
|
|
# 3009 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void add_rchar(struct task_struct *tsk, ssize_t amt)
|
|
{
|
|
tsk->ioac.rchar += amt;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void add_wchar(struct task_struct *tsk, ssize_t amt)
|
|
{
|
|
tsk->ioac.wchar += amt;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void inc_syscr(struct task_struct *tsk)
|
|
{
|
|
tsk->ioac.syscr++;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void inc_syscw(struct task_struct *tsk)
|
|
{
|
|
tsk->ioac.syscw++;
|
|
}
|
|
# 3062 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sched.h"
|
|
extern void mm_update_next_owner(struct mm_struct *mm);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long task_rlimit(const struct task_struct *tsk,
|
|
unsigned int limit)
|
|
{
|
|
return (*({ __attribute__((unused)) typeof(tsk->signal->rlim[limit].rlim_cur) __var = ( typeof(tsk->signal->rlim[limit].rlim_cur)) 0; (volatile typeof(tsk->signal->rlim[limit].rlim_cur) *)&(tsk->signal->rlim[limit].rlim_cur); }));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long task_rlimit_max(const struct task_struct *tsk,
|
|
unsigned int limit)
|
|
{
|
|
return (*({ __attribute__((unused)) typeof(tsk->signal->rlim[limit].rlim_max) __var = ( typeof(tsk->signal->rlim[limit].rlim_max)) 0; (volatile typeof(tsk->signal->rlim[limit].rlim_max) *)&(tsk->signal->rlim[limit].rlim_max); }));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long rlimit(unsigned int limit)
|
|
{
|
|
return task_rlimit(get_current(), limit);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long rlimit_max(unsigned int limit)
|
|
{
|
|
return task_rlimit_max(get_current(), limit);
|
|
}
|
|
# 6 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pid_namespace.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pid_namespace.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/nsproxy.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct mnt_namespace;
|
|
struct uts_namespace;
|
|
struct ipc_namespace;
|
|
struct pid_namespace;
|
|
struct fs_struct;
|
|
# 29 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) void put_nsproxy(struct nsproxy *ns)
|
|
{
|
|
if (atomic_dec_and_test(&ns->count)) {
|
|
free_nsproxy(ns);
|
|
}
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void get_nsproxy(struct nsproxy *ns)
|
|
{
|
|
atomic_inc(&ns->count);
|
|
}
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pid_namespace.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kref.h" 1
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kref.h"
|
|
struct kref {
|
|
atomic_t refcount;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void kref_init(struct kref *kref)
|
|
{
|
|
atomic_set(&kref->refcount, 1);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static 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("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kref.h", 47); __builtin_expect(!!(__ret_warn_on), 0); })) __warned = true; __builtin_expect(!!(__ret_warn_once), 0); });
|
|
}
|
|
# 68 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kref.h"
|
|
static 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("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kref.h", 71); __builtin_expect(!!(__ret_warn_on), 0); });
|
|
|
|
if (atomic_sub_and_test((int) count, &kref->refcount)) {
|
|
release(kref);
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
# 97 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kref.h"
|
|
static inline __attribute__((no_instrument_function)) int kref_put(struct kref *kref, void (*release)(struct kref *kref))
|
|
{
|
|
return kref_sub(kref, 1, release);
|
|
}
|
|
# 115 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kref.h"
|
|
static 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("/usr/src/linux-source-3.19.0/linux-source-3.19.0/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_dec_and_test(&kref->refcount)) {
|
|
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__((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("/usr/src/linux-source-3.19.0/linux-source-3.19.0/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_dec_and_test(&kref->refcount)), 0)) {
|
|
mutex_unlock(lock);
|
|
return 0;
|
|
}
|
|
release(kref);
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
# 167 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kref.h"
|
|
static inline __attribute__((no_instrument_function)) int kref_get_unless_zero(struct kref *kref)
|
|
{
|
|
return atomic_add_unless(&kref->refcount, 1, 0);
|
|
}
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pid_namespace.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ns_common.h" 1
|
|
|
|
|
|
|
|
struct proc_ns_operations;
|
|
|
|
struct ns_common {
|
|
atomic_long_t stashed;
|
|
const struct proc_ns_operations *ops;
|
|
unsigned int inum;
|
|
};
|
|
# 12 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pid_namespace.h" 2
|
|
|
|
struct pidmap {
|
|
atomic_t nr_free;
|
|
void *page;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct bsd_acct_struct;
|
|
|
|
struct pid_namespace {
|
|
struct kref kref;
|
|
struct pidmap pidmap[(((0 ? ((1UL) << 12) * 8 : (sizeof(long) > 4 ? 4 * 1024 * 1024 : (0 ? 0x1000 : 0x8000)))+(((1UL) << 12) * 8)-1)/(((1UL) << 12) * 8))];
|
|
struct callback_head rcu;
|
|
int last_pid;
|
|
unsigned int nr_hashed;
|
|
struct task_struct *child_reaper;
|
|
struct kmem_cache *pid_cachep;
|
|
unsigned int level;
|
|
struct pid_namespace *parent;
|
|
|
|
struct vfsmount *proc_mnt;
|
|
struct dentry *proc_self;
|
|
struct dentry *proc_thread_self;
|
|
|
|
|
|
struct bsd_acct_struct *bacct;
|
|
|
|
struct user_namespace *user_ns;
|
|
struct work_struct proc_work;
|
|
kgid_t pid_gid;
|
|
int hide_pid;
|
|
int reboot;
|
|
struct ns_common ns;
|
|
};
|
|
|
|
extern struct pid_namespace init_pid_ns;
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) struct pid_namespace *get_pid_ns(struct pid_namespace *ns)
|
|
{
|
|
if (ns != &init_pid_ns)
|
|
kref_get(&ns->kref);
|
|
return ns;
|
|
}
|
|
|
|
extern struct pid_namespace *copy_pid_ns(unsigned long flags,
|
|
struct user_namespace *user_ns, struct pid_namespace *ns);
|
|
extern void zap_pid_ns_processes(struct pid_namespace *pid_ns);
|
|
extern int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd);
|
|
extern void put_pid_ns(struct pid_namespace *ns);
|
|
# 99 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pid_namespace.h"
|
|
extern struct pid_namespace *task_active_pid_ns(struct task_struct *tsk);
|
|
void pidhash_init(void);
|
|
void pidmap_init(void);
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/ptrace.h" 1
|
|
# 58 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/uapi/linux/ptrace.h"
|
|
struct ptrace_peeksiginfo_args {
|
|
__u64 off;
|
|
__u32 flags;
|
|
__s32 nr;
|
|
};
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h" 2
|
|
# 44 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"
|
|
extern long arch_ptrace(struct task_struct *child, long request,
|
|
unsigned long addr, unsigned long data);
|
|
extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char *dst, int len);
|
|
extern int ptrace_writedata(struct task_struct *tsk, char *src, unsigned long dst, int len);
|
|
extern void ptrace_disable(struct task_struct *);
|
|
extern int ptrace_request(struct task_struct *child, long request,
|
|
unsigned long addr, unsigned long data);
|
|
extern void ptrace_notify(int exit_code);
|
|
extern void __ptrace_link(struct task_struct *child,
|
|
struct task_struct *new_parent);
|
|
extern void __ptrace_unlink(struct task_struct *child);
|
|
extern void exit_ptrace(struct task_struct *tracer, struct list_head *dead);
|
|
|
|
|
|
|
|
|
|
extern bool ptrace_may_access(struct task_struct *task, unsigned int mode);
|
|
|
|
static inline __attribute__((no_instrument_function)) int ptrace_reparented(struct task_struct *child)
|
|
{
|
|
return !same_thread_group(child->real_parent, child->parent);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void ptrace_unlink(struct task_struct *child)
|
|
{
|
|
if (__builtin_expect(!!(child->ptrace), 0))
|
|
__ptrace_unlink(child);
|
|
}
|
|
|
|
int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
|
|
unsigned long data);
|
|
int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr,
|
|
unsigned long data);
|
|
# 89 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) struct task_struct *ptrace_parent(struct task_struct *task)
|
|
{
|
|
if (__builtin_expect(!!(task->ptrace), 0))
|
|
return ({ typeof(*(task->parent)) *_________p1 = (typeof(*(task->parent)) *)(*({ __attribute__((unused)) typeof((task->parent)) __var = ( typeof((task->parent))) 0; (volatile typeof((task->parent)) *)&((task->parent)); })); do { } while (0); ; do { } while (0); ((typeof(*(task->parent)) *)(_________p1)); });
|
|
return ((void *)0);
|
|
}
|
|
# 105 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) bool ptrace_event_enabled(struct task_struct *task, int event)
|
|
{
|
|
return task->ptrace & (1 << (3 + (event)));
|
|
}
|
|
# 120 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) void ptrace_event(int event, unsigned long message)
|
|
{
|
|
if (__builtin_expect(!!(ptrace_event_enabled(get_current(), event)), 0)) {
|
|
get_current()->ptrace_message = message;
|
|
ptrace_notify((event << 8) | 5);
|
|
} else if (event == 4) {
|
|
|
|
if ((get_current()->ptrace & (0x00000001|0x00010000)) == 0x00000001)
|
|
send_sig(5, get_current(), 0);
|
|
}
|
|
}
|
|
# 143 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) void ptrace_event_pid(int event, struct pid *pid)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long message = 0;
|
|
struct pid_namespace *ns;
|
|
|
|
rcu_read_lock();
|
|
ns = task_active_pid_ns(({ typeof(*(get_current()->parent)) *_________p1 = (typeof(*(get_current()->parent)) *)(*({ __attribute__((unused)) typeof((get_current()->parent)) __var = ( typeof((get_current()->parent))) 0; (volatile typeof((get_current()->parent)) *)&((get_current()->parent)); })); do { } while (0); ; do { } while (0); ((typeof(*(get_current()->parent)) *)(_________p1)); }));
|
|
if (ns)
|
|
message = pid_nr_ns(pid, ns);
|
|
rcu_read_unlock();
|
|
|
|
ptrace_event(event, message);
|
|
}
|
|
# 173 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"
|
|
static inline __attribute__((no_instrument_function)) void ptrace_init_task(struct task_struct *child, bool ptrace)
|
|
{
|
|
INIT_LIST_HEAD(&child->ptrace_entry);
|
|
INIT_LIST_HEAD(&child->ptraced);
|
|
child->jobctl = 0;
|
|
child->ptrace = 0;
|
|
child->parent = child->real_parent;
|
|
|
|
if (__builtin_expect(!!(ptrace), 0) && get_current()->ptrace) {
|
|
child->ptrace = get_current()->ptrace;
|
|
__ptrace_link(child, get_current()->parent);
|
|
|
|
if (child->ptrace & 0x00010000)
|
|
task_set_jobctl_pending(child, (1 << 19));
|
|
else
|
|
sigaddset(&child->pending.signal, 19);
|
|
|
|
set_tsk_thread_flag(child, 2);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void ptrace_release_task(struct task_struct *task)
|
|
{
|
|
do { if (__builtin_expect(!!(!list_empty(&task->ptraced)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"), "i" (202), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0); } while (0);
|
|
ptrace_unlink(task);
|
|
do { if (__builtin_expect(!!(!list_empty(&task->ptrace_entry)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b - 2b, %c0 - 2b\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"), "i" (204), "i" (sizeof(struct bug_entry))); __builtin_unreachable(); } while (0); } while (0);
|
|
}
|
|
# 278 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"
|
|
extern void user_enable_single_step(struct task_struct *);
|
|
extern void user_disable_single_step(struct task_struct *);
|
|
# 308 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"
|
|
extern void user_enable_block_step(struct task_struct *);
|
|
|
|
|
|
|
|
extern void user_single_step_siginfo(struct task_struct *tsk,
|
|
struct pt_regs *regs, siginfo_t *info);
|
|
# 382 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ptrace.h"
|
|
extern int task_current_syscall(struct task_struct *target, long *callno,
|
|
unsigned long args[6], unsigned int maxargs,
|
|
unsigned long *sp, unsigned long *pc);
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/stacktrace.h" 2
|
|
|
|
extern int kstack_depth_to_print;
|
|
|
|
struct thread_info;
|
|
struct stacktrace_ops;
|
|
|
|
typedef unsigned long (*walk_stack_t)(struct thread_info *tinfo,
|
|
unsigned long *stack,
|
|
unsigned long bp,
|
|
const struct stacktrace_ops *ops,
|
|
void *data,
|
|
unsigned long *end,
|
|
int *graph);
|
|
|
|
extern unsigned long
|
|
print_context_stack(struct thread_info *tinfo,
|
|
unsigned long *stack, unsigned long bp,
|
|
const struct stacktrace_ops *ops, void *data,
|
|
unsigned long *end, int *graph);
|
|
|
|
extern unsigned long
|
|
print_context_stack_bp(struct thread_info *tinfo,
|
|
unsigned long *stack, unsigned long bp,
|
|
const struct stacktrace_ops *ops, void *data,
|
|
unsigned long *end, int *graph);
|
|
|
|
|
|
|
|
struct stacktrace_ops {
|
|
void (*address)(void *data, unsigned long address, int reliable);
|
|
|
|
int (*stack)(void *data, char *name);
|
|
walk_stack_t walk_stack;
|
|
};
|
|
|
|
void dump_trace(struct task_struct *tsk, struct pt_regs *regs,
|
|
unsigned long *stack, unsigned long bp,
|
|
const struct stacktrace_ops *ops, void *data);
|
|
# 59 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/stacktrace.h"
|
|
static inline __attribute__((no_instrument_function)) unsigned long
|
|
stack_frame(struct task_struct *task, struct pt_regs *regs)
|
|
{
|
|
unsigned long bp;
|
|
|
|
if (regs)
|
|
return regs->bp;
|
|
|
|
if (task == get_current()) {
|
|
|
|
asm("movq %%rbp, %0" : "=r" (bp) :);
|
|
return bp;
|
|
}
|
|
|
|
|
|
return *(unsigned long *)task->thread.sp;
|
|
}
|
|
# 84 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/stacktrace.h"
|
|
extern void
|
|
show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
|
unsigned long *stack, unsigned long bp, char *log_lvl);
|
|
|
|
extern void
|
|
show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
|
unsigned long *sp, unsigned long bp, char *log_lvl);
|
|
|
|
extern unsigned int code_bytes;
|
|
|
|
|
|
struct stack_frame {
|
|
struct stack_frame *next_frame;
|
|
unsigned long return_address;
|
|
};
|
|
|
|
struct stack_frame_ia32 {
|
|
u32 next_frame;
|
|
u32 return_address;
|
|
};
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long caller_frame_pointer(void)
|
|
{
|
|
struct stack_frame *frame;
|
|
|
|
asm("movq %%rbp, %0" : "=r" (frame) :);
|
|
|
|
|
|
frame = frame->next_frame;
|
|
|
|
|
|
return (unsigned long)frame;
|
|
}
|
|
# 239 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/perf_event.h" 2
|
|
# 256 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/perf_event.h"
|
|
struct perf_guest_switch_msr {
|
|
unsigned msr;
|
|
u64 host, guest;
|
|
};
|
|
|
|
extern struct perf_guest_switch_msr *perf_guest_get_msrs(int *nr);
|
|
extern void perf_get_x86_pmu_capability(struct x86_pmu_capability *cap);
|
|
extern void perf_check_microcode(void);
|
|
# 281 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/perf_event.h"
|
|
extern void amd_pmu_enable_virt(void);
|
|
extern void amd_pmu_disable_virt(void);
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/local64.h" 1
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/local64.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/local64.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/local.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/local.h"
|
|
typedef struct {
|
|
atomic_long_t a;
|
|
} local_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void local_inc(local_t *l)
|
|
{
|
|
asm volatile(" " "incq" " " "%0"
|
|
: "+m" (l->a.counter));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void local_dec(local_t *l)
|
|
{
|
|
asm volatile(" " "decq" " " "%0"
|
|
: "+m" (l->a.counter));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void local_add(long i, local_t *l)
|
|
{
|
|
asm volatile(" " "addq" " " "%1,%0"
|
|
: "+m" (l->a.counter)
|
|
: "ir" (i));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void local_sub(long i, local_t *l)
|
|
{
|
|
asm volatile(" " "subq" " " "%1,%0"
|
|
: "+m" (l->a.counter)
|
|
: "ir" (i));
|
|
}
|
|
# 53 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/local.h"
|
|
static inline __attribute__((no_instrument_function)) int local_sub_and_test(long i, local_t *l)
|
|
{
|
|
do { char c; asm volatile (" " "subq" " " " %2, " "%0" "; set" "e" " %1" : "+m" (l->a.counter), "=qm" (c) : "er" (i) : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 66 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/local.h"
|
|
static inline __attribute__((no_instrument_function)) int local_dec_and_test(local_t *l)
|
|
{
|
|
do { char c; asm volatile (" " "decq" " " " " "%0" "; set" "e" " %1" : "+m" (l->a.counter), "=qm" (c) : : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 79 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/local.h"
|
|
static inline __attribute__((no_instrument_function)) int local_inc_and_test(local_t *l)
|
|
{
|
|
do { char c; asm volatile (" " "incq" " " " " "%0" "; set" "e" " %1" : "+m" (l->a.counter), "=qm" (c) : : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 93 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/local.h"
|
|
static inline __attribute__((no_instrument_function)) int local_add_negative(long i, local_t *l)
|
|
{
|
|
do { char c; asm volatile (" " "addq" " " " %2, " "%0" "; set" "s" " %1" : "+m" (l->a.counter), "=qm" (c) : "er" (i) : "memory"); return c != 0; } while (0);
|
|
}
|
|
# 105 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/local.h"
|
|
static inline __attribute__((no_instrument_function)) long local_add_return(long i, local_t *l)
|
|
{
|
|
long __i = i;
|
|
asm volatile(" " "xaddq" " " "%0, %1;"
|
|
: "+r" (i), "+m" (l->a.counter)
|
|
: : "memory");
|
|
return i + __i;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) long local_sub_return(long i, local_t *l)
|
|
{
|
|
return local_add_return(-i, l);
|
|
}
|
|
# 22 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/asm-generic/local64.h" 2
|
|
|
|
typedef struct {
|
|
local_t a;
|
|
} local64_t;
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/local64.h" 2
|
|
# 26 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 2
|
|
|
|
|
|
struct perf_guest_info_callbacks {
|
|
int (*is_in_guest)(void);
|
|
int (*is_user_mode)(void);
|
|
unsigned long (*get_guest_ip)(void);
|
|
};
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hw_breakpoint.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/hw_breakpoint.h" 1
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hw_breakpoint.h" 2
|
|
# 13 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hw_breakpoint.h"
|
|
struct arch_hw_breakpoint {
|
|
unsigned long address;
|
|
u8 len;
|
|
u8 type;
|
|
};
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kdebug.h" 1
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/kdebug.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
struct pt_regs;
|
|
|
|
|
|
enum die_val {
|
|
DIE_OOPS = 1,
|
|
DIE_INT3,
|
|
DIE_DEBUG,
|
|
DIE_PANIC,
|
|
DIE_NMI,
|
|
DIE_DIE,
|
|
DIE_KERNELDEBUG,
|
|
DIE_TRAP,
|
|
DIE_GPF,
|
|
DIE_CALL,
|
|
DIE_PAGE_FAULT,
|
|
DIE_NMIUNKNOWN,
|
|
};
|
|
|
|
extern void printk_address(unsigned long address);
|
|
extern void die(const char *, struct pt_regs *,long);
|
|
extern int __die(const char *, struct pt_regs *, long);
|
|
extern void show_trace(struct task_struct *t, struct pt_regs *regs,
|
|
unsigned long *sp, unsigned long bp);
|
|
extern void __show_regs(struct pt_regs *regs, int all);
|
|
extern unsigned long oops_begin(void);
|
|
extern void oops_end(unsigned long, struct pt_regs *, int signr);
|
|
|
|
extern int in_crash_kexec;
|
|
# 5 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kdebug.h" 2
|
|
|
|
struct notifier_block;
|
|
|
|
struct die_args {
|
|
struct pt_regs *regs;
|
|
const char *str;
|
|
long err;
|
|
int trapnr;
|
|
int signr;
|
|
};
|
|
|
|
int register_die_notifier(struct notifier_block *nb);
|
|
int unregister_die_notifier(struct notifier_block *nb);
|
|
|
|
int notify_die(enum die_val val, const char *str,
|
|
struct pt_regs *regs, long err, int trap, int sig);
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hw_breakpoint.h" 2
|
|
# 45 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/hw_breakpoint.h"
|
|
static inline __attribute__((no_instrument_function)) int hw_breakpoint_slots(int type)
|
|
{
|
|
return 4;
|
|
}
|
|
|
|
struct perf_event;
|
|
struct pmu;
|
|
|
|
extern int arch_check_bp_in_kernelspace(struct perf_event *bp);
|
|
extern int arch_validate_hwbkpt_settings(struct perf_event *bp);
|
|
extern int hw_breakpoint_exceptions_notify(struct notifier_block *unused,
|
|
unsigned long val, void *data);
|
|
|
|
|
|
int arch_install_hw_breakpoint(struct perf_event *bp);
|
|
void arch_uninstall_hw_breakpoint(struct perf_event *bp);
|
|
void hw_breakpoint_pmu_read(struct perf_event *bp);
|
|
void hw_breakpoint_pmu_unthrottle(struct perf_event *bp);
|
|
|
|
extern void
|
|
arch_fill_perf_breakpoint(struct perf_event *bp);
|
|
|
|
unsigned long encode_dr7(int drnum, unsigned int len, unsigned int type);
|
|
int decode_dr7(unsigned long dr7, int bpnum, unsigned *len, unsigned *type);
|
|
|
|
extern int arch_bp_generic_fields(int x86_len, int x86_type,
|
|
int *gen_len, int *gen_type);
|
|
|
|
extern struct pmu perf_ops_bp;
|
|
# 36 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 2
|
|
# 47 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/trace_clock.h" 1
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/trace_clock.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/trace_clock.h" 1
|
|
# 9 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/trace_clock.h"
|
|
extern u64 __attribute__((no_instrument_function)) trace_clock_x86_tsc(void);
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/trace_clock.h" 2
|
|
|
|
extern u64 __attribute__((no_instrument_function)) trace_clock_local(void);
|
|
extern u64 __attribute__((no_instrument_function)) trace_clock(void);
|
|
extern u64 __attribute__((no_instrument_function)) trace_clock_jiffies(void);
|
|
extern u64 __attribute__((no_instrument_function)) trace_clock_global(void);
|
|
extern u64 __attribute__((no_instrument_function)) trace_clock_counter(void);
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kallsyms.h" 1
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kallsyms.h"
|
|
struct module;
|
|
|
|
|
|
|
|
unsigned long kallsyms_lookup_name(const char *name);
|
|
|
|
|
|
int kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *,
|
|
unsigned long),
|
|
void *data);
|
|
|
|
extern int kallsyms_lookup_size_offset(unsigned long addr,
|
|
unsigned long *symbolsize,
|
|
unsigned long *offset);
|
|
|
|
|
|
const char *kallsyms_lookup(unsigned long addr,
|
|
unsigned long *symbolsize,
|
|
unsigned long *offset,
|
|
char **modname, char *namebuf);
|
|
|
|
|
|
extern int sprint_symbol(char *buffer, unsigned long address);
|
|
extern int sprint_symbol_no_offset(char *buffer, unsigned long address);
|
|
extern int sprint_backtrace(char *buffer, unsigned long address);
|
|
|
|
|
|
extern void __print_symbol(const char *fmt, unsigned long address);
|
|
|
|
int lookup_symbol_name(unsigned long addr, char *symname);
|
|
int lookup_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
|
|
# 111 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kallsyms.h"
|
|
static __attribute__((format(printf, 1, 2)))
|
|
void __check_printsym_format(const char *fmt, ...)
|
|
{
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void print_symbol(const char *fmt, unsigned long addr)
|
|
{
|
|
__check_printsym_format(fmt, "");
|
|
__print_symbol(fmt, (unsigned long)
|
|
__builtin_extract_return_addr((void *)addr));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void print_ip_sym(unsigned long ip)
|
|
{
|
|
printk("[<%p>] %pS\n", (void *) ip, (void *) ip);
|
|
}
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h" 2
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ftrace.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ftrace.h"
|
|
extern void mcount(void);
|
|
extern atomic_t modifying_ftrace_code;
|
|
extern void __fentry__(void);
|
|
|
|
static inline __attribute__((no_instrument_function)) unsigned long ftrace_call_adjust(unsigned long addr)
|
|
{
|
|
|
|
|
|
|
|
|
|
return addr;
|
|
}
|
|
|
|
|
|
|
|
struct dyn_arch_ftrace {
|
|
|
|
};
|
|
|
|
int ftrace_int3_handler(struct pt_regs *regs);
|
|
# 48 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ftrace.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/compat.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/compat.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/user32.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct user_i387_ia32_struct {
|
|
u32 cwd;
|
|
u32 swd;
|
|
u32 twd;
|
|
u32 fip;
|
|
u32 fcs;
|
|
u32 foo;
|
|
u32 fos;
|
|
u32 st_space[20];
|
|
};
|
|
|
|
|
|
struct user32_fxsr_struct {
|
|
unsigned short cwd;
|
|
unsigned short swd;
|
|
unsigned short twd;
|
|
unsigned short fop;
|
|
int fip;
|
|
int fcs;
|
|
int foo;
|
|
int fos;
|
|
int mxcsr;
|
|
int reserved;
|
|
int st_space[32];
|
|
int xmm_space[32];
|
|
int padding[56];
|
|
};
|
|
|
|
struct user_regs_struct32 {
|
|
__u32 ebx, ecx, edx, esi, edi, ebp, eax;
|
|
unsigned short ds, __ds, es, __es;
|
|
unsigned short fs, __fs, gs, __gs;
|
|
__u32 orig_eax, eip;
|
|
unsigned short cs, __cs;
|
|
__u32 eflags, esp;
|
|
unsigned short ss, __ss;
|
|
};
|
|
|
|
struct user32 {
|
|
struct user_regs_struct32 regs;
|
|
int u_fpvalid;
|
|
|
|
struct user_i387_ia32_struct i387;
|
|
|
|
__u32 u_tsize;
|
|
__u32 u_dsize;
|
|
__u32 u_ssize;
|
|
__u32 start_code;
|
|
__u32 start_stack;
|
|
|
|
|
|
|
|
__u32 signal;
|
|
int reserved;
|
|
__u32 u_ar0;
|
|
|
|
__u32 u_fpstate;
|
|
__u32 magic;
|
|
char u_comm[32];
|
|
int u_debugreg[8];
|
|
};
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/compat.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
typedef u32 compat_size_t;
|
|
typedef s32 compat_ssize_t;
|
|
typedef s32 compat_time_t;
|
|
typedef s32 compat_clock_t;
|
|
typedef s32 compat_pid_t;
|
|
typedef u16 __compat_uid_t;
|
|
typedef u16 __compat_gid_t;
|
|
typedef u32 __compat_uid32_t;
|
|
typedef u32 __compat_gid32_t;
|
|
typedef u16 compat_mode_t;
|
|
typedef u32 compat_ino_t;
|
|
typedef u16 compat_dev_t;
|
|
typedef s32 compat_off_t;
|
|
typedef s64 compat_loff_t;
|
|
typedef u16 compat_nlink_t;
|
|
typedef u16 compat_ipc_pid_t;
|
|
typedef s32 compat_daddr_t;
|
|
typedef u32 compat_caddr_t;
|
|
typedef __kernel_fsid_t compat_fsid_t;
|
|
typedef s32 compat_timer_t;
|
|
typedef s32 compat_key_t;
|
|
|
|
typedef s32 compat_int_t;
|
|
typedef s32 compat_long_t;
|
|
typedef s64 __attribute__((aligned(4))) compat_s64;
|
|
typedef u32 compat_uint_t;
|
|
typedef u32 compat_ulong_t;
|
|
typedef u64 __attribute__((aligned(4))) compat_u64;
|
|
typedef u32 compat_uptr_t;
|
|
|
|
struct compat_timespec {
|
|
compat_time_t tv_sec;
|
|
s32 tv_nsec;
|
|
};
|
|
|
|
struct compat_timeval {
|
|
compat_time_t tv_sec;
|
|
s32 tv_usec;
|
|
};
|
|
|
|
struct compat_stat {
|
|
compat_dev_t st_dev;
|
|
u16 __pad1;
|
|
compat_ino_t st_ino;
|
|
compat_mode_t st_mode;
|
|
compat_nlink_t st_nlink;
|
|
__compat_uid_t st_uid;
|
|
__compat_gid_t st_gid;
|
|
compat_dev_t st_rdev;
|
|
u16 __pad2;
|
|
u32 st_size;
|
|
u32 st_blksize;
|
|
u32 st_blocks;
|
|
u32 st_atime;
|
|
u32 st_atime_nsec;
|
|
u32 st_mtime;
|
|
u32 st_mtime_nsec;
|
|
u32 st_ctime;
|
|
u32 st_ctime_nsec;
|
|
u32 __unused4;
|
|
u32 __unused5;
|
|
};
|
|
|
|
struct compat_flock {
|
|
short l_type;
|
|
short l_whence;
|
|
compat_off_t l_start;
|
|
compat_off_t l_len;
|
|
compat_pid_t l_pid;
|
|
};
|
|
# 95 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/compat.h"
|
|
struct compat_flock64 {
|
|
short l_type;
|
|
short l_whence;
|
|
compat_loff_t l_start;
|
|
compat_loff_t l_len;
|
|
compat_pid_t l_pid;
|
|
} __attribute__((packed));
|
|
|
|
struct compat_statfs {
|
|
int f_type;
|
|
int f_bsize;
|
|
int f_blocks;
|
|
int f_bfree;
|
|
int f_bavail;
|
|
int f_files;
|
|
int f_ffree;
|
|
compat_fsid_t f_fsid;
|
|
int f_namelen;
|
|
int f_frsize;
|
|
int f_flags;
|
|
int f_spare[4];
|
|
};
|
|
|
|
|
|
|
|
|
|
typedef u32 compat_old_sigset_t;
|
|
|
|
|
|
|
|
|
|
typedef u32 compat_sigset_word;
|
|
|
|
typedef union compat_sigval {
|
|
compat_int_t sival_int;
|
|
compat_uptr_t sival_ptr;
|
|
} compat_sigval_t;
|
|
|
|
typedef struct compat_siginfo {
|
|
int si_signo;
|
|
int si_errno;
|
|
int si_code;
|
|
|
|
union {
|
|
int _pad[128/sizeof(int) - 3];
|
|
|
|
|
|
struct {
|
|
unsigned int _pid;
|
|
unsigned int _uid;
|
|
} _kill;
|
|
|
|
|
|
struct {
|
|
compat_timer_t _tid;
|
|
int _overrun;
|
|
compat_sigval_t _sigval;
|
|
int _sys_private;
|
|
int _overrun_incr;
|
|
} _timer;
|
|
|
|
|
|
struct {
|
|
unsigned int _pid;
|
|
unsigned int _uid;
|
|
compat_sigval_t _sigval;
|
|
} _rt;
|
|
|
|
|
|
struct {
|
|
unsigned int _pid;
|
|
unsigned int _uid;
|
|
int _status;
|
|
compat_clock_t _utime;
|
|
compat_clock_t _stime;
|
|
} _sigchld;
|
|
|
|
|
|
struct {
|
|
unsigned int _pid;
|
|
unsigned int _uid;
|
|
int _status;
|
|
compat_s64 _utime;
|
|
compat_s64 _stime;
|
|
} _sigchld_x32;
|
|
|
|
|
|
struct {
|
|
unsigned int _addr;
|
|
} _sigfault;
|
|
|
|
|
|
struct {
|
|
int _band;
|
|
int _fd;
|
|
} _sigpoll;
|
|
|
|
struct {
|
|
unsigned int _call_addr;
|
|
int _syscall;
|
|
unsigned int _arch;
|
|
} _sigsys;
|
|
} _sifields;
|
|
} compat_siginfo_t;
|
|
|
|
|
|
|
|
|
|
struct compat_ipc64_perm {
|
|
compat_key_t key;
|
|
__compat_uid32_t uid;
|
|
__compat_gid32_t gid;
|
|
__compat_uid32_t cuid;
|
|
__compat_gid32_t cgid;
|
|
unsigned short mode;
|
|
unsigned short __pad1;
|
|
unsigned short seq;
|
|
unsigned short __pad2;
|
|
compat_ulong_t unused1;
|
|
compat_ulong_t unused2;
|
|
};
|
|
|
|
struct compat_semid64_ds {
|
|
struct compat_ipc64_perm sem_perm;
|
|
compat_time_t sem_otime;
|
|
compat_ulong_t __unused1;
|
|
compat_time_t sem_ctime;
|
|
compat_ulong_t __unused2;
|
|
compat_ulong_t sem_nsems;
|
|
compat_ulong_t __unused3;
|
|
compat_ulong_t __unused4;
|
|
};
|
|
|
|
struct compat_msqid64_ds {
|
|
struct compat_ipc64_perm msg_perm;
|
|
compat_time_t msg_stime;
|
|
compat_ulong_t __unused1;
|
|
compat_time_t msg_rtime;
|
|
compat_ulong_t __unused2;
|
|
compat_time_t msg_ctime;
|
|
compat_ulong_t __unused3;
|
|
compat_ulong_t msg_cbytes;
|
|
compat_ulong_t msg_qnum;
|
|
compat_ulong_t msg_qbytes;
|
|
compat_pid_t msg_lspid;
|
|
compat_pid_t msg_lrpid;
|
|
compat_ulong_t __unused4;
|
|
compat_ulong_t __unused5;
|
|
};
|
|
|
|
struct compat_shmid64_ds {
|
|
struct compat_ipc64_perm shm_perm;
|
|
compat_size_t shm_segsz;
|
|
compat_time_t shm_atime;
|
|
compat_ulong_t __unused1;
|
|
compat_time_t shm_dtime;
|
|
compat_ulong_t __unused2;
|
|
compat_time_t shm_ctime;
|
|
compat_ulong_t __unused3;
|
|
compat_pid_t shm_cpid;
|
|
compat_pid_t shm_lpid;
|
|
compat_ulong_t shm_nattch;
|
|
compat_ulong_t __unused4;
|
|
compat_ulong_t __unused5;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct user_regs_struct compat_elf_gregset_t;
|
|
# 286 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/compat.h"
|
|
static inline __attribute__((no_instrument_function)) void *compat_ptr(compat_uptr_t uptr)
|
|
{
|
|
return (void *)(unsigned long)uptr;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) compat_uptr_t ptr_to_compat(void *uptr)
|
|
{
|
|
return (u32)(unsigned long)uptr;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void *arch_compat_alloc_user_space(long len)
|
|
{
|
|
compat_uptr_t sp;
|
|
|
|
if (test_ti_thread_flag(current_thread_info(), 17)) {
|
|
sp = ((struct pt_regs *)(get_current())->thread.sp0 - 1)->sp;
|
|
} else {
|
|
|
|
sp = ({ typeof(old_rsp) pscr_ret__; do { const void *__vpp_verify = (typeof((&(old_rsp)) + 0))((void *)0); (void)__vpp_verify; } while (0); switch(sizeof(old_rsp)) { case 1: pscr_ret__ = ({ typeof(old_rsp) pfo_ret__; switch (sizeof(old_rsp)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (old_rsp)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 2: pscr_ret__ = ({ typeof(old_rsp) pfo_ret__; switch (sizeof(old_rsp)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (old_rsp)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 4: pscr_ret__ = ({ typeof(old_rsp) pfo_ret__; switch (sizeof(old_rsp)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (old_rsp)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; case 8: pscr_ret__ = ({ typeof(old_rsp) pfo_ret__; switch (sizeof(old_rsp)) { case 1: asm("mov" "b ""%%""gs"":" "%" "1"",%0" : "=q" (pfo_ret__) : "m" (old_rsp)); break; case 2: asm("mov" "w ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; case 4: asm("mov" "l ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; case 8: asm("mov" "q ""%%""gs"":" "%" "1"",%0" : "=r" (pfo_ret__) : "m" (old_rsp)); break; default: __bad_percpu_size(); } pfo_ret__; }); break; default: __bad_size_call_parameter(); break; } pscr_ret__; }) - 128;
|
|
}
|
|
|
|
return (void *)((sp - len) & ~((__typeof__(sp - len))((16)-1)));
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool is_x32_task(void)
|
|
{
|
|
|
|
if (((struct pt_regs *)(get_current())->thread.sp0 - 1)->orig_ax & 0x40000000)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool is_compat_task(void)
|
|
{
|
|
return is_ia32_task() || is_x32_task();
|
|
}
|
|
# 49 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ftrace.h" 2
|
|
# 59 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/ftrace.h"
|
|
static inline __attribute__((no_instrument_function)) bool arch_trace_is_compat_syscall(struct pt_regs *regs)
|
|
{
|
|
if (is_compat_task())
|
|
return true;
|
|
return false;
|
|
}
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h" 2
|
|
# 44 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
void trace_init(void);
|
|
|
|
|
|
|
|
|
|
struct module;
|
|
struct ftrace_hash;
|
|
|
|
|
|
|
|
extern int ftrace_enabled;
|
|
extern int
|
|
ftrace_enable_sysctl(struct ctl_table *table, int write,
|
|
void *buffer, size_t *lenp,
|
|
loff_t *ppos);
|
|
|
|
struct ftrace_ops;
|
|
|
|
typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip,
|
|
struct ftrace_ops *op, struct pt_regs *regs);
|
|
|
|
ftrace_func_t ftrace_ops_get_func(struct ftrace_ops *ops);
|
|
# 121 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
enum {
|
|
FTRACE_OPS_FL_ENABLED = 1 << 0,
|
|
FTRACE_OPS_FL_DYNAMIC = 1 << 1,
|
|
FTRACE_OPS_FL_CONTROL = 1 << 2,
|
|
FTRACE_OPS_FL_SAVE_REGS = 1 << 3,
|
|
FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 1 << 4,
|
|
FTRACE_OPS_FL_RECURSION_SAFE = 1 << 5,
|
|
FTRACE_OPS_FL_STUB = 1 << 6,
|
|
FTRACE_OPS_FL_INITIALIZED = 1 << 7,
|
|
FTRACE_OPS_FL_DELETED = 1 << 8,
|
|
FTRACE_OPS_FL_ADDING = 1 << 9,
|
|
FTRACE_OPS_FL_REMOVING = 1 << 10,
|
|
FTRACE_OPS_FL_MODIFYING = 1 << 11,
|
|
FTRACE_OPS_FL_ALLOC_TRAMP = 1 << 12,
|
|
FTRACE_OPS_FL_IPMODIFY = 1 << 13,
|
|
FTRACE_OPS_FL_PID = 1 << 14,
|
|
};
|
|
|
|
|
|
|
|
struct ftrace_ops_hash {
|
|
struct ftrace_hash *notrace_hash;
|
|
struct ftrace_hash *filter_hash;
|
|
struct mutex regex_lock;
|
|
};
|
|
# 159 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
struct ftrace_ops {
|
|
ftrace_func_t func;
|
|
struct ftrace_ops *next;
|
|
unsigned long flags;
|
|
void *private;
|
|
ftrace_func_t saved_func;
|
|
int *disabled;
|
|
|
|
int nr_trampolines;
|
|
struct ftrace_ops_hash local_hash;
|
|
struct ftrace_ops_hash *func_hash;
|
|
struct ftrace_ops_hash old_hash;
|
|
unsigned long trampoline;
|
|
unsigned long trampoline_size;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum ftrace_tracing_type_t {
|
|
FTRACE_TYPE_ENTER = 0,
|
|
FTRACE_TYPE_RETURN,
|
|
};
|
|
|
|
|
|
extern enum ftrace_tracing_type_t ftrace_tracing_type;
|
|
# 194 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
int register_ftrace_function(struct ftrace_ops *ops);
|
|
int unregister_ftrace_function(struct ftrace_ops *ops);
|
|
void clear_ftrace_function(void);
|
|
# 207 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
static inline __attribute__((no_instrument_function)) void ftrace_function_local_enable(struct ftrace_ops *ops)
|
|
{
|
|
if (({ static bool __attribute__ ((__section__(".data.unlikely"))) __warned; int __ret_warn_once = !!(!(ops->flags & FTRACE_OPS_FL_CONTROL)); if (__builtin_expect(!!(__ret_warn_once), 0)) if (({ int __ret_warn_on = !!(!__warned); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h", 209); __builtin_expect(!!(__ret_warn_on), 0); })) __warned = true; __builtin_expect(!!(__ret_warn_once), 0); }))
|
|
return;
|
|
|
|
(*({ do { const void *__vpp_verify = (typeof((ops->disabled) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long tcp_ptr__; asm volatile("add " "%%""gs"":" "%" "1" ", %0" : "=r" (tcp_ptr__) : "m" (this_cpu_off), "0" (ops->disabled)); (typeof(*(ops->disabled)) *)tcp_ptr__; }); }))--;
|
|
}
|
|
# 224 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
static inline __attribute__((no_instrument_function)) void ftrace_function_local_disable(struct ftrace_ops *ops)
|
|
{
|
|
if (({ static bool __attribute__ ((__section__(".data.unlikely"))) __warned; int __ret_warn_once = !!(!(ops->flags & FTRACE_OPS_FL_CONTROL)); if (__builtin_expect(!!(__ret_warn_once), 0)) if (({ int __ret_warn_on = !!(!__warned); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h", 226); __builtin_expect(!!(__ret_warn_on), 0); })) __warned = true; __builtin_expect(!!(__ret_warn_once), 0); }))
|
|
return;
|
|
|
|
(*({ do { const void *__vpp_verify = (typeof((ops->disabled) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long tcp_ptr__; asm volatile("add " "%%""gs"":" "%" "1" ", %0" : "=r" (tcp_ptr__) : "m" (this_cpu_off), "0" (ops->disabled)); (typeof(*(ops->disabled)) *)tcp_ptr__; }); }))++;
|
|
}
|
|
# 241 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
static inline __attribute__((no_instrument_function)) int ftrace_function_local_disabled(struct ftrace_ops *ops)
|
|
{
|
|
({ static bool __attribute__ ((__section__(".data.unlikely"))) __warned; int __ret_warn_once = !!(!(ops->flags & FTRACE_OPS_FL_CONTROL)); if (__builtin_expect(!!(__ret_warn_once), 0)) if (({ int __ret_warn_on = !!(!__warned); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_null("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h", 243); __builtin_expect(!!(__ret_warn_on), 0); })) __warned = true; __builtin_expect(!!(__ret_warn_once), 0); });
|
|
return *({ do { const void *__vpp_verify = (typeof((ops->disabled) + 0))((void *)0); (void)__vpp_verify; } while (0); ({ unsigned long tcp_ptr__; asm volatile("add " "%%""gs"":" "%" "1" ", %0" : "=r" (tcp_ptr__) : "m" (this_cpu_off), "0" (ops->disabled)); (typeof(*(ops->disabled)) *)tcp_ptr__; }); });
|
|
}
|
|
|
|
extern void ftrace_stub(unsigned long a0, unsigned long a1,
|
|
struct ftrace_ops *op, struct pt_regs *regs);
|
|
# 266 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
extern int stack_tracer_enabled;
|
|
int
|
|
stack_trace_sysctl(struct ctl_table *table, int write,
|
|
void *buffer, size_t *lenp,
|
|
loff_t *ppos);
|
|
|
|
|
|
struct ftrace_func_command {
|
|
struct list_head list;
|
|
char *name;
|
|
int (*func)(struct ftrace_hash *hash,
|
|
char *func, char *cmd,
|
|
char *params, int enable);
|
|
};
|
|
|
|
|
|
|
|
int ftrace_arch_code_modify_prepare(void);
|
|
int ftrace_arch_code_modify_post_process(void);
|
|
|
|
struct dyn_ftrace;
|
|
|
|
void ftrace_bug(int err, struct dyn_ftrace *rec);
|
|
|
|
struct seq_file;
|
|
|
|
struct ftrace_probe_ops {
|
|
void (*func)(unsigned long ip,
|
|
unsigned long parent_ip,
|
|
void **data);
|
|
int (*init)(struct ftrace_probe_ops *ops,
|
|
unsigned long ip, void **data);
|
|
void (*free)(struct ftrace_probe_ops *ops,
|
|
unsigned long ip, void **data);
|
|
int (*print)(struct seq_file *m,
|
|
unsigned long ip,
|
|
struct ftrace_probe_ops *ops,
|
|
void *data);
|
|
};
|
|
|
|
extern int
|
|
register_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops,
|
|
void *data);
|
|
extern void
|
|
unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops,
|
|
void *data);
|
|
extern void
|
|
unregister_ftrace_function_probe_func(char *glob, struct ftrace_probe_ops *ops);
|
|
extern void unregister_ftrace_function_probe_all(char *glob);
|
|
|
|
extern int ftrace_text_reserved(const void *start, const void *end);
|
|
|
|
extern int ftrace_nr_registered_ops(void);
|
|
|
|
bool is_ftrace_trampoline(unsigned long addr);
|
|
# 340 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
enum {
|
|
FTRACE_FL_ENABLED = (1UL << 31),
|
|
FTRACE_FL_REGS = (1UL << 30),
|
|
FTRACE_FL_REGS_EN = (1UL << 29),
|
|
FTRACE_FL_TRAMP = (1UL << 28),
|
|
FTRACE_FL_TRAMP_EN = (1UL << 27),
|
|
FTRACE_FL_IPMODIFY = (1UL << 26),
|
|
};
|
|
# 357 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
struct dyn_ftrace {
|
|
unsigned long ip;
|
|
unsigned long flags;
|
|
struct dyn_arch_ftrace arch;
|
|
};
|
|
|
|
int ftrace_force_update(void);
|
|
int ftrace_set_filter_ip(struct ftrace_ops *ops, unsigned long ip,
|
|
int remove, int reset);
|
|
int ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf,
|
|
int len, int reset);
|
|
int ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf,
|
|
int len, int reset);
|
|
void ftrace_set_global_filter(unsigned char *buf, int len, int reset);
|
|
void ftrace_set_global_notrace(unsigned char *buf, int len, int reset);
|
|
void ftrace_free_filter(struct ftrace_ops *ops);
|
|
|
|
int register_ftrace_command(struct ftrace_func_command *cmd);
|
|
int unregister_ftrace_command(struct ftrace_func_command *cmd);
|
|
|
|
enum {
|
|
FTRACE_UPDATE_CALLS = (1 << 0),
|
|
FTRACE_DISABLE_CALLS = (1 << 1),
|
|
FTRACE_UPDATE_TRACE_FUNC = (1 << 2),
|
|
FTRACE_START_FUNC_RET = (1 << 3),
|
|
FTRACE_STOP_FUNC_RET = (1 << 4),
|
|
};
|
|
# 396 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
enum {
|
|
FTRACE_UPDATE_IGNORE,
|
|
FTRACE_UPDATE_MAKE_CALL,
|
|
FTRACE_UPDATE_MODIFY_CALL,
|
|
FTRACE_UPDATE_MAKE_NOP,
|
|
};
|
|
|
|
enum {
|
|
FTRACE_ITER_FILTER = (1 << 0),
|
|
FTRACE_ITER_NOTRACE = (1 << 1),
|
|
FTRACE_ITER_PRINTALL = (1 << 2),
|
|
FTRACE_ITER_DO_HASH = (1 << 3),
|
|
FTRACE_ITER_HASH = (1 << 4),
|
|
FTRACE_ITER_ENABLED = (1 << 5),
|
|
};
|
|
|
|
void arch_ftrace_update_code(int command);
|
|
|
|
struct ftrace_rec_iter;
|
|
|
|
struct ftrace_rec_iter *ftrace_rec_iter_start(void);
|
|
struct ftrace_rec_iter *ftrace_rec_iter_next(struct ftrace_rec_iter *iter);
|
|
struct dyn_ftrace *ftrace_rec_iter_record(struct ftrace_rec_iter *iter);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int ftrace_update_record(struct dyn_ftrace *rec, int enable);
|
|
int ftrace_test_record(struct dyn_ftrace *rec, int enable);
|
|
void ftrace_run_stop_machine(int command);
|
|
unsigned long ftrace_location(unsigned long ip);
|
|
unsigned long ftrace_get_addr_new(struct dyn_ftrace *rec);
|
|
unsigned long ftrace_get_addr_curr(struct dyn_ftrace *rec);
|
|
|
|
extern ftrace_func_t ftrace_trace_function;
|
|
|
|
int ftrace_regex_open(struct ftrace_ops *ops, int flag,
|
|
struct inode *inode, struct file *file);
|
|
ssize_t ftrace_filter_write(struct file *file, const char *ubuf,
|
|
size_t cnt, loff_t *ppos);
|
|
ssize_t ftrace_notrace_write(struct file *file, const char *ubuf,
|
|
size_t cnt, loff_t *ppos);
|
|
int ftrace_regex_release(struct inode *inode, struct file *file);
|
|
|
|
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function))
|
|
ftrace_set_early_filter(struct ftrace_ops *ops, char *buf, int enable);
|
|
|
|
|
|
extern int ftrace_ip_converted(unsigned long ip);
|
|
extern int ftrace_dyn_arch_init(void);
|
|
extern void ftrace_replace_code(int enable);
|
|
extern int ftrace_update_ftrace_func(ftrace_func_t func);
|
|
extern void ftrace_caller(void);
|
|
extern void ftrace_regs_caller(void);
|
|
extern void ftrace_call(void);
|
|
extern void ftrace_regs_call(void);
|
|
extern void mcount_call(void);
|
|
|
|
void ftrace_modify_all_code(int command);
|
|
# 486 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
extern void ftrace_graph_caller(void);
|
|
extern int ftrace_enable_ftrace_graph_caller(void);
|
|
extern int ftrace_disable_ftrace_graph_caller(void);
|
|
# 515 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
extern int ftrace_make_nop(struct module *mod,
|
|
struct dyn_ftrace *rec, unsigned long addr);
|
|
# 538 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
extern int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr);
|
|
# 562 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
extern int ftrace_modify_call(struct dyn_ftrace *rec, unsigned long old_addr,
|
|
unsigned long addr);
|
|
# 574 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
extern int ftrace_arch_read_dyn_info(char *buf, int size);
|
|
|
|
extern int skip_trace(unsigned long ip);
|
|
extern void ftrace_module_init(struct module *mod);
|
|
|
|
extern void ftrace_disable_daemon(void);
|
|
extern void ftrace_enable_daemon(void);
|
|
# 631 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
void ftrace_kill(void);
|
|
|
|
static inline __attribute__((no_instrument_function)) void tracer_disable(void)
|
|
{
|
|
|
|
ftrace_enabled = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int __ftrace_enabled_save(void)
|
|
{
|
|
|
|
int saved_ftrace_enabled = ftrace_enabled;
|
|
ftrace_enabled = 0;
|
|
return saved_ftrace_enabled;
|
|
|
|
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void __ftrace_enabled_restore(int enabled)
|
|
{
|
|
|
|
ftrace_enabled = enabled;
|
|
|
|
}
|
|
# 689 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
static inline __attribute__((no_instrument_function)) void time_hardirqs_on(unsigned long a0, unsigned long a1) { }
|
|
static inline __attribute__((no_instrument_function)) void time_hardirqs_off(unsigned long a0, unsigned long a1) { }
|
|
# 706 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
extern void ftrace_init(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct ftrace_graph_ent {
|
|
unsigned long func;
|
|
int depth;
|
|
};
|
|
|
|
|
|
|
|
|
|
struct ftrace_graph_ret {
|
|
unsigned long func;
|
|
unsigned long long calltime;
|
|
unsigned long long rettime;
|
|
|
|
unsigned long overrun;
|
|
int depth;
|
|
};
|
|
|
|
|
|
typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);
|
|
typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);
|
|
# 745 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
struct ftrace_ret_stack {
|
|
unsigned long ret;
|
|
unsigned long func;
|
|
unsigned long long calltime;
|
|
unsigned long long subtime;
|
|
unsigned long fp;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern void return_to_handler(void);
|
|
|
|
extern int
|
|
ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth,
|
|
unsigned long frame_pointer);
|
|
# 778 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
extern char __irqentry_text_start[];
|
|
extern char __irqentry_text_end[];
|
|
|
|
|
|
|
|
|
|
extern int register_ftrace_graph(trace_func_graph_ret_t retfunc,
|
|
trace_func_graph_ent_t entryfunc);
|
|
|
|
extern bool ftrace_graph_is_dead(void);
|
|
extern void ftrace_graph_stop(void);
|
|
|
|
|
|
extern trace_func_graph_ret_t ftrace_graph_return;
|
|
extern trace_func_graph_ent_t ftrace_graph_entry;
|
|
|
|
extern void unregister_ftrace_graph(void);
|
|
|
|
extern void ftrace_graph_init_task(struct task_struct *t);
|
|
extern void ftrace_graph_exit_task(struct task_struct *t);
|
|
extern void ftrace_graph_init_idle_task(struct task_struct *t, int cpu);
|
|
|
|
static inline __attribute__((no_instrument_function)) int task_curr_ret_stack(struct task_struct *t)
|
|
{
|
|
return t->curr_ret_stack;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pause_graph_tracing(void)
|
|
{
|
|
atomic_inc(&get_current()->tracing_graph_pause);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void unpause_graph_tracing(void)
|
|
{
|
|
atomic_dec(&get_current()->tracing_graph_pause);
|
|
}
|
|
# 843 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
enum {
|
|
TSK_TRACE_FL_TRACE_BIT = 0,
|
|
TSK_TRACE_FL_GRAPH_BIT = 1,
|
|
};
|
|
enum {
|
|
TSK_TRACE_FL_TRACE = 1 << TSK_TRACE_FL_TRACE_BIT,
|
|
TSK_TRACE_FL_GRAPH = 1 << TSK_TRACE_FL_GRAPH_BIT,
|
|
};
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_tsk_trace_trace(struct task_struct *tsk)
|
|
{
|
|
set_bit(TSK_TRACE_FL_TRACE_BIT, &tsk->trace);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void clear_tsk_trace_trace(struct task_struct *tsk)
|
|
{
|
|
clear_bit(TSK_TRACE_FL_TRACE_BIT, &tsk->trace);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int test_tsk_trace_trace(struct task_struct *tsk)
|
|
{
|
|
return tsk->trace & TSK_TRACE_FL_TRACE;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void set_tsk_trace_graph(struct task_struct *tsk)
|
|
{
|
|
set_bit(TSK_TRACE_FL_GRAPH_BIT, &tsk->trace);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void clear_tsk_trace_graph(struct task_struct *tsk)
|
|
{
|
|
clear_bit(TSK_TRACE_FL_GRAPH_BIT, &tsk->trace);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int test_tsk_trace_graph(struct task_struct *tsk)
|
|
{
|
|
return tsk->trace & TSK_TRACE_FL_GRAPH;
|
|
}
|
|
|
|
enum ftrace_dump_mode;
|
|
|
|
extern enum ftrace_dump_mode ftrace_dump_on_oops;
|
|
extern int tracepoint_printk;
|
|
|
|
extern void disable_trace_on_warning(void);
|
|
extern int __disable_trace_on_warning;
|
|
# 904 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace.h"
|
|
unsigned long arch_syscall_addr(int nr);
|
|
# 48 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpu.h" 1
|
|
# 16 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpu.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/node.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/node.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h" 1
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kobject.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kobject.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sysfs.h" 1
|
|
# 15 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sysfs.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernfs.h" 1
|
|
# 14 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernfs.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/idr.h" 1
|
|
# 30 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((no_instrument_function)) void idr_preload_end(void)
|
|
{
|
|
__asm__ __volatile__("": : :"memory");
|
|
}
|
|
# 115 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/idr.h"
|
|
static inline __attribute__((no_instrument_function)) void *idr_find(struct idr *idr, int id)
|
|
{
|
|
struct idr_layer *hint = ({ typeof(*(idr->hint)) *_________p1 = (typeof(*(idr->hint)) *)(*({ __attribute__((unused)) typeof((idr->hint)) __var = ( typeof((idr->hint))) 0; (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)])) *)(*({ __attribute__((unused)) typeof((hint->ary[id & ((1 << 8)-1)])) __var = ( typeof((hint->ary[id & ((1 << 8)-1)]))) 0; (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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/idr.h"
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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,
|
|
KERNFS_EMPTY_DIR = 0x1000,
|
|
};
|
|
|
|
|
|
enum kernfs_root_flag {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
KERNFS_ROOT_CREATE_DEACTIVATED = 0x0001,
|
|
# 71 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
# 107 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernfs.h"
|
|
struct kernfs_node {
|
|
atomic_t count;
|
|
atomic_t active;
|
|
# 119 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
# 147 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
char *prealloc_buf;
|
|
|
|
size_t atomic_write_len;
|
|
bool mmapped;
|
|
const struct vm_operations_struct *vm_ops;
|
|
};
|
|
|
|
struct kernfs_ops {
|
|
# 202 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
# 218 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernfs.h"
|
|
size_t atomic_write_len;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool prealloc;
|
|
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__((no_instrument_function)) enum kernfs_node_type kernfs_type(struct kernfs_node *kn)
|
|
{
|
|
return kn->flags & 0x000f;
|
|
}
|
|
# 251 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernfs.h"
|
|
static 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("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernfs.h", 253); __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("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernfs.h", 254); __builtin_expect(!!(__ret_warn_on), 0); })) __warned = true; __builtin_expect(!!(__ret_warn_once), 0); });
|
|
kn->flags |= KERNFS_NS;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static 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 * 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_empty_dir(struct kernfs_node *parent,
|
|
const char *name);
|
|
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);
|
|
# 421 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kernfs.h"
|
|
static 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__((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__((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__((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__((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__((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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sysfs.h" 2
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kobject_ns.h" 1
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
# 127 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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);
|
|
};
|
|
# 184 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 sysfs_create_dir_ns(struct kobject *kobj, const void *ns);
|
|
void sysfs_remove_dir(struct kobject *kobj);
|
|
int sysfs_rename_dir_ns(struct kobject *kobj, const char *new_name,
|
|
const void *new_ns);
|
|
int sysfs_move_dir_ns(struct kobject *kobj,
|
|
struct kobject *new_parent_kobj,
|
|
const void *new_ns);
|
|
int sysfs_create_mount_point(struct kobject *parent_kobj,
|
|
const char *name);
|
|
void sysfs_remove_mount_point(struct kobject *parent_kobj,
|
|
const char *name);
|
|
|
|
int sysfs_create_file_ns(struct kobject *kobj,
|
|
const struct attribute *attr,
|
|
const void *ns);
|
|
int sysfs_create_files(struct kobject *kobj,
|
|
const struct attribute **attr);
|
|
int 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 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 sysfs_create_link(struct kobject *kobj, struct kobject *target,
|
|
const char *name);
|
|
int 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 sysfs_create_group(struct kobject *kobj,
|
|
const struct attribute_group *grp);
|
|
int 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 sysfs_init(void);
|
|
|
|
static inline __attribute__((no_instrument_function)) void sysfs_enable_ns(struct kernfs_node *kn)
|
|
{
|
|
return kernfs_enable_ns(kn);
|
|
}
|
|
# 455 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/sysfs.h"
|
|
static inline __attribute__((no_instrument_function)) int sysfs_create_file(struct kobject *kobj,
|
|
const struct attribute *attr)
|
|
{
|
|
return sysfs_create_file_ns(kobj, attr, ((void *)0));
|
|
}
|
|
|
|
static 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__((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__((no_instrument_function)) void sysfs_notify_dirent(struct kernfs_node *kn)
|
|
{
|
|
kernfs_notify(kn);
|
|
}
|
|
|
|
static 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__((no_instrument_function)) struct kernfs_node *sysfs_get(struct kernfs_node *kn)
|
|
{
|
|
kernfs_get(kn);
|
|
return kn;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void sysfs_put(struct kernfs_node *kn)
|
|
{
|
|
kernfs_put(kn);
|
|
}
|
|
# 22 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kobject.h" 2
|
|
# 37 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/kobject.h"
|
|
extern char uevent_helper[];
|
|
|
|
|
|
|
|
extern u64 uevent_seqnum;
|
|
# 53 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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__((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)))
|
|
int kobject_add(struct kobject *kobj, struct kobject *parent,
|
|
const char *fmt, ...);
|
|
extern __attribute__((format(printf, 4, 5)))
|
|
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 * kobject_create(void);
|
|
extern struct kobject * kobject_create_and_add(const char *name,
|
|
struct kobject *parent);
|
|
|
|
extern int kobject_rename(struct kobject *, const char *new_name);
|
|
extern int 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 kset_register(struct kset *kset);
|
|
extern void kset_unregister(struct kset *kset);
|
|
extern struct kset * kset_create_and_add(const char *name,
|
|
const struct kset_uevent_ops *u,
|
|
struct kobject *parent_kobj);
|
|
|
|
static 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__((no_instrument_function)) struct kset *kset_get(struct kset *k)
|
|
{
|
|
return k ? to_kset(kobject_get(&k->kobj)) : ((void *)0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void kset_put(struct kset *k)
|
|
{
|
|
kobject_put(&k->kobj);
|
|
}
|
|
|
|
static 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);
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/klist.h" 1
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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_prev(struct klist_iter *i);
|
|
extern struct klist_node *klist_next(struct klist_iter *i);
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pinctrl/devinfo.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pinctrl/devinfo.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pinctrl/consumer.h" 1
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pinctrl/consumer.h"
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pinctrl/pinctrl-state.h" 1
|
|
# 19 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pinctrl/consumer.h" 2
|
|
|
|
|
|
struct pinctrl;
|
|
struct pinctrl_state;
|
|
struct device;
|
|
|
|
|
|
|
|
|
|
extern int pinctrl_request_gpio(unsigned gpio);
|
|
extern void pinctrl_free_gpio(unsigned gpio);
|
|
extern int pinctrl_gpio_direction_input(unsigned gpio);
|
|
extern int pinctrl_gpio_direction_output(unsigned gpio);
|
|
|
|
extern struct pinctrl * pinctrl_get(struct device *dev);
|
|
extern void pinctrl_put(struct pinctrl *p);
|
|
extern struct pinctrl_state * pinctrl_lookup_state(
|
|
struct pinctrl *p,
|
|
const char *name);
|
|
extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s);
|
|
|
|
extern struct pinctrl * devm_pinctrl_get(struct device *dev);
|
|
extern void devm_pinctrl_put(struct pinctrl *p);
|
|
|
|
|
|
extern int pinctrl_pm_select_default_state(struct device *dev);
|
|
extern int pinctrl_pm_select_sleep_state(struct device *dev);
|
|
extern int pinctrl_pm_select_idle_state(struct device *dev);
|
|
# 131 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pinctrl/consumer.h"
|
|
static inline __attribute__((no_instrument_function)) struct pinctrl * pinctrl_get_select(
|
|
struct device *dev, const char *name)
|
|
{
|
|
struct pinctrl *p;
|
|
struct pinctrl_state *s;
|
|
int ret;
|
|
|
|
p = pinctrl_get(dev);
|
|
if (IS_ERR(p))
|
|
return p;
|
|
|
|
s = pinctrl_lookup_state(p, name);
|
|
if (IS_ERR(s)) {
|
|
pinctrl_put(p);
|
|
return ERR_PTR(PTR_ERR(s));
|
|
}
|
|
|
|
ret = pinctrl_select_state(p, s);
|
|
if (ret < 0) {
|
|
pinctrl_put(p);
|
|
return ERR_PTR(ret);
|
|
}
|
|
|
|
return p;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct pinctrl * pinctrl_get_select_default(
|
|
struct device *dev)
|
|
{
|
|
return pinctrl_get_select(dev, "default");
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct pinctrl * devm_pinctrl_get_select(
|
|
struct device *dev, const char *name)
|
|
{
|
|
struct pinctrl *p;
|
|
struct pinctrl_state *s;
|
|
int ret;
|
|
|
|
p = devm_pinctrl_get(dev);
|
|
if (IS_ERR(p))
|
|
return p;
|
|
|
|
s = pinctrl_lookup_state(p, name);
|
|
if (IS_ERR(s)) {
|
|
devm_pinctrl_put(p);
|
|
return ERR_CAST(s);
|
|
}
|
|
|
|
ret = pinctrl_select_state(p, s);
|
|
if (ret < 0) {
|
|
devm_pinctrl_put(p);
|
|
return ERR_PTR(ret);
|
|
}
|
|
|
|
return p;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct pinctrl * devm_pinctrl_get_select_default(
|
|
struct device *dev)
|
|
{
|
|
return devm_pinctrl_get_select(dev, "default");
|
|
}
|
|
# 22 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pinctrl/devinfo.h" 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct dev_pin_info {
|
|
struct pinctrl *p;
|
|
struct pinctrl_state *default_state;
|
|
|
|
struct pinctrl_state *sleep_state;
|
|
struct pinctrl_state *idle_state;
|
|
|
|
};
|
|
|
|
extern int pinctrl_bind_pins(struct device *dev);
|
|
# 25 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ratelimit.h" 1
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ratelimit.h"
|
|
struct ratelimit_state {
|
|
raw_spinlock_t lock;
|
|
|
|
int interval;
|
|
int burst;
|
|
int printed;
|
|
int missed;
|
|
unsigned long begin;
|
|
};
|
|
# 34 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ratelimit.h"
|
|
static 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 = { { 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/device.h" 1
|
|
|
|
|
|
|
|
struct dev_archdata {
|
|
|
|
struct dma_map_ops *dma_ops;
|
|
|
|
|
|
void *iommu;
|
|
|
|
};
|
|
|
|
struct pdev_archdata {
|
|
};
|
|
# 31 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h"
|
|
extern int bus_create_file(struct bus_type *,
|
|
struct bus_attribute *);
|
|
extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
|
|
# 104 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 bus_register(struct bus_type *bus);
|
|
|
|
extern void bus_unregister(struct bus_type *bus);
|
|
|
|
extern int 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h"
|
|
extern int 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 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 __class_register(struct class *class,
|
|
struct lock_class_key *key);
|
|
extern void class_unregister(struct class *class);
|
|
# 396 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h"
|
|
extern int 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__((no_instrument_function)) int class_create_file(struct class *class,
|
|
const struct class_attribute *attr)
|
|
{
|
|
return class_create_file_ns(class, attr, ((void *)0));
|
|
}
|
|
|
|
static 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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 class_interface_register(struct class_interface *);
|
|
extern void class_interface_unregister(struct class_interface *);
|
|
|
|
extern struct class * __class_create(struct module *owner,
|
|
const char *name,
|
|
struct lock_class_key *key);
|
|
extern void class_destroy(struct class *cls);
|
|
# 501 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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 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 * 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__((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__((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__((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 {
|
|
|
|
struct acpi_device *companion;
|
|
|
|
};
|
|
# 730 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
|
|
|
|
struct dev_pin_info *pins;
|
|
|
|
|
|
|
|
int numa_node;
|
|
|
|
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__((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 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pm_wakeup.h" 1
|
|
# 46 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/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;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool device_can_wakeup(struct device *dev)
|
|
{
|
|
return dev->power.can_wakeup;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool device_may_wakeup(struct device *dev)
|
|
{
|
|
return dev->power.can_wakeup && !!dev->power.wakeup;
|
|
}
|
|
|
|
|
|
extern void wakeup_source_prepare(struct wakeup_source *ws, const char *name);
|
|
extern struct wakeup_source *wakeup_source_create(const char *name);
|
|
extern void wakeup_source_drop(struct wakeup_source *ws);
|
|
extern void wakeup_source_destroy(struct wakeup_source *ws);
|
|
extern void wakeup_source_add(struct wakeup_source *ws);
|
|
extern void wakeup_source_remove(struct wakeup_source *ws);
|
|
extern struct wakeup_source *wakeup_source_register(const char *name);
|
|
extern void wakeup_source_unregister(struct wakeup_source *ws);
|
|
extern int device_wakeup_enable(struct device *dev);
|
|
extern int device_wakeup_disable(struct device *dev);
|
|
extern void device_set_wakeup_capable(struct device *dev, bool capable);
|
|
extern int device_init_wakeup(struct device *dev, bool val);
|
|
extern int device_set_wakeup_enable(struct device *dev, bool enable);
|
|
extern void __pm_stay_awake(struct wakeup_source *ws);
|
|
extern void pm_stay_awake(struct device *dev);
|
|
extern void __pm_relax(struct wakeup_source *ws);
|
|
extern void pm_relax(struct device *dev);
|
|
extern void __pm_wakeup_event(struct wakeup_source *ws, unsigned int msec);
|
|
extern void pm_wakeup_event(struct device *dev, unsigned int msec);
|
|
# 182 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/pm_wakeup.h"
|
|
static 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__((no_instrument_function)) void wakeup_source_trash(struct wakeup_source *ws)
|
|
{
|
|
wakeup_source_remove(ws);
|
|
wakeup_source_drop(ws);
|
|
}
|
|
# 808 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h" 2
|
|
|
|
static 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, ...);
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int dev_to_node(struct device *dev)
|
|
{
|
|
return dev->numa_node;
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void set_dev_node(struct device *dev, int node)
|
|
{
|
|
dev->numa_node = node;
|
|
}
|
|
# 840 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/device.h"
|
|
static inline __attribute__((no_instrument_function)) void *dev_get_drvdata(const struct device *dev)
|
|
{
|
|
return dev->driver_data;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void dev_set_drvdata(struct device *dev, void *data)
|
|
{
|
|
dev->driver_data = data;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) unsigned int dev_get_uevent_suppress(const struct device *dev)
|
|
{
|
|
return dev->kobj.uevent_suppress;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void dev_set_uevent_suppress(struct device *dev, int val)
|
|
{
|
|
dev->kobj.uevent_suppress = val;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int device_is_registered(struct device *dev)
|
|
{
|
|
return dev->kobj.state_in_sysfs;
|
|
}
|
|
|
|
static 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__((no_instrument_function)) void device_disable_async_suspend(struct device *dev)
|
|
{
|
|
if (!dev->power.is_prepared)
|
|
dev->power.async_suspend = false;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool device_async_suspend_enabled(struct device *dev)
|
|
{
|
|
return !!dev->power.async_suspend;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void pm_suspend_ignore_children(struct device *dev, bool enable)
|
|
{
|
|
dev->power.ignore_children = enable;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void dev_pm_syscore_device(struct device *dev, bool val)
|
|
{
|
|
|
|
dev->power.syscore = val;
|
|
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void device_lock(struct device *dev)
|
|
{
|
|
mutex_lock(&dev->mutex);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) int device_trylock(struct device *dev)
|
|
{
|
|
return mutex_trylock(&dev->mutex);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void device_unlock(struct device *dev)
|
|
{
|
|
mutex_unlock(&dev->mutex);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void device_lock_assert(struct device *dev)
|
|
{
|
|
do { (void)(&dev->mutex); } while (0);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) struct device_node *dev_of_node(struct device *dev)
|
|
{
|
|
if (!(0 || 0))
|
|
return ((void *)0);
|
|
return dev->of_node;
|
|
}
|
|
|
|
void driver_init(void);
|
|
|
|
|
|
|
|
|
|
extern int device_register(struct device *dev);
|
|
extern void device_unregister(struct device *dev);
|
|
extern void device_initialize(struct device *dev);
|
|
extern int 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 int device_for_each_child_reverse(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__((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__((no_instrument_function)) void *dev_get_platdata(const struct device *dev)
|
|
{
|
|
return dev->platform_data;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
extern int device_bind_driver(struct device *dev);
|
|
extern void device_release_driver(struct device *dev);
|
|
extern int device_attach(struct device *dev);
|
|
extern int driver_attach(struct device_driver *drv);
|
|
extern int 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);
|
|
|
|
|
|
extern int devtmpfs_create_node(struct device *dev);
|
|
extern int devtmpfs_delete_node(struct device *dev);
|
|
extern int devtmpfs_mount(const char *mntdir);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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, ...);
|
|
# 18 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/node.h" 2
|
|
|
|
|
|
|
|
struct node {
|
|
struct device dev;
|
|
|
|
|
|
struct work_struct node_work;
|
|
|
|
};
|
|
|
|
struct memory_block;
|
|
extern struct node *node_devices[];
|
|
typedef void (*node_registration_func_t)(struct node *);
|
|
|
|
extern void unregister_node(struct node *node);
|
|
|
|
extern int register_one_node(int nid);
|
|
extern void unregister_one_node(int nid);
|
|
extern int register_cpu_under_node(unsigned int cpu, unsigned int nid);
|
|
extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid);
|
|
extern int register_mem_sect_under_node(struct memory_block *mem_blk,
|
|
int nid);
|
|
extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
|
|
unsigned long phys_index);
|
|
|
|
|
|
extern void register_hugetlbfs_with_node(node_registration_func_t doregister,
|
|
node_registration_func_t unregister);
|
|
# 17 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpu.h" 2
|
|
|
|
|
|
|
|
struct device;
|
|
struct device_node;
|
|
struct attribute_group;
|
|
|
|
struct cpu {
|
|
int node_id;
|
|
int hotpluggable;
|
|
struct device dev;
|
|
};
|
|
|
|
extern int register_cpu(struct cpu *cpu, int num);
|
|
extern struct device *get_cpu_device(unsigned cpu);
|
|
extern bool cpu_is_hotpluggable(unsigned cpu);
|
|
extern bool arch_match_cpu_phys_id(int cpu, u64 phys_id);
|
|
extern bool arch_find_n_match_cpu_physical_id(struct device_node *cpun,
|
|
int cpu, unsigned int *thread);
|
|
|
|
extern int cpu_add_dev_attr(struct device_attribute *attr);
|
|
extern void cpu_remove_dev_attr(struct device_attribute *attr);
|
|
|
|
extern int cpu_add_dev_attr_group(struct attribute_group *attrs);
|
|
extern void cpu_remove_dev_attr_group(struct attribute_group *attrs);
|
|
|
|
extern struct device *cpu_device_create(struct device *parent, void *drvdata,
|
|
const struct attribute_group **groups,
|
|
const char *fmt, ...);
|
|
|
|
extern void unregister_cpu(struct cpu *cpu);
|
|
extern ssize_t arch_cpu_probe(const char *, size_t);
|
|
extern ssize_t arch_cpu_release(const char *, size_t);
|
|
|
|
struct notifier_block;
|
|
|
|
|
|
|
|
|
|
enum {
|
|
# 68 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpu.h"
|
|
CPU_PRI_SCHED_ACTIVE = ((int)(~0U>>1)),
|
|
CPU_PRI_CPUSET_ACTIVE = ((int)(~0U>>1)) - 1,
|
|
CPU_PRI_SCHED_INACTIVE = (-((int)(~0U>>1)) - 1) + 1,
|
|
CPU_PRI_CPUSET_INACTIVE = (-((int)(~0U>>1)) - 1),
|
|
|
|
|
|
CPU_PRI_PERF = 20,
|
|
CPU_PRI_MIGRATION = 10,
|
|
|
|
CPU_PRI_WORKQUEUE_UP = 5,
|
|
CPU_PRI_WORKQUEUE_DOWN = -5,
|
|
};
|
|
# 134 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpu.h"
|
|
extern int register_cpu_notifier(struct notifier_block *nb);
|
|
extern int __register_cpu_notifier(struct notifier_block *nb);
|
|
extern void unregister_cpu_notifier(struct notifier_block *nb);
|
|
extern void __unregister_cpu_notifier(struct notifier_block *nb);
|
|
# 164 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpu.h"
|
|
int cpu_up(unsigned int cpu);
|
|
void notify_cpu_starting(unsigned int cpu);
|
|
extern void cpu_maps_update_begin(void);
|
|
extern void cpu_maps_update_done(void);
|
|
# 212 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpu.h"
|
|
extern struct bus_type cpu_subsys;
|
|
|
|
|
|
|
|
|
|
extern void cpu_hotplug_begin(void);
|
|
extern void cpu_hotplug_done(void);
|
|
extern void get_online_cpus(void);
|
|
extern bool try_get_online_cpus(void);
|
|
extern void put_online_cpus(void);
|
|
extern void cpu_hotplug_disable(void);
|
|
extern void cpu_hotplug_enable(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void clear_tasks_mm_cpumask(int cpu);
|
|
int cpu_down(unsigned int cpu);
|
|
# 252 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/cpu.h"
|
|
extern int disable_nonboot_cpus(void);
|
|
extern void enable_nonboot_cpus(void);
|
|
|
|
|
|
|
|
|
|
|
|
enum cpuhp_state {
|
|
CPUHP_OFFLINE,
|
|
CPUHP_ONLINE,
|
|
};
|
|
|
|
void cpu_startup_entry(enum cpuhp_state state);
|
|
|
|
void cpu_idle_poll_ctrl(bool enable);
|
|
|
|
void arch_cpu_idle(void);
|
|
void arch_cpu_idle_prepare(void);
|
|
void arch_cpu_idle_enter(void);
|
|
void arch_cpu_idle_exit(void);
|
|
void arch_cpu_idle_dead(void);
|
|
# 49 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq_work.h" 1
|
|
# 20 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq_work.h"
|
|
struct irq_work {
|
|
unsigned long flags;
|
|
struct llist_node llnode;
|
|
void (*func)(struct irq_work *);
|
|
};
|
|
|
|
static inline __attribute__((no_instrument_function))
|
|
void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *))
|
|
{
|
|
work->flags = 0;
|
|
work->func = func;
|
|
}
|
|
|
|
|
|
|
|
bool irq_work_queue(struct irq_work *work);
|
|
|
|
|
|
bool irq_work_queue_on(struct irq_work *work, int cpu);
|
|
|
|
|
|
void irq_work_run(void);
|
|
void irq_work_tick(void);
|
|
void irq_work_sync(struct irq_work *work);
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/asm/irq_work.h" 1
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool arch_irq_work_has_interrupt(void)
|
|
{
|
|
return (__builtin_constant_p(( 0*32+ 9)) && ( (((( 0*32+ 9))>>5)==0 && (1UL<<((( 0*32+ 9))&31) & ((1<<(( 0*32+ 0) & 31))|0|(1<<(( 0*32+ 5) & 31))|(1<<(( 0*32+ 6) & 31))| (1<<(( 0*32+ 8) & 31))|0|(1<<(( 0*32+24) & 31))|(1<<(( 0*32+15) & 31))| (1<<(( 0*32+25) & 31))|(1<<(( 0*32+26) & 31))))) || (((( 0*32+ 9))>>5)==1 && (1UL<<((( 0*32+ 9))&31) & ((1<<(( 1*32+29) & 31))|0))) || (((( 0*32+ 9))>>5)==2 && (1UL<<((( 0*32+ 9))&31) & 0)) || (((( 0*32+ 9))>>5)==3 && (1UL<<((( 0*32+ 9))&31) & ((1<<(( 3*32+20) & 31))))) || (((( 0*32+ 9))>>5)==4 && (1UL<<((( 0*32+ 9))&31) & (0))) || (((( 0*32+ 9))>>5)==5 && (1UL<<((( 0*32+ 9))&31) & 0)) || (((( 0*32+ 9))>>5)==6 && (1UL<<((( 0*32+ 9))&31) & 0)) || (((( 0*32+ 9))>>5)==7 && (1UL<<((( 0*32+ 9))&31) & 0)) || (((( 0*32+ 9))>>5)==8 && (1UL<<((( 0*32+ 9))&31) & 0)) || (((( 0*32+ 9))>>5)==9 && (1UL<<((( 0*32+ 9))&31) & 0)) ) ? 1 : (__builtin_constant_p((( 0*32+ 9))) ? constant_test_bit((( 0*32+ 9)), ((unsigned long *)((&boot_cpu_data)->x86_capability))) : variable_test_bit((( 0*32+ 9)), ((unsigned long *)((&boot_cpu_data)->x86_capability)))));
|
|
}
|
|
# 47 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/irq_work.h" 2
|
|
|
|
bool irq_work_needs_cpu(void);
|
|
# 50 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/static_key.h" 1
|
|
# 51 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jump_label_ratelimit.h" 1
|
|
# 21 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jump_label_ratelimit.h"
|
|
struct static_key_deferred {
|
|
struct static_key key;
|
|
};
|
|
static inline __attribute__((no_instrument_function)) void static_key_slow_dec_deferred(struct static_key_deferred *key)
|
|
{
|
|
({ int __ret_warn_on = !!(!static_key_initialized); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_fmt("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jump_label_ratelimit.h", 26, "%s used before call to jump_label_init", __func__); __builtin_expect(!!(__ret_warn_on), 0); });
|
|
static_key_slow_dec(&key->key);
|
|
}
|
|
static inline __attribute__((no_instrument_function)) void
|
|
jump_label_rate_limit(struct static_key_deferred *key,
|
|
unsigned long rl)
|
|
{
|
|
({ int __ret_warn_on = !!(!static_key_initialized); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_slowpath_fmt("/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/jump_label_ratelimit.h", 33, "%s used before call to jump_label_init", __func__); __builtin_expect(!!(__ret_warn_on), 0); });
|
|
}
|
|
# 52 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 2
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_regs.h" 1
|
|
|
|
|
|
|
|
struct perf_regs {
|
|
__u64 abi;
|
|
struct pt_regs *regs;
|
|
};
|
|
|
|
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/arch/x86/include/uapi/asm/perf_regs.h" 1
|
|
|
|
|
|
|
|
enum perf_event_x86_regs {
|
|
PERF_REG_X86_AX,
|
|
PERF_REG_X86_BX,
|
|
PERF_REG_X86_CX,
|
|
PERF_REG_X86_DX,
|
|
PERF_REG_X86_SI,
|
|
PERF_REG_X86_DI,
|
|
PERF_REG_X86_BP,
|
|
PERF_REG_X86_SP,
|
|
PERF_REG_X86_IP,
|
|
PERF_REG_X86_FLAGS,
|
|
PERF_REG_X86_CS,
|
|
PERF_REG_X86_SS,
|
|
PERF_REG_X86_DS,
|
|
PERF_REG_X86_ES,
|
|
PERF_REG_X86_FS,
|
|
PERF_REG_X86_GS,
|
|
PERF_REG_X86_R8,
|
|
PERF_REG_X86_R9,
|
|
PERF_REG_X86_R10,
|
|
PERF_REG_X86_R11,
|
|
PERF_REG_X86_R12,
|
|
PERF_REG_X86_R13,
|
|
PERF_REG_X86_R14,
|
|
PERF_REG_X86_R15,
|
|
|
|
PERF_REG_X86_32_MAX = PERF_REG_X86_GS + 1,
|
|
PERF_REG_X86_64_MAX = PERF_REG_X86_R15 + 1,
|
|
};
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_regs.h" 2
|
|
u64 perf_reg_value(struct pt_regs *regs, int idx);
|
|
int perf_reg_validate(u64 mask);
|
|
u64 perf_reg_abi(struct task_struct *task);
|
|
void perf_get_regs_user(struct perf_regs *regs_user,
|
|
struct pt_regs *regs,
|
|
struct pt_regs *regs_user_copy);
|
|
# 55 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h" 2
|
|
|
|
|
|
|
|
struct perf_callchain_entry {
|
|
__u64 nr;
|
|
__u64 ip[127];
|
|
};
|
|
|
|
struct perf_raw_record {
|
|
u32 size;
|
|
void *data;
|
|
};
|
|
# 77 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
struct perf_branch_stack {
|
|
__u64 nr;
|
|
struct perf_branch_entry entries[0];
|
|
};
|
|
|
|
struct task_struct;
|
|
|
|
|
|
|
|
|
|
struct hw_perf_event_extra {
|
|
u64 config;
|
|
unsigned int reg;
|
|
int alloc;
|
|
int idx;
|
|
};
|
|
|
|
struct event_constraint;
|
|
|
|
|
|
|
|
|
|
struct hw_perf_event {
|
|
|
|
union {
|
|
struct {
|
|
u64 config;
|
|
u64 last_tag;
|
|
unsigned long config_base;
|
|
unsigned long event_base;
|
|
int event_base_rdpmc;
|
|
int idx;
|
|
int last_cpu;
|
|
int flags;
|
|
|
|
struct hw_perf_event_extra extra_reg;
|
|
struct hw_perf_event_extra branch_reg;
|
|
|
|
struct event_constraint *constraint;
|
|
};
|
|
struct {
|
|
struct hrtimer hrtimer;
|
|
};
|
|
struct {
|
|
struct task_struct *tp_target;
|
|
|
|
struct list_head tp_list;
|
|
};
|
|
|
|
struct {
|
|
|
|
|
|
|
|
|
|
|
|
struct task_struct *bp_target;
|
|
struct arch_hw_breakpoint info;
|
|
struct list_head bp_list;
|
|
};
|
|
|
|
};
|
|
int state;
|
|
local64_t prev_count;
|
|
u64 sample_period;
|
|
u64 last_period;
|
|
local64_t period_left;
|
|
u64 interrupts_seq;
|
|
u64 interrupts;
|
|
|
|
u64 freq_time_stamp;
|
|
u64 freq_count_stamp;
|
|
|
|
};
|
|
# 158 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
struct perf_event;
|
|
# 173 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
struct pmu {
|
|
struct list_head entry;
|
|
|
|
struct module *module;
|
|
struct device *dev;
|
|
const struct attribute_group **attr_groups;
|
|
const char *name;
|
|
int type;
|
|
|
|
|
|
|
|
|
|
int capabilities;
|
|
|
|
int * pmu_disable_count;
|
|
struct perf_cpu_context * pmu_cpu_context;
|
|
int task_ctx_nr;
|
|
int hrtimer_interval_ms;
|
|
|
|
|
|
|
|
|
|
|
|
void (*pmu_enable) (struct pmu *pmu);
|
|
void (*pmu_disable) (struct pmu *pmu);
|
|
|
|
|
|
|
|
|
|
|
|
int (*event_init) (struct perf_event *event);
|
|
# 213 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
int (*add) (struct perf_event *event, int flags);
|
|
void (*del) (struct perf_event *event, int flags);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void (*start) (struct perf_event *event, int flags);
|
|
void (*stop) (struct perf_event *event, int flags);
|
|
|
|
|
|
|
|
|
|
void (*read) (struct perf_event *event);
|
|
# 237 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
void (*start_txn) (struct pmu *pmu);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int (*commit_txn) (struct pmu *pmu);
|
|
|
|
|
|
|
|
|
|
void (*cancel_txn) (struct pmu *pmu);
|
|
|
|
|
|
|
|
|
|
|
|
int (*event_idx) (struct perf_event *event);
|
|
|
|
|
|
|
|
|
|
void (*flush_branch_stack) (void);
|
|
};
|
|
|
|
|
|
|
|
|
|
enum perf_event_active_state {
|
|
PERF_EVENT_STATE_EXIT = -3,
|
|
PERF_EVENT_STATE_ERROR = -2,
|
|
PERF_EVENT_STATE_OFF = -1,
|
|
PERF_EVENT_STATE_INACTIVE = 0,
|
|
PERF_EVENT_STATE_ACTIVE = 1,
|
|
};
|
|
|
|
struct file;
|
|
struct perf_sample_data;
|
|
|
|
typedef void (*perf_overflow_handler_t)(struct perf_event *,
|
|
struct perf_sample_data *,
|
|
struct pt_regs *regs);
|
|
|
|
enum perf_group_flag {
|
|
PERF_GROUP_SOFTWARE = 0x1,
|
|
};
|
|
|
|
|
|
|
|
|
|
struct swevent_hlist {
|
|
struct hlist_head heads[(1 << 8)];
|
|
struct callback_head callback_head;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct perf_cgroup;
|
|
struct ring_buffer;
|
|
|
|
|
|
|
|
|
|
struct perf_event {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct list_head event_entry;
|
|
# 320 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
struct list_head group_entry;
|
|
struct list_head sibling_list;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct list_head migrate_entry;
|
|
|
|
struct hlist_node hlist_entry;
|
|
struct list_head active_entry;
|
|
int nr_siblings;
|
|
int group_flags;
|
|
struct perf_event *group_leader;
|
|
struct pmu *pmu;
|
|
|
|
enum perf_event_active_state state;
|
|
unsigned int attach_state;
|
|
local64_t count;
|
|
atomic64_t child_count;
|
|
# 351 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
u64 total_time_enabled;
|
|
u64 total_time_running;
|
|
# 364 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
u64 tstamp_enabled;
|
|
u64 tstamp_running;
|
|
u64 tstamp_stopped;
|
|
# 376 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
u64 shadow_ctx_time;
|
|
|
|
struct perf_event_attr attr;
|
|
u16 header_size;
|
|
u16 id_header_size;
|
|
u16 read_size;
|
|
struct hw_perf_event hw;
|
|
|
|
struct perf_event_context *ctx;
|
|
atomic_long_t refcount;
|
|
|
|
|
|
|
|
|
|
|
|
atomic64_t child_total_time_enabled;
|
|
atomic64_t child_total_time_running;
|
|
|
|
|
|
|
|
|
|
struct mutex child_mutex;
|
|
struct list_head child_list;
|
|
struct perf_event *parent;
|
|
|
|
int oncpu;
|
|
int cpu;
|
|
|
|
struct list_head owner_entry;
|
|
struct task_struct *owner;
|
|
|
|
|
|
struct mutex mmap_mutex;
|
|
atomic_t mmap_count;
|
|
|
|
struct ring_buffer *rb;
|
|
struct list_head rb_entry;
|
|
unsigned long rcu_batches;
|
|
int rcu_pending;
|
|
|
|
|
|
wait_queue_head_t waitq;
|
|
struct fasync_struct *fasync;
|
|
|
|
|
|
int pending_wakeup;
|
|
int pending_kill;
|
|
int pending_disable;
|
|
struct irq_work pending;
|
|
|
|
atomic_t event_limit;
|
|
|
|
void (*destroy)(struct perf_event *);
|
|
struct callback_head callback_head;
|
|
|
|
struct pid_namespace *ns;
|
|
u64 id;
|
|
|
|
perf_overflow_handler_t overflow_handler;
|
|
void *overflow_handler_context;
|
|
|
|
|
|
struct ftrace_event_call *tp_event;
|
|
struct event_filter *filter;
|
|
|
|
struct ftrace_ops ftrace_ops;
|
|
|
|
|
|
|
|
|
|
struct perf_cgroup *cgrp;
|
|
int cgrp_defer_enabled;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct perf_event_context {
|
|
struct pmu *pmu;
|
|
|
|
|
|
|
|
|
|
raw_spinlock_t lock;
|
|
|
|
|
|
|
|
|
|
|
|
struct mutex mutex;
|
|
|
|
struct list_head pinned_groups;
|
|
struct list_head flexible_groups;
|
|
struct list_head event_list;
|
|
int nr_events;
|
|
int nr_active;
|
|
int is_active;
|
|
int nr_stat;
|
|
int nr_freq;
|
|
int rotate_disable;
|
|
atomic_t refcount;
|
|
struct task_struct *task;
|
|
|
|
|
|
|
|
|
|
u64 time;
|
|
u64 timestamp;
|
|
|
|
|
|
|
|
|
|
|
|
struct perf_event_context *parent_ctx;
|
|
u64 parent_gen;
|
|
u64 generation;
|
|
int pin_count;
|
|
int nr_cgroups;
|
|
int nr_branch_stack;
|
|
struct callback_head callback_head;
|
|
|
|
struct delayed_work orphans_remove;
|
|
bool orphans_remove_sched;
|
|
};
|
|
# 515 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
struct perf_cpu_context {
|
|
struct perf_event_context ctx;
|
|
struct perf_event_context *task_ctx;
|
|
int active_oncpu;
|
|
int exclusive;
|
|
struct hrtimer hrtimer;
|
|
ktime_t hrtimer_interval;
|
|
struct list_head rotation_list;
|
|
struct pmu *unique_pmu;
|
|
struct perf_cgroup *cgrp;
|
|
};
|
|
|
|
struct perf_output_handle {
|
|
struct perf_event *event;
|
|
struct ring_buffer *rb;
|
|
unsigned long wakeup;
|
|
unsigned long size;
|
|
void *addr;
|
|
int page;
|
|
};
|
|
|
|
|
|
|
|
extern int perf_pmu_register(struct pmu *pmu, const char *name, int type);
|
|
extern void perf_pmu_unregister(struct pmu *pmu);
|
|
|
|
extern int perf_num_counters(void);
|
|
extern const char *perf_pmu_name(void);
|
|
extern void __perf_event_task_sched_in(struct task_struct *prev,
|
|
struct task_struct *task);
|
|
extern void __perf_event_task_sched_out(struct task_struct *prev,
|
|
struct task_struct *next);
|
|
extern int perf_event_init_task(struct task_struct *child);
|
|
extern void perf_event_exit_task(struct task_struct *child);
|
|
extern void perf_event_free_task(struct task_struct *task);
|
|
extern void perf_event_delayed_put(struct task_struct *task);
|
|
extern void perf_event_print_debug(void);
|
|
extern void perf_pmu_disable(struct pmu *pmu);
|
|
extern void perf_pmu_enable(struct pmu *pmu);
|
|
extern int perf_event_task_disable(void);
|
|
extern int perf_event_task_enable(void);
|
|
extern int perf_event_refresh(struct perf_event *event, int refresh);
|
|
extern void perf_event_update_userpage(struct perf_event *event);
|
|
extern int perf_event_release_kernel(struct perf_event *event);
|
|
extern struct perf_event *
|
|
perf_event_create_kernel_counter(struct perf_event_attr *attr,
|
|
int cpu,
|
|
struct task_struct *task,
|
|
perf_overflow_handler_t callback,
|
|
void *context);
|
|
extern void perf_pmu_migrate_context(struct pmu *pmu,
|
|
int src_cpu, int dst_cpu);
|
|
extern u64 perf_event_read_value(struct perf_event *event,
|
|
u64 *enabled, u64 *running);
|
|
|
|
|
|
struct perf_sample_data {
|
|
|
|
|
|
|
|
|
|
u64 addr;
|
|
struct perf_raw_record *raw;
|
|
struct perf_branch_stack *br_stack;
|
|
u64 period;
|
|
u64 weight;
|
|
u64 txn;
|
|
union perf_mem_data_src data_src;
|
|
|
|
|
|
|
|
|
|
|
|
u64 type;
|
|
u64 ip;
|
|
struct {
|
|
u32 pid;
|
|
u32 tid;
|
|
} tid_entry;
|
|
u64 time;
|
|
u64 id;
|
|
u64 stream_id;
|
|
struct {
|
|
u32 cpu;
|
|
u32 reserved;
|
|
} cpu_entry;
|
|
struct perf_callchain_entry *callchain;
|
|
|
|
|
|
|
|
|
|
|
|
struct perf_regs regs_user;
|
|
struct pt_regs regs_user_copy;
|
|
|
|
struct perf_regs regs_intr;
|
|
u64 stack_user_size;
|
|
} __attribute__((__aligned__((1 << (6)))));
|
|
# 621 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
static inline __attribute__((no_instrument_function)) void perf_sample_data_init(struct perf_sample_data *data,
|
|
u64 addr, u64 period)
|
|
{
|
|
|
|
data->addr = addr;
|
|
data->raw = ((void *)0);
|
|
data->br_stack = ((void *)0);
|
|
data->period = period;
|
|
data->weight = 0;
|
|
data->data_src.val = ((((__u64)0x01) << 0) | (((__u64)0x01) << 5) | (((__u64)0x01) << 19) | (((__u64)0x01) << 24) | (((__u64)0x01) << 26));
|
|
data->txn = 0;
|
|
}
|
|
|
|
extern void perf_output_sample(struct perf_output_handle *handle,
|
|
struct perf_event_header *header,
|
|
struct perf_sample_data *data,
|
|
struct perf_event *event);
|
|
extern void perf_prepare_sample(struct perf_event_header *header,
|
|
struct perf_sample_data *data,
|
|
struct perf_event *event,
|
|
struct pt_regs *regs);
|
|
|
|
extern int perf_event_overflow(struct perf_event *event,
|
|
struct perf_sample_data *data,
|
|
struct pt_regs *regs);
|
|
|
|
static inline __attribute__((no_instrument_function)) bool is_sampling_event(struct perf_event *event)
|
|
{
|
|
return event->attr.sample_period != 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) int is_software_event(struct perf_event *event)
|
|
{
|
|
return event->pmu->task_ctx_nr == perf_sw_context;
|
|
}
|
|
|
|
extern struct static_key perf_swevent_enabled[PERF_COUNT_SW_MAX];
|
|
|
|
extern void __perf_sw_event(u32, u64, struct pt_regs *, u64);
|
|
# 676 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
static inline __attribute__((no_instrument_function)) void perf_fetch_caller_regs(struct pt_regs *regs)
|
|
{
|
|
memset(regs, 0, sizeof(*regs));
|
|
|
|
{ (regs)->ip = (((unsigned long)__builtin_return_address(0))); (regs)->bp = caller_frame_pointer(); (regs)->cs = (2*8); regs->flags = 0; asm volatile( " " "movq" " " "%%""rsp" ", %0\n" : "=m" ((regs)->sp) :: "memory" ); };
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) void
|
|
perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)
|
|
{
|
|
struct pt_regs hot_regs;
|
|
|
|
if (static_key_false(&perf_swevent_enabled[event_id])) {
|
|
if (!regs) {
|
|
perf_fetch_caller_regs(&hot_regs);
|
|
regs = &hot_regs;
|
|
}
|
|
__perf_sw_event(event_id, nr, regs, addr);
|
|
}
|
|
}
|
|
|
|
extern struct static_key_deferred perf_sched_events;
|
|
|
|
static inline __attribute__((no_instrument_function)) void perf_event_task_sched_in(struct task_struct *prev,
|
|
struct task_struct *task)
|
|
{
|
|
if (static_key_false(&perf_sched_events.key))
|
|
__perf_event_task_sched_in(prev, task);
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) void perf_event_task_sched_out(struct task_struct *prev,
|
|
struct task_struct *next)
|
|
{
|
|
perf_sw_event(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, ((void *)0), 0);
|
|
|
|
if (static_key_false(&perf_sched_events.key))
|
|
__perf_event_task_sched_out(prev, next);
|
|
}
|
|
|
|
extern void perf_event_mmap(struct vm_area_struct *vma);
|
|
extern struct perf_guest_info_callbacks *perf_guest_cbs;
|
|
extern int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks);
|
|
extern int perf_unregister_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks);
|
|
|
|
extern void perf_event_exec(void);
|
|
extern void perf_event_comm(struct task_struct *tsk, bool exec);
|
|
extern void perf_event_fork(struct task_struct *tsk);
|
|
|
|
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(struct perf_callchain_entry) perf_callchain_entry;
|
|
|
|
extern void perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs);
|
|
extern void perf_callchain_kernel(struct perf_callchain_entry *entry, struct pt_regs *regs);
|
|
|
|
static inline __attribute__((no_instrument_function)) void perf_callchain_store(struct perf_callchain_entry *entry, u64 ip)
|
|
{
|
|
if (entry->nr < 127)
|
|
entry->ip[entry->nr++] = ip;
|
|
}
|
|
|
|
extern int sysctl_perf_event_paranoid;
|
|
extern int sysctl_perf_event_mlock;
|
|
extern int sysctl_perf_event_sample_rate;
|
|
extern int sysctl_perf_cpu_time_max_percent;
|
|
|
|
extern void perf_sample_event_took(u64 sample_len_ns);
|
|
|
|
extern int perf_proc_update_handler(struct ctl_table *table, int write,
|
|
void *buffer, size_t *lenp,
|
|
loff_t *ppos);
|
|
extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
|
|
void *buffer, size_t *lenp,
|
|
loff_t *ppos);
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool perf_paranoid_tracepoint_raw(void)
|
|
{
|
|
return sysctl_perf_event_paranoid > -1;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool perf_paranoid_cpu(void)
|
|
{
|
|
return sysctl_perf_event_paranoid > 0;
|
|
}
|
|
|
|
static inline __attribute__((no_instrument_function)) bool perf_paranoid_kernel(void)
|
|
{
|
|
return sysctl_perf_event_paranoid > 1;
|
|
}
|
|
|
|
extern void perf_event_init(void);
|
|
extern void perf_tp_event(u64 addr, u64 count, void *record,
|
|
int entry_size, struct pt_regs *regs,
|
|
struct hlist_head *head, int rctx,
|
|
struct task_struct *task);
|
|
extern void perf_bp_event(struct perf_event *event, void *data);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) bool has_branch_stack(struct perf_event *event)
|
|
{
|
|
return event->attr.sample_type & PERF_SAMPLE_BRANCH_STACK;
|
|
}
|
|
|
|
extern int perf_output_begin(struct perf_output_handle *handle,
|
|
struct perf_event *event, unsigned int size);
|
|
extern void perf_output_end(struct perf_output_handle *handle);
|
|
extern unsigned int perf_output_copy(struct perf_output_handle *handle,
|
|
const void *buf, unsigned int len);
|
|
extern unsigned int perf_output_skip(struct perf_output_handle *handle,
|
|
unsigned int len);
|
|
extern int perf_swevent_get_recursion_context(void);
|
|
extern void perf_swevent_put_recursion_context(int rctx);
|
|
extern u64 perf_swevent_set_period(struct perf_event *event);
|
|
extern void perf_event_enable(struct perf_event *event);
|
|
extern void perf_event_disable(struct perf_event *event);
|
|
extern int __perf_event_disable(void *info);
|
|
extern void perf_event_task_tick(void);
|
|
# 844 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
static inline __attribute__((no_instrument_function)) bool perf_event_can_stop_tick(void) { return true; }
|
|
|
|
|
|
|
|
extern void perf_restore_debug_store(void);
|
|
# 890 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/perf_event.h"
|
|
struct perf_pmu_events_attr {
|
|
struct device_attribute attr;
|
|
u64 id;
|
|
const char *event_str;
|
|
};
|
|
|
|
ssize_t perf_event_sysfs_show(struct device *dev, struct device_attribute *attr,
|
|
char *page);
|
|
# 10 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h" 2
|
|
# 1 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/tracepoint.h" 1
|
|
# 11 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h" 2
|
|
|
|
struct trace_array;
|
|
struct trace_buffer;
|
|
struct tracer;
|
|
struct dentry;
|
|
|
|
struct trace_print_flags {
|
|
unsigned long mask;
|
|
const char *name;
|
|
};
|
|
|
|
struct trace_print_flags_u64 {
|
|
unsigned long long mask;
|
|
const char *name;
|
|
};
|
|
|
|
const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
|
|
unsigned long flags,
|
|
const struct trace_print_flags *flag_array);
|
|
|
|
const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
|
|
const struct trace_print_flags *symbol_array);
|
|
# 41 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
const char *ftrace_print_bitmask_seq(struct trace_seq *p, void *bitmask_ptr,
|
|
unsigned int bitmask_size);
|
|
|
|
const char *ftrace_print_hex_seq(struct trace_seq *p,
|
|
const unsigned char *buf, int len);
|
|
|
|
struct trace_iterator;
|
|
struct trace_event;
|
|
|
|
int ftrace_raw_output_prep(struct trace_iterator *iter,
|
|
struct trace_event *event);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct trace_entry {
|
|
unsigned short type;
|
|
unsigned char flags;
|
|
unsigned char preempt_count;
|
|
int pid;
|
|
};
|
|
# 73 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
struct trace_iterator {
|
|
struct trace_array *tr;
|
|
struct tracer *trace;
|
|
struct trace_buffer *trace_buffer;
|
|
void *private;
|
|
int cpu_file;
|
|
struct mutex mutex;
|
|
struct ring_buffer_iter **buffer_iter;
|
|
unsigned long iter_flags;
|
|
|
|
|
|
struct trace_seq tmp_seq;
|
|
|
|
cpumask_var_t started;
|
|
|
|
|
|
bool snapshot;
|
|
|
|
|
|
struct trace_seq seq;
|
|
struct trace_entry *ent;
|
|
unsigned long lost_events;
|
|
int leftover;
|
|
int ent_size;
|
|
int cpu;
|
|
u64 ts;
|
|
|
|
loff_t pos;
|
|
long idx;
|
|
|
|
|
|
};
|
|
|
|
enum trace_iter_flags {
|
|
TRACE_FILE_LAT_FMT = 1,
|
|
TRACE_FILE_ANNOTATE = 2,
|
|
TRACE_FILE_TIME_IN_NS = 4,
|
|
};
|
|
|
|
|
|
typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter,
|
|
int flags, struct trace_event *event);
|
|
|
|
struct trace_event_functions {
|
|
trace_print_func trace;
|
|
trace_print_func raw;
|
|
trace_print_func hex;
|
|
trace_print_func binary;
|
|
};
|
|
|
|
struct trace_event {
|
|
struct hlist_node node;
|
|
struct list_head list;
|
|
int type;
|
|
struct trace_event_functions *funcs;
|
|
};
|
|
|
|
extern int register_ftrace_event(struct trace_event *event);
|
|
extern int unregister_ftrace_event(struct trace_event *event);
|
|
|
|
|
|
enum print_line_t {
|
|
TRACE_TYPE_PARTIAL_LINE = 0,
|
|
TRACE_TYPE_HANDLED = 1,
|
|
TRACE_TYPE_UNHANDLED = 2,
|
|
TRACE_TYPE_NO_CONSUME = 3
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) enum print_line_t trace_handle_return(struct trace_seq *s)
|
|
{
|
|
return trace_seq_has_overflowed(s) ?
|
|
TRACE_TYPE_PARTIAL_LINE : TRACE_TYPE_HANDLED;
|
|
}
|
|
|
|
void tracing_generic_entry_update(struct trace_entry *entry,
|
|
unsigned long flags,
|
|
int pc);
|
|
struct ftrace_event_file;
|
|
|
|
struct ring_buffer_event *
|
|
trace_event_buffer_lock_reserve(struct ring_buffer **current_buffer,
|
|
struct ftrace_event_file *ftrace_file,
|
|
int type, unsigned long len,
|
|
unsigned long flags, int pc);
|
|
struct ring_buffer_event *
|
|
trace_current_buffer_lock_reserve(struct ring_buffer **current_buffer,
|
|
int type, unsigned long len,
|
|
unsigned long flags, int pc);
|
|
void trace_current_buffer_unlock_commit(struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event,
|
|
unsigned long flags, int pc);
|
|
void trace_buffer_unlock_commit(struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event,
|
|
unsigned long flags, int pc);
|
|
void trace_buffer_unlock_commit_regs(struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event,
|
|
unsigned long flags, int pc,
|
|
struct pt_regs *regs);
|
|
void trace_current_buffer_discard_commit(struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event);
|
|
|
|
void tracing_record_cmdline(struct task_struct *tsk);
|
|
|
|
int ftrace_output_call(struct trace_iterator *iter, char *name, char *fmt, ...);
|
|
|
|
struct event_filter;
|
|
|
|
enum trace_reg {
|
|
TRACE_REG_REGISTER,
|
|
TRACE_REG_UNREGISTER,
|
|
|
|
TRACE_REG_PERF_REGISTER,
|
|
TRACE_REG_PERF_UNREGISTER,
|
|
TRACE_REG_PERF_OPEN,
|
|
TRACE_REG_PERF_CLOSE,
|
|
TRACE_REG_PERF_ADD,
|
|
TRACE_REG_PERF_DEL,
|
|
|
|
};
|
|
|
|
struct ftrace_event_call;
|
|
|
|
struct ftrace_event_class {
|
|
char *system;
|
|
void *probe;
|
|
|
|
void *perf_probe;
|
|
|
|
int (*reg)(struct ftrace_event_call *event,
|
|
enum trace_reg type, void *data);
|
|
int (*define_fields)(struct ftrace_event_call *);
|
|
struct list_head *(*get_fields)(struct ftrace_event_call *);
|
|
struct list_head fields;
|
|
int (*raw_init)(struct ftrace_event_call *);
|
|
};
|
|
|
|
extern int ftrace_event_reg(struct ftrace_event_call *event,
|
|
enum trace_reg type, void *data);
|
|
|
|
int ftrace_output_event(struct trace_iterator *iter, struct ftrace_event_call *event,
|
|
char *fmt, ...);
|
|
|
|
int ftrace_event_define_field(struct ftrace_event_call *call,
|
|
char *type, int len, char *item, int offset,
|
|
int field_size, int sign, int filter);
|
|
|
|
struct ftrace_event_buffer {
|
|
struct ring_buffer *buffer;
|
|
struct ring_buffer_event *event;
|
|
struct ftrace_event_file *ftrace_file;
|
|
void *entry;
|
|
unsigned long flags;
|
|
int pc;
|
|
};
|
|
|
|
void *ftrace_event_buffer_reserve(struct ftrace_event_buffer *fbuffer,
|
|
struct ftrace_event_file *ftrace_file,
|
|
unsigned long len);
|
|
|
|
void ftrace_event_buffer_commit(struct ftrace_event_buffer *fbuffer);
|
|
|
|
int ftrace_event_define_field(struct ftrace_event_call *call,
|
|
char *type, int len, char *item, int offset,
|
|
int field_size, int sign, int filter);
|
|
|
|
enum {
|
|
TRACE_EVENT_FL_FILTERED_BIT,
|
|
TRACE_EVENT_FL_CAP_ANY_BIT,
|
|
TRACE_EVENT_FL_NO_SET_FILTER_BIT,
|
|
TRACE_EVENT_FL_IGNORE_ENABLE_BIT,
|
|
TRACE_EVENT_FL_WAS_ENABLED_BIT,
|
|
TRACE_EVENT_FL_USE_CALL_FILTER_BIT,
|
|
TRACE_EVENT_FL_TRACEPOINT_BIT,
|
|
};
|
|
# 265 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
enum {
|
|
TRACE_EVENT_FL_FILTERED = (1 << TRACE_EVENT_FL_FILTERED_BIT),
|
|
TRACE_EVENT_FL_CAP_ANY = (1 << TRACE_EVENT_FL_CAP_ANY_BIT),
|
|
TRACE_EVENT_FL_NO_SET_FILTER = (1 << TRACE_EVENT_FL_NO_SET_FILTER_BIT),
|
|
TRACE_EVENT_FL_IGNORE_ENABLE = (1 << TRACE_EVENT_FL_IGNORE_ENABLE_BIT),
|
|
TRACE_EVENT_FL_WAS_ENABLED = (1 << TRACE_EVENT_FL_WAS_ENABLED_BIT),
|
|
TRACE_EVENT_FL_USE_CALL_FILTER = (1 << TRACE_EVENT_FL_USE_CALL_FILTER_BIT),
|
|
TRACE_EVENT_FL_TRACEPOINT = (1 << TRACE_EVENT_FL_TRACEPOINT_BIT),
|
|
};
|
|
|
|
struct ftrace_event_call {
|
|
struct list_head list;
|
|
struct ftrace_event_class *class;
|
|
union {
|
|
char *name;
|
|
|
|
struct tracepoint *tp;
|
|
};
|
|
struct trace_event event;
|
|
const char *print_fmt;
|
|
struct event_filter *filter;
|
|
void *mod;
|
|
void *data;
|
|
# 297 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
int flags;
|
|
|
|
|
|
int perf_refcount;
|
|
struct hlist_head *perf_events;
|
|
|
|
int (*perf_perm)(struct ftrace_event_call *,
|
|
struct perf_event *);
|
|
|
|
};
|
|
|
|
static inline __attribute__((no_instrument_function)) const char *
|
|
ftrace_event_name(struct ftrace_event_call *call)
|
|
{
|
|
if (call->flags & TRACE_EVENT_FL_TRACEPOINT)
|
|
return call->tp ? call->tp->name : ((void *)0);
|
|
else
|
|
return call->name;
|
|
}
|
|
|
|
struct trace_array;
|
|
struct ftrace_subsystem_dir;
|
|
|
|
enum {
|
|
FTRACE_EVENT_FL_ENABLED_BIT,
|
|
FTRACE_EVENT_FL_RECORDED_CMD_BIT,
|
|
FTRACE_EVENT_FL_FILTERED_BIT,
|
|
FTRACE_EVENT_FL_NO_SET_FILTER_BIT,
|
|
FTRACE_EVENT_FL_SOFT_MODE_BIT,
|
|
FTRACE_EVENT_FL_SOFT_DISABLED_BIT,
|
|
FTRACE_EVENT_FL_TRIGGER_MODE_BIT,
|
|
FTRACE_EVENT_FL_TRIGGER_COND_BIT,
|
|
};
|
|
# 343 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
enum {
|
|
FTRACE_EVENT_FL_ENABLED = (1 << FTRACE_EVENT_FL_ENABLED_BIT),
|
|
FTRACE_EVENT_FL_RECORDED_CMD = (1 << FTRACE_EVENT_FL_RECORDED_CMD_BIT),
|
|
FTRACE_EVENT_FL_FILTERED = (1 << FTRACE_EVENT_FL_FILTERED_BIT),
|
|
FTRACE_EVENT_FL_NO_SET_FILTER = (1 << FTRACE_EVENT_FL_NO_SET_FILTER_BIT),
|
|
FTRACE_EVENT_FL_SOFT_MODE = (1 << FTRACE_EVENT_FL_SOFT_MODE_BIT),
|
|
FTRACE_EVENT_FL_SOFT_DISABLED = (1 << FTRACE_EVENT_FL_SOFT_DISABLED_BIT),
|
|
FTRACE_EVENT_FL_TRIGGER_MODE = (1 << FTRACE_EVENT_FL_TRIGGER_MODE_BIT),
|
|
FTRACE_EVENT_FL_TRIGGER_COND = (1 << FTRACE_EVENT_FL_TRIGGER_COND_BIT),
|
|
};
|
|
|
|
struct ftrace_event_file {
|
|
struct list_head list;
|
|
struct ftrace_event_call *event_call;
|
|
struct event_filter *filter;
|
|
struct dentry *dir;
|
|
struct trace_array *tr;
|
|
struct ftrace_subsystem_dir *system;
|
|
struct list_head triggers;
|
|
# 379 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
unsigned long flags;
|
|
atomic_t sm_ref;
|
|
atomic_t tm_ref;
|
|
};
|
|
# 409 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
enum event_trigger_type {
|
|
ETT_NONE = (0),
|
|
ETT_TRACE_ONOFF = (1 << 0),
|
|
ETT_SNAPSHOT = (1 << 1),
|
|
ETT_STACKTRACE = (1 << 2),
|
|
ETT_EVENT_ENABLE = (1 << 3),
|
|
};
|
|
|
|
extern int filter_match_preds(struct event_filter *filter, void *rec);
|
|
|
|
extern int filter_check_discard(struct ftrace_event_file *file, void *rec,
|
|
struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event);
|
|
extern int call_filter_check_discard(struct ftrace_event_call *call, void *rec,
|
|
struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event);
|
|
extern enum event_trigger_type event_triggers_call(struct ftrace_event_file *file,
|
|
void *rec);
|
|
extern void event_triggers_post_call(struct ftrace_event_file *file,
|
|
enum event_trigger_type tt);
|
|
# 439 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
static inline __attribute__((no_instrument_function)) bool
|
|
ftrace_trigger_soft_disabled(struct ftrace_event_file *file)
|
|
{
|
|
unsigned long eflags = file->flags;
|
|
|
|
if (!(eflags & FTRACE_EVENT_FL_TRIGGER_COND)) {
|
|
if (eflags & FTRACE_EVENT_FL_TRIGGER_MODE)
|
|
event_triggers_call(file, ((void *)0));
|
|
if (eflags & FTRACE_EVENT_FL_SOFT_DISABLED)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
# 466 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
static inline __attribute__((no_instrument_function)) bool
|
|
__event_trigger_test_discard(struct ftrace_event_file *file,
|
|
struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event,
|
|
void *entry,
|
|
enum event_trigger_type *tt)
|
|
{
|
|
unsigned long eflags = file->flags;
|
|
|
|
if (eflags & FTRACE_EVENT_FL_TRIGGER_COND)
|
|
*tt = event_triggers_call(file, entry);
|
|
|
|
if ((__builtin_constant_p((FTRACE_EVENT_FL_SOFT_DISABLED_BIT)) ? constant_test_bit((FTRACE_EVENT_FL_SOFT_DISABLED_BIT), (&file->flags)) : variable_test_bit((FTRACE_EVENT_FL_SOFT_DISABLED_BIT), (&file->flags))))
|
|
ring_buffer_discard_commit(buffer, event);
|
|
else if (!filter_check_discard(file, entry, buffer, event))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
# 499 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
static inline __attribute__((no_instrument_function)) void
|
|
event_trigger_unlock_commit(struct ftrace_event_file *file,
|
|
struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event,
|
|
void *entry, unsigned long irq_flags, int pc)
|
|
{
|
|
enum event_trigger_type tt = ETT_NONE;
|
|
|
|
if (!__event_trigger_test_discard(file, buffer, event, entry, &tt))
|
|
trace_buffer_unlock_commit(buffer, event, irq_flags, pc);
|
|
|
|
if (tt)
|
|
event_triggers_post_call(file, tt);
|
|
}
|
|
# 530 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
static inline __attribute__((no_instrument_function)) void
|
|
event_trigger_unlock_commit_regs(struct ftrace_event_file *file,
|
|
struct ring_buffer *buffer,
|
|
struct ring_buffer_event *event,
|
|
void *entry, unsigned long irq_flags, int pc,
|
|
struct pt_regs *regs)
|
|
{
|
|
enum event_trigger_type tt = ETT_NONE;
|
|
|
|
if (!__event_trigger_test_discard(file, buffer, event, entry, &tt))
|
|
trace_buffer_unlock_commit_regs(buffer, event,
|
|
irq_flags, pc, regs);
|
|
|
|
if (tt)
|
|
event_triggers_post_call(file, tt);
|
|
}
|
|
|
|
enum {
|
|
FILTER_OTHER = 0,
|
|
FILTER_STATIC_STRING,
|
|
FILTER_DYN_STRING,
|
|
FILTER_PTR_STRING,
|
|
FILTER_TRACE_FN,
|
|
};
|
|
|
|
extern int trace_event_raw_init(struct ftrace_event_call *call);
|
|
extern int trace_define_field(struct ftrace_event_call *call, const char *type,
|
|
const char *name, int offset, int size,
|
|
int is_signed, int filter_type);
|
|
extern int trace_add_event_call(struct ftrace_event_call *call);
|
|
extern int trace_remove_event_call(struct ftrace_event_call *call);
|
|
|
|
|
|
|
|
int trace_set_clr_event(const char *system, const char *event, int set);
|
|
# 586 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/linux/ftrace_event.h"
|
|
struct perf_event;
|
|
|
|
extern __attribute__((section(".data..percpu" ""))) __typeof__(struct pt_regs) perf_trace_regs;
|
|
|
|
extern int perf_trace_init(struct perf_event *event);
|
|
extern void perf_trace_destroy(struct perf_event *event);
|
|
extern int perf_trace_add(struct perf_event *event, int flags);
|
|
extern void perf_trace_del(struct perf_event *event, int flags);
|
|
extern int ftrace_profile_set_filter(struct perf_event *event, int event_id,
|
|
char *filter_str);
|
|
extern void ftrace_profile_free_filter(struct perf_event *event);
|
|
extern void *perf_trace_buf_prepare(int size, unsigned short type,
|
|
struct pt_regs *regs, int *rctxp);
|
|
|
|
static inline __attribute__((no_instrument_function)) void
|
|
perf_trace_buf_submit(void *raw_data, int size, int rctx, u64 addr,
|
|
u64 count, struct pt_regs *regs, void *head,
|
|
struct task_struct *task)
|
|
{
|
|
perf_tp_event(addr, count, raw_data, size, regs, head, rctx, task);
|
|
}
|
|
# 7 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/trace/syscall.h" 2
|
|
# 24 "/usr/src/linux-source-3.19.0/linux-source-3.19.0/include/trace/syscall.h"
|
|
struct syscall_metadata {
|
|
const char *name;
|
|
int syscall_nr;
|
|
int nb_args;
|
|
const char **types;
|
|
const char **args;
|
|
struct list_head enter_fields;
|
|
|
|
struct ftrace_event_call *enter_event;
|
|
struct ftrace_event_call *exit_event;
|
|
};
|
|
|
|
|
|
static inline __attribute__((no_instrument_function)) void syscall_tracepoint_update(struct task_struct *p)
|
|
{
|
|
if (test_ti_thread_flag(current_thread_info(), 28))
|
|
set_tsk_thread_flag(p, 28);
|
|
else
|
|
clear_tsk_thread_flag(p, 28);
|
|
}
|
|
# 82 "source/include/linux/syscalls.h" 2
|
|
# 114 "source/include/linux/syscalls.h"
|
|
extern struct ftrace_event_class event_class_syscall_enter;
|
|
extern struct ftrace_event_class event_class_syscall_exit;
|
|
extern struct trace_event_functions enter_syscall_print_funcs;
|
|
extern struct trace_event_functions exit_syscall_print_funcs;
|
|
# 208 "source/include/linux/syscalls.h"
|
|
long sys32_quotactl(unsigned int cmd, const char *special,
|
|
qid_t id, void *addr);
|
|
long sys_time(time_t *tloc);
|
|
long sys_stime(time_t *tptr);
|
|
long sys_gettimeofday(struct timeval *tv,
|
|
struct timezone *tz);
|
|
long sys_settimeofday(struct timeval *tv,
|
|
struct timezone *tz);
|
|
long sys_adjtimex(struct timex *txc_p);
|
|
|
|
long sys_times(struct tms *tbuf);
|
|
|
|
long sys_gettid(void);
|
|
long sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp);
|
|
long sys_alarm(unsigned int seconds);
|
|
long sys_getpid(void);
|
|
long sys_getppid(void);
|
|
long sys_getuid(void);
|
|
long sys_geteuid(void);
|
|
long sys_getgid(void);
|
|
long sys_getegid(void);
|
|
long sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid);
|
|
long sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid);
|
|
long sys_getpgid(pid_t pid);
|
|
long sys_getpgrp(void);
|
|
long sys_getsid(pid_t pid);
|
|
long sys_getgroups(int gidsetsize, gid_t *grouplist);
|
|
|
|
long sys_setregid(gid_t rgid, gid_t egid);
|
|
long sys_setgid(gid_t gid);
|
|
long sys_setreuid(uid_t ruid, uid_t euid);
|
|
long sys_setuid(uid_t uid);
|
|
long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid);
|
|
long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid);
|
|
long sys_setfsuid(uid_t uid);
|
|
long sys_setfsgid(gid_t gid);
|
|
long sys_setpgid(pid_t pid, pid_t pgid);
|
|
long sys_setsid(void);
|
|
long sys_setgroups(int gidsetsize, gid_t *grouplist);
|
|
|
|
long sys_acct(const char *name);
|
|
long sys_capget(cap_user_header_t header,
|
|
cap_user_data_t dataptr);
|
|
long sys_capset(cap_user_header_t header,
|
|
const cap_user_data_t data);
|
|
long sys_personality(unsigned int personality);
|
|
|
|
long sys_sigpending(old_sigset_t *set);
|
|
long sys_sigprocmask(int how, old_sigset_t *set,
|
|
old_sigset_t *oset);
|
|
long sys_sigaltstack(const struct sigaltstack *uss,
|
|
struct sigaltstack *uoss);
|
|
|
|
long sys_getitimer(int which, struct itimerval *value);
|
|
long sys_setitimer(int which,
|
|
struct itimerval *value,
|
|
struct itimerval *ovalue);
|
|
long sys_timer_create(clockid_t which_clock,
|
|
struct sigevent *timer_event_spec,
|
|
timer_t * created_timer_id);
|
|
long sys_timer_gettime(timer_t timer_id,
|
|
struct itimerspec *setting);
|
|
long sys_timer_getoverrun(timer_t timer_id);
|
|
long sys_timer_settime(timer_t timer_id, int flags,
|
|
const struct itimerspec *new_setting,
|
|
struct itimerspec *old_setting);
|
|
long sys_timer_delete(timer_t timer_id);
|
|
long sys_clock_settime(clockid_t which_clock,
|
|
const struct timespec *tp);
|
|
long sys_clock_gettime(clockid_t which_clock,
|
|
struct timespec *tp);
|
|
long sys_clock_adjtime(clockid_t which_clock,
|
|
struct timex *tx);
|
|
long sys_clock_getres(clockid_t which_clock,
|
|
struct timespec *tp);
|
|
long sys_clock_nanosleep(clockid_t which_clock, int flags,
|
|
const struct timespec *rqtp,
|
|
struct timespec *rmtp);
|
|
|
|
long sys_nice(int increment);
|
|
long sys_sched_setscheduler(pid_t pid, int policy,
|
|
struct sched_param *param);
|
|
long sys_sched_setparam(pid_t pid,
|
|
struct sched_param *param);
|
|
long sys_sched_setattr(pid_t pid,
|
|
struct sched_attr *attr,
|
|
unsigned int flags);
|
|
long sys_sched_getscheduler(pid_t pid);
|
|
long sys_sched_getparam(pid_t pid,
|
|
struct sched_param *param);
|
|
long sys_sched_getattr(pid_t pid,
|
|
struct sched_attr *attr,
|
|
unsigned int size,
|
|
unsigned int flags);
|
|
long sys_sched_setaffinity(pid_t pid, unsigned int len,
|
|
unsigned long *user_mask_ptr);
|
|
long sys_sched_getaffinity(pid_t pid, unsigned int len,
|
|
unsigned long *user_mask_ptr);
|
|
long sys_sched_yield(void);
|
|
long sys_sched_get_priority_max(int policy);
|
|
long sys_sched_get_priority_min(int policy);
|
|
long sys_sched_rr_get_interval(pid_t pid,
|
|
struct timespec *interval);
|
|
long sys_setpriority(int which, int who, int niceval);
|
|
long sys_getpriority(int which, int who);
|
|
|
|
long sys_shutdown(int, int);
|
|
long sys_reboot(int magic1, int magic2, unsigned int cmd,
|
|
void *arg);
|
|
long sys_restart_syscall(void);
|
|
long sys_kexec_load(unsigned long entry, unsigned long nr_segments,
|
|
struct kexec_segment *segments,
|
|
unsigned long flags);
|
|
long sys_kexec_file_load(int kernel_fd, int initrd_fd,
|
|
unsigned long cmdline_len,
|
|
const char *cmdline_ptr,
|
|
unsigned long flags);
|
|
|
|
long sys_exit(int error_code);
|
|
long sys_exit_group(int error_code);
|
|
long sys_wait4(pid_t pid, int *stat_addr,
|
|
int options, struct rusage *ru);
|
|
long sys_waitid(int which, pid_t pid,
|
|
struct siginfo *infop,
|
|
int options, struct rusage *ru);
|
|
long sys_waitpid(pid_t pid, int *stat_addr, int options);
|
|
long sys_set_tid_address(int *tidptr);
|
|
long sys_futex(u32 *uaddr, int op, u32 val,
|
|
struct timespec *utime, u32 *uaddr2,
|
|
u32 val3);
|
|
|
|
long sys_init_module(void *umod, unsigned long len,
|
|
const char *uargs);
|
|
long sys_delete_module(const char *name_user,
|
|
unsigned int flags);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
long sys_sigsuspend(int unused1, int unused2, old_sigset_t mask);
|
|
|
|
|
|
long sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
long sys_rt_sigaction(int,
|
|
const struct sigaction *,
|
|
struct sigaction *,
|
|
size_t);
|
|
|
|
long sys_rt_sigprocmask(int how, sigset_t *set,
|
|
sigset_t *oset, size_t sigsetsize);
|
|
long sys_rt_sigpending(sigset_t *set, size_t sigsetsize);
|
|
long sys_rt_sigtimedwait(const sigset_t *uthese,
|
|
siginfo_t *uinfo,
|
|
const struct timespec *uts,
|
|
size_t sigsetsize);
|
|
long sys_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig,
|
|
siginfo_t *uinfo);
|
|
long sys_kill(int pid, int sig);
|
|
long sys_tgkill(int tgid, int pid, int sig);
|
|
long sys_tkill(int pid, int sig);
|
|
long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t *uinfo);
|
|
long sys_sgetmask(void);
|
|
long sys_ssetmask(int newmask);
|
|
long sys_signal(int sig, __sighandler_t handler);
|
|
long sys_pause(void);
|
|
|
|
long sys_sync(void);
|
|
long sys_fsync(unsigned int fd);
|
|
long sys_fdatasync(unsigned int fd);
|
|
long sys_bdflush(int func, long data);
|
|
long sys_mount(char *dev_name, char *dir_name,
|
|
char *type, unsigned long flags,
|
|
void *data);
|
|
long sys_umount(char *name, int flags);
|
|
long sys_oldumount(char *name);
|
|
long sys_truncate(const char *path, long length);
|
|
long sys_ftruncate(unsigned int fd, unsigned long length);
|
|
long sys_stat(const char *filename,
|
|
struct __old_kernel_stat *statbuf);
|
|
long sys_statfs(const char * path,
|
|
struct statfs *buf);
|
|
long sys_statfs64(const char *path, size_t sz,
|
|
struct statfs64 *buf);
|
|
long sys_fstatfs(unsigned int fd, struct statfs *buf);
|
|
long sys_fstatfs64(unsigned int fd, size_t sz,
|
|
struct statfs64 *buf);
|
|
long sys_lstat(const char *filename,
|
|
struct __old_kernel_stat *statbuf);
|
|
long sys_fstat(unsigned int fd,
|
|
struct __old_kernel_stat *statbuf);
|
|
long sys_newstat(const char *filename,
|
|
struct stat *statbuf);
|
|
long sys_newlstat(const char *filename,
|
|
struct stat *statbuf);
|
|
long sys_newfstat(unsigned int fd, struct stat *statbuf);
|
|
long sys_ustat(unsigned dev, struct ustat *ubuf);
|
|
# 423 "source/include/linux/syscalls.h"
|
|
long sys_setxattr(const char *path, const char *name,
|
|
const void *value, size_t size, int flags);
|
|
long sys_lsetxattr(const char *path, const char *name,
|
|
const void *value, size_t size, int flags);
|
|
long sys_fsetxattr(int fd, const char *name,
|
|
const void *value, size_t size, int flags);
|
|
long sys_getxattr(const char *path, const char *name,
|
|
void *value, size_t size);
|
|
long sys_lgetxattr(const char *path, const char *name,
|
|
void *value, size_t size);
|
|
long sys_fgetxattr(int fd, const char *name,
|
|
void *value, size_t size);
|
|
long sys_listxattr(const char *path, char *list,
|
|
size_t size);
|
|
long sys_llistxattr(const char *path, char *list,
|
|
size_t size);
|
|
long sys_flistxattr(int fd, char *list, size_t size);
|
|
long sys_removexattr(const char *path,
|
|
const char *name);
|
|
long sys_lremovexattr(const char *path,
|
|
const char *name);
|
|
long sys_fremovexattr(int fd, const char *name);
|
|
|
|
long sys_brk(unsigned long brk);
|
|
long sys_mprotect(unsigned long start, size_t len,
|
|
unsigned long prot);
|
|
long sys_mremap(unsigned long addr,
|
|
unsigned long old_len, unsigned long new_len,
|
|
unsigned long flags, unsigned long new_addr);
|
|
long sys_remap_file_pages(unsigned long start, unsigned long size,
|
|
unsigned long prot, unsigned long pgoff,
|
|
unsigned long flags);
|
|
long sys_msync(unsigned long start, size_t len, int flags);
|
|
long sys_fadvise64(int fd, loff_t offset, size_t len, int advice);
|
|
long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice);
|
|
long sys_munmap(unsigned long addr, size_t len);
|
|
long sys_mlock(unsigned long start, size_t len);
|
|
long sys_munlock(unsigned long start, size_t len);
|
|
long sys_mlockall(int flags);
|
|
long sys_munlockall(void);
|
|
long sys_madvise(unsigned long start, size_t len, int behavior);
|
|
long sys_mincore(unsigned long start, size_t len,
|
|
unsigned char * vec);
|
|
|
|
long sys_pivot_root(const char *new_root,
|
|
const char *put_old);
|
|
long sys_chroot(const char *filename);
|
|
long sys_mknod(const char *filename, umode_t mode,
|
|
unsigned dev);
|
|
long sys_link(const char *oldname,
|
|
const char *newname);
|
|
long sys_symlink(const char *old, const char *new);
|
|
long sys_unlink(const char *pathname);
|
|
long sys_rename(const char *oldname,
|
|
const char *newname);
|
|
long sys_chmod(const char *filename, umode_t mode);
|
|
long sys_fchmod(unsigned int fd, umode_t mode);
|
|
|
|
long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg);
|
|
|
|
|
|
|
|
|
|
long sys_pipe(int *fildes);
|
|
long sys_pipe2(int *fildes, int flags);
|
|
long sys_dup(unsigned int fildes);
|
|
long sys_dup2(unsigned int oldfd, unsigned int newfd);
|
|
long sys_dup3(unsigned int oldfd, unsigned int newfd, int flags);
|
|
long sys_ioperm(unsigned long from, unsigned long num, int on);
|
|
long sys_ioctl(unsigned int fd, unsigned int cmd,
|
|
unsigned long arg);
|
|
long sys_flock(unsigned int fd, unsigned int cmd);
|
|
long sys_io_setup(unsigned nr_reqs, aio_context_t *ctx);
|
|
long sys_io_destroy(aio_context_t ctx);
|
|
long sys_io_getevents(aio_context_t ctx_id,
|
|
long min_nr,
|
|
long nr,
|
|
struct io_event *events,
|
|
struct timespec *timeout);
|
|
long sys_io_submit(aio_context_t, long,
|
|
struct iocb * *);
|
|
long sys_io_cancel(aio_context_t ctx_id, struct iocb *iocb,
|
|
struct io_event *result);
|
|
long sys_sendfile(int out_fd, int in_fd,
|
|
off_t *offset, size_t count);
|
|
long sys_sendfile64(int out_fd, int in_fd,
|
|
loff_t *offset, size_t count);
|
|
long sys_readlink(const char *path,
|
|
char *buf, int bufsiz);
|
|
long sys_creat(const char *pathname, umode_t mode);
|
|
long sys_open(const char *filename,
|
|
int flags, umode_t mode);
|
|
long sys_close(unsigned int fd);
|
|
long sys_access(const char *filename, int mode);
|
|
long sys_vhangup(void);
|
|
long sys_chown(const char *filename,
|
|
uid_t user, gid_t group);
|
|
long sys_lchown(const char *filename,
|
|
uid_t user, gid_t group);
|
|
long sys_fchown(unsigned int fd, uid_t user, gid_t group);
|
|
|
|
long sys_chown16(const char *filename,
|
|
old_uid_t user, old_gid_t group);
|
|
long sys_lchown16(const char *filename,
|
|
old_uid_t user, old_gid_t group);
|
|
long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group);
|
|
long sys_setregid16(old_gid_t rgid, old_gid_t egid);
|
|
long sys_setgid16(old_gid_t gid);
|
|
long sys_setreuid16(old_uid_t ruid, old_uid_t euid);
|
|
long sys_setuid16(old_uid_t uid);
|
|
long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid);
|
|
long sys_getresuid16(old_uid_t *ruid,
|
|
old_uid_t *euid, old_uid_t *suid);
|
|
long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid);
|
|
long sys_getresgid16(old_gid_t *rgid,
|
|
old_gid_t *egid, old_gid_t *sgid);
|
|
long sys_setfsuid16(old_uid_t uid);
|
|
long sys_setfsgid16(old_gid_t gid);
|
|
long sys_getgroups16(int gidsetsize, old_gid_t *grouplist);
|
|
long sys_setgroups16(int gidsetsize, old_gid_t *grouplist);
|
|
long sys_getuid16(void);
|
|
long sys_geteuid16(void);
|
|
long sys_getgid16(void);
|
|
long sys_getegid16(void);
|
|
|
|
|
|
long sys_utime(char *filename,
|
|
struct utimbuf *times);
|
|
long sys_utimes(char *filename,
|
|
struct timeval *utimes);
|
|
long sys_lseek(unsigned int fd, off_t offset,
|
|
unsigned int whence);
|
|
long sys_llseek(unsigned int fd, unsigned long offset_high,
|
|
unsigned long offset_low, loff_t *result,
|
|
unsigned int whence);
|
|
long sys_read(unsigned int fd, char *buf, size_t count);
|
|
long sys_readahead(int fd, loff_t offset, size_t count);
|
|
long sys_readv(unsigned long fd,
|
|
const struct iovec *vec,
|
|
unsigned long vlen);
|
|
long sys_write(unsigned int fd, const char *buf,
|
|
size_t count);
|
|
long sys_writev(unsigned long fd,
|
|
const struct iovec *vec,
|
|
unsigned long vlen);
|
|
long sys_pread64(unsigned int fd, char *buf,
|
|
size_t count, loff_t pos);
|
|
long sys_pwrite64(unsigned int fd, const char *buf,
|
|
size_t count, loff_t pos);
|
|
long sys_preadv(unsigned long fd, const struct iovec *vec,
|
|
unsigned long vlen, unsigned long pos_l, unsigned long pos_h);
|
|
long sys_pwritev(unsigned long fd, const struct iovec *vec,
|
|
unsigned long vlen, unsigned long pos_l, unsigned long pos_h);
|
|
long sys_getcwd(char *buf, unsigned long size);
|
|
long sys_mkdir(const char *pathname, umode_t mode);
|
|
long sys_chdir(const char *filename);
|
|
long sys_fchdir(unsigned int fd);
|
|
long sys_rmdir(const char *pathname);
|
|
long sys_lookup_dcookie(u64 cookie64, char *buf, size_t len);
|
|
long sys_quotactl(unsigned int cmd, const char *special,
|
|
qid_t id, void *addr);
|
|
long sys_getdents(unsigned int fd,
|
|
struct linux_dirent *dirent,
|
|
unsigned int count);
|
|
long sys_getdents64(unsigned int fd,
|
|
struct linux_dirent64 *dirent,
|
|
unsigned int count);
|
|
|
|
long sys_setsockopt(int fd, int level, int optname,
|
|
char *optval, int optlen);
|
|
long sys_getsockopt(int fd, int level, int optname,
|
|
char *optval, int *optlen);
|
|
long sys_bind(int, struct sockaddr *, int);
|
|
long sys_connect(int, struct sockaddr *, int);
|
|
long sys_accept(int, struct sockaddr *, int *);
|
|
long sys_accept4(int, struct sockaddr *, int *, int);
|
|
long sys_getsockname(int, struct sockaddr *, int *);
|
|
long sys_getpeername(int, struct sockaddr *, int *);
|
|
long sys_send(int, void *, size_t, unsigned);
|
|
long sys_sendto(int, void *, size_t, unsigned,
|
|
struct sockaddr *, int);
|
|
long sys_sendmsg(int fd, struct user_msghdr *msg, unsigned flags);
|
|
long sys_sendmmsg(int fd, struct mmsghdr *msg,
|
|
unsigned int vlen, unsigned flags);
|
|
long sys_recv(int, void *, size_t, unsigned);
|
|
long sys_recvfrom(int, void *, size_t, unsigned,
|
|
struct sockaddr *, int *);
|
|
long sys_recvmsg(int fd, struct user_msghdr *msg, unsigned flags);
|
|
long sys_recvmmsg(int fd, struct mmsghdr *msg,
|
|
unsigned int vlen, unsigned flags,
|
|
struct timespec *timeout);
|
|
long sys_socket(int, int, int);
|
|
long sys_socketpair(int, int, int, int *);
|
|
long sys_socketcall(int call, unsigned long *args);
|
|
long sys_listen(int, int);
|
|
long sys_poll(struct pollfd *ufds, unsigned int nfds,
|
|
int timeout);
|
|
long sys_select(int n, fd_set *inp, fd_set *outp,
|
|
fd_set *exp, struct timeval *tvp);
|
|
long sys_old_select(struct sel_arg_struct *arg);
|
|
long sys_epoll_create(int size);
|
|
long sys_epoll_create1(int flags);
|
|
long sys_epoll_ctl(int epfd, int op, int fd,
|
|
struct epoll_event *event);
|
|
long sys_epoll_wait(int epfd, struct epoll_event *events,
|
|
int maxevents, int timeout);
|
|
long sys_epoll_pwait(int epfd, struct epoll_event *events,
|
|
int maxevents, int timeout,
|
|
const sigset_t *sigmask,
|
|
size_t sigsetsize);
|
|
long sys_gethostname(char *name, int len);
|
|
long sys_sethostname(char *name, int len);
|
|
long sys_setdomainname(char *name, int len);
|
|
long sys_newuname(struct new_utsname *name);
|
|
long sys_uname(struct old_utsname *);
|
|
long sys_olduname(struct oldold_utsname *);
|
|
|
|
long sys_getrlimit(unsigned int resource,
|
|
struct rlimit *rlim);
|
|
|
|
long sys_old_getrlimit(unsigned int resource, struct rlimit *rlim);
|
|
|
|
long sys_setrlimit(unsigned int resource,
|
|
struct rlimit *rlim);
|
|
long sys_prlimit64(pid_t pid, unsigned int resource,
|
|
const struct rlimit64 *new_rlim,
|
|
struct rlimit64 *old_rlim);
|
|
long sys_getrusage(int who, struct rusage *ru);
|
|
long sys_umask(int mask);
|
|
|
|
long sys_msgget(key_t key, int msgflg);
|
|
long sys_msgsnd(int msqid, struct msgbuf *msgp,
|
|
size_t msgsz, int msgflg);
|
|
long sys_msgrcv(int msqid, struct msgbuf *msgp,
|
|
size_t msgsz, long msgtyp, int msgflg);
|
|
long sys_msgctl(int msqid, int cmd, struct msqid_ds *buf);
|
|
|
|
long sys_semget(key_t key, int nsems, int semflg);
|
|
long sys_semop(int semid, struct sembuf *sops,
|
|
unsigned nsops);
|
|
long sys_semctl(int semid, int semnum, int cmd, unsigned long arg);
|
|
long sys_semtimedop(int semid, struct sembuf *sops,
|
|
unsigned nsops,
|
|
const struct timespec *timeout);
|
|
long sys_shmat(int shmid, char *shmaddr, int shmflg);
|
|
long sys_shmget(key_t key, size_t size, int flag);
|
|
long sys_shmdt(char *shmaddr);
|
|
long sys_shmctl(int shmid, int cmd, struct shmid_ds *buf);
|
|
long sys_ipc(unsigned int call, int first, unsigned long second,
|
|
unsigned long third, void *ptr, long fifth);
|
|
|
|
long sys_mq_open(const char *name, int oflag, umode_t mode, struct mq_attr *attr);
|
|
long sys_mq_unlink(const char *name);
|
|
long sys_mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec *abs_timeout);
|
|
long sys_mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned int *msg_prio, const struct timespec *abs_timeout);
|
|
long sys_mq_notify(mqd_t mqdes, const struct sigevent *notification);
|
|
long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr *mqstat, struct mq_attr *omqstat);
|
|
|
|
long sys_pciconfig_iobase(long which, unsigned long bus, unsigned long devfn);
|
|
long sys_pciconfig_read(unsigned long bus, unsigned long dfn,
|
|
unsigned long off, unsigned long len,
|
|
void *buf);
|
|
long sys_pciconfig_write(unsigned long bus, unsigned long dfn,
|
|
unsigned long off, unsigned long len,
|
|
void *buf);
|
|
|
|
long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
|
|
unsigned long arg4, unsigned long arg5);
|
|
long sys_swapon(const char *specialfile, int swap_flags);
|
|
long sys_swapoff(const char *specialfile);
|
|
long sys_sysctl(struct __sysctl_args *args);
|
|
long sys_sysinfo(struct sysinfo *info);
|
|
long sys_sysfs(int option,
|
|
unsigned long arg1, unsigned long arg2);
|
|
long sys_syslog(int type, char *buf, int len);
|
|
long sys_uselib(const char *library);
|
|
long sys_ni_syscall(void);
|
|
long sys_ptrace(long request, long pid, unsigned long addr,
|
|
unsigned long data);
|
|
|
|
long sys_add_key(const char *_type,
|
|
const char *_description,
|
|
const void *_payload,
|
|
size_t plen,
|
|
key_serial_t destringid);
|
|
|
|
long sys_request_key(const char *_type,
|
|
const char *_description,
|
|
const char *_callout_info,
|
|
key_serial_t destringid);
|
|
|
|
long sys_keyctl(int cmd, unsigned long arg2, unsigned long arg3,
|
|
unsigned long arg4, unsigned long arg5);
|
|
|
|
long sys_ioprio_set(int which, int who, int ioprio);
|
|
long sys_ioprio_get(int which, int who);
|
|
long sys_set_mempolicy(int mode, const unsigned long *nmask,
|
|
unsigned long maxnode);
|
|
long sys_migrate_pages(pid_t pid, unsigned long maxnode,
|
|
const unsigned long *from,
|
|
const unsigned long *to);
|
|
long sys_move_pages(pid_t pid, unsigned long nr_pages,
|
|
const void * *pages,
|
|
const int *nodes,
|
|
int *status,
|
|
int flags);
|
|
long sys_mbind(unsigned long start, unsigned long len,
|
|
unsigned long mode,
|
|
const unsigned long *nmask,
|
|
unsigned long maxnode,
|
|
unsigned flags);
|
|
long sys_get_mempolicy(int *policy,
|
|
unsigned long *nmask,
|
|
unsigned long maxnode,
|
|
unsigned long addr, unsigned long flags);
|
|
|
|
long sys_inotify_init(void);
|
|
long sys_inotify_init1(int flags);
|
|
long sys_inotify_add_watch(int fd, const char *path,
|
|
u32 mask);
|
|
long sys_inotify_rm_watch(int fd, __s32 wd);
|
|
|
|
long sys_spu_run(int fd, __u32 *unpc,
|
|
__u32 *ustatus);
|
|
long sys_spu_create(const char *name,
|
|
unsigned int flags, umode_t mode, int fd);
|
|
|
|
long sys_mknodat(int dfd, const char * filename, umode_t mode,
|
|
unsigned dev);
|
|
long sys_mkdirat(int dfd, const char * pathname, umode_t mode);
|
|
long sys_unlinkat(int dfd, const char * pathname, int flag);
|
|
long sys_symlinkat(const char * oldname,
|
|
int newdfd, const char * newname);
|
|
long sys_linkat(int olddfd, const char *oldname,
|
|
int newdfd, const char *newname, int flags);
|
|
long sys_renameat(int olddfd, const char * oldname,
|
|
int newdfd, const char * newname);
|
|
long sys_renameat2(int olddfd, const char *oldname,
|
|
int newdfd, const char *newname,
|
|
unsigned int flags);
|
|
long sys_futimesat(int dfd, const char *filename,
|
|
struct timeval *utimes);
|
|
long sys_faccessat(int dfd, const char *filename, int mode);
|
|
long sys_fchmodat(int dfd, const char * filename,
|
|
umode_t mode);
|
|
long sys_fchownat(int dfd, const char *filename, uid_t user,
|
|
gid_t group, int flag);
|
|
long sys_openat(int dfd, const char *filename, int flags,
|
|
umode_t mode);
|
|
long sys_newfstatat(int dfd, const char *filename,
|
|
struct stat *statbuf, int flag);
|
|
long sys_fstatat64(int dfd, const char *filename,
|
|
struct stat64 *statbuf, int flag);
|
|
long sys_readlinkat(int dfd, const char *path, char *buf,
|
|
int bufsiz);
|
|
long sys_utimensat(int dfd, const char *filename,
|
|
struct timespec *utimes, int flags);
|
|
long sys_unshare(unsigned long unshare_flags);
|
|
|
|
long sys_splice(int fd_in, loff_t *off_in,
|
|
int fd_out, loff_t *off_out,
|
|
size_t len, unsigned int flags);
|
|
|
|
long sys_vmsplice(int fd, const struct iovec *iov,
|
|
unsigned long nr_segs, unsigned int flags);
|
|
|
|
long sys_tee(int fdin, int fdout, size_t len, unsigned int flags);
|
|
|
|
long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes,
|
|
unsigned int flags);
|
|
long sys_sync_file_range2(int fd, unsigned int flags,
|
|
loff_t offset, loff_t nbytes);
|
|
long sys_get_robust_list(int pid,
|
|
struct robust_list_head * *head_ptr,
|
|
size_t *len_ptr);
|
|
long sys_set_robust_list(struct robust_list_head *head,
|
|
size_t len);
|
|
long sys_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *cache);
|
|
long sys_signalfd(int ufd, sigset_t *user_mask, size_t sizemask);
|
|
long sys_signalfd4(int ufd, sigset_t *user_mask, size_t sizemask, int flags);
|
|
long sys_timerfd_create(int clockid, int flags);
|
|
long sys_timerfd_settime(int ufd, int flags,
|
|
const struct itimerspec *utmr,
|
|
struct itimerspec *otmr);
|
|
long sys_timerfd_gettime(int ufd, struct itimerspec *otmr);
|
|
long sys_eventfd(unsigned int count);
|
|
long sys_eventfd2(unsigned int count, int flags);
|
|
long sys_memfd_create(const char *uname_ptr, unsigned int flags);
|
|
long sys_fallocate(int fd, int mode, loff_t offset, loff_t len);
|
|
long sys_old_readdir(unsigned int, struct old_linux_dirent *, unsigned int);
|
|
long sys_pselect6(int, fd_set *, fd_set *,
|
|
fd_set *, struct timespec *,
|
|
void *);
|
|
long sys_ppoll(struct pollfd *, unsigned int,
|
|
struct timespec *, const sigset_t *,
|
|
size_t);
|
|
long sys_fanotify_init(unsigned int flags, unsigned int event_f_flags);
|
|
long sys_fanotify_mark(int fanotify_fd, unsigned int flags,
|
|
u64 mask, int fd,
|
|
const char *pathname);
|
|
long sys_syncfs(int fd);
|
|
|
|
long sys_fork(void);
|
|
long sys_vfork(void);
|
|
# 835 "source/include/linux/syscalls.h"
|
|
long sys_clone(unsigned long, unsigned long, int *,
|
|
int *, int);
|
|
|
|
|
|
|
|
long sys_execve(const char *filename,
|
|
const char *const *argv,
|
|
const char *const *envp);
|
|
|
|
long sys_perf_event_open(
|
|
struct perf_event_attr *attr_uptr,
|
|
pid_t pid, int cpu, int group_fd, unsigned long flags);
|
|
|
|
long sys_mmap_pgoff(unsigned long addr, unsigned long len,
|
|
unsigned long prot, unsigned long flags,
|
|
unsigned long fd, unsigned long pgoff);
|
|
long sys_old_mmap(struct mmap_arg_struct *arg);
|
|
long sys_name_to_handle_at(int dfd, const char *name,
|
|
struct file_handle *handle,
|
|
int *mnt_id, int flag);
|
|
long sys_open_by_handle_at(int mountdirfd,
|
|
struct file_handle *handle,
|
|
int flags);
|
|
long sys_setns(int fd, int nstype);
|
|
long sys_process_vm_readv(pid_t pid,
|
|
const struct iovec *lvec,
|
|
unsigned long liovcnt,
|
|
const struct iovec *rvec,
|
|
unsigned long riovcnt,
|
|
unsigned long flags);
|
|
long sys_process_vm_writev(pid_t pid,
|
|
const struct iovec *lvec,
|
|
unsigned long liovcnt,
|
|
const struct iovec *rvec,
|
|
unsigned long riovcnt,
|
|
unsigned long flags);
|
|
|
|
long sys_kcmp(pid_t pid1, pid_t pid2, int type,
|
|
unsigned long idx1, unsigned long idx2);
|
|
long sys_finit_module(int fd, const char *uargs, int flags);
|
|
long sys_seccomp(unsigned int op, unsigned int flags,
|
|
const char *uargs);
|
|
long sys_getrandom(char *buf, size_t count,
|
|
unsigned int flags);
|
|
long sys_bpf(int cmd, union bpf_attr *attr, unsigned int size);
|
|
|
|
long sys_execveat(int dfd, const char *filename,
|
|
const char *const *argv,
|
|
const char *const *envp, int flags);
|