• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef PERF_LINUX_KERNEL_H_
2 #define PERF_LINUX_KERNEL_H_
3 
4 #include <stdarg.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <assert.h>
8 
9 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
10 
11 /* ANDROID_CHANGE_BEGIN */
12 #if defined(__BIONIC__) || defined(__APPLE__)
13 /* Bionic defines ALIGN in sys/param.h */
14 #define KERNEL_ALIGN(x,a)	__ALIGN_MASK(x,(typeof(x))(a)-1)
15 #else
16 #define ALIGN(x,a)		__ALIGN_MASK(x,(typeof(x))(a)-1)
17 #endif
18 /* ANDROID_CHANGE_END */
19 #define __ALIGN_MASK(x,mask)	(((x)+(mask))&~(mask))
20 
21 #ifndef offsetof
22 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
23 #endif
24 
25 #ifndef container_of
26 /**
27  * container_of - cast a member of a structure out to the containing structure
28  * @ptr:	the pointer to the member.
29  * @type:	the type of the container struct this is embedded in.
30  * @member:	the name of the member within the struct.
31  *
32  */
33 #define container_of(ptr, type, member) ({			\
34 	const typeof(((type *)0)->member) * __mptr = (ptr);	\
35 	(type *)((char *)__mptr - offsetof(type, member)); })
36 #endif
37 
38 /* ANDROID_CHANGE_BEGIN */
39 #ifndef __BIONIC__
40 #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
41 #endif
42 /* ANDROID_CHANGE_END */
43 
44 #ifndef max
45 #define max(x, y) ({				\
46 	typeof(x) _max1 = (x);			\
47 	typeof(y) _max2 = (y);			\
48 	(void) (&_max1 == &_max2);		\
49 	_max1 > _max2 ? _max1 : _max2; })
50 #endif
51 
52 #ifndef min
53 #define min(x, y) ({				\
54 	typeof(x) _min1 = (x);			\
55 	typeof(y) _min2 = (y);			\
56 	(void) (&_min1 == &_min2);		\
57 	_min1 < _min2 ? _min1 : _min2; })
58 #endif
59 
60 #ifndef BUG_ON
61 #define BUG_ON(cond) assert(!(cond))
62 #endif
63 
64 /*
65  * Both need more care to handle endianness
66  * (Don't use bitmap_copy_le() for now)
67  */
68 #define cpu_to_le64(x)	(x)
69 #define cpu_to_le32(x)	(x)
70 
71 static inline int
vscnprintf(char * buf,size_t size,const char * fmt,va_list args)72 vscnprintf(char *buf, size_t size, const char *fmt, va_list args)
73 {
74 	int i;
75 	ssize_t ssize = size;
76 
77 	i = vsnprintf(buf, size, fmt, args);
78 
79 	return (i >= ssize) ? (ssize - 1) : i;
80 }
81 
scnprintf(char * buf,size_t size,const char * fmt,...)82 static inline int scnprintf(char * buf, size_t size, const char * fmt, ...)
83 {
84 	va_list args;
85 	ssize_t ssize = size;
86 	int i;
87 
88 	va_start(args, fmt);
89 	i = vsnprintf(buf, size, fmt, args);
90 	va_end(args);
91 
92 	return (i >= ssize) ? (ssize - 1) : i;
93 }
94 
95 static inline unsigned long
simple_strtoul(const char * nptr,char ** endptr,int base)96 simple_strtoul(const char *nptr, char **endptr, int base)
97 {
98 	return strtoul(nptr, endptr, base);
99 }
100 
101 int eprintf(int level,
102 	    const char *fmt, ...) __attribute__((format(printf, 2, 3)));
103 
104 #ifndef pr_fmt
105 #define pr_fmt(fmt) fmt
106 #endif
107 
108 #define pr_err(fmt, ...) \
109 	eprintf(0, pr_fmt(fmt), ##__VA_ARGS__)
110 #define pr_warning(fmt, ...) \
111 	eprintf(0, pr_fmt(fmt), ##__VA_ARGS__)
112 #define pr_info(fmt, ...) \
113 	eprintf(0, pr_fmt(fmt), ##__VA_ARGS__)
114 #define pr_debug(fmt, ...) \
115 	eprintf(1, pr_fmt(fmt), ##__VA_ARGS__)
116 #define pr_debugN(n, fmt, ...) \
117 	eprintf(n, pr_fmt(fmt), ##__VA_ARGS__)
118 #define pr_debug2(fmt, ...) pr_debugN(2, pr_fmt(fmt), ##__VA_ARGS__)
119 #define pr_debug3(fmt, ...) pr_debugN(3, pr_fmt(fmt), ##__VA_ARGS__)
120 #define pr_debug4(fmt, ...) pr_debugN(4, pr_fmt(fmt), ##__VA_ARGS__)
121 
122 #endif
123