1 typedef unsigned int __u32
;
2 __extension__
typedef __signed__
long long __s64
;
3 __extension__
typedef unsigned long long __u64
;
7 typedef long long __kernel_time64_t
;
11 typedef __s64 time64_t
;
12 struct __kernel_timespec
{
13 __kernel_time64_t tv_sec
;
21 extern struct timespec64
ns_to_timespec64(const s64 nsec
);
22 int put_timespec64(const struct timespec64
*ts
,
23 struct __kernel_timespec
*uts
);
27 extern int put_old_timespec32(const struct timespec64
*, void *);
37 extern void ktime_get_real_ts64(struct timespec64
*tv
);
48 extern ktime_t
ktime_get(void);
49 extern ktime_t
ktime_get_with_offset(enum tk_offsets offs
);
50 extern ktime_t
ktime_get_coarse_with_offset(enum tk_offsets offs
);
51 extern ktime_t
ktime_mono_to_any(ktime_t tmono
, enum tk_offsets offs
);
52 extern ktime_t
ktime_get_raw(void);
53 extern u32
ktime_get_resolution_ns(void);
56 static ktime_t
ktime_get_real(void)
58 return ktime_get_with_offset(TK_OFFS_REAL
);
79 static ktime_t
sock_read_timestamp(struct sock
*sk
)
81 return *(const volatile ktime_t
*)&(sk
->sk_stamp
);
84 static void sock_write_timestamp(struct sock
*sk
, ktime_t kt
)
86 *(volatile ktime_t
*)&(sk
->sk_stamp
) = kt
;
91 int sock_gettstamp(struct socket
*sock
, void *userstamp
,
92 bool timeval
, bool time32
)
94 struct sock
*sk
= sock
->sk
;
98 ts
= ns_to_timespec64((sock_read_timestamp(sk
)));
101 if (ts
.tv_sec
== 0) {
102 ktime_t kt
= ktime_get_real();
103 sock_write_timestamp(sk
, kt
);
104 ts
= ns_to_timespec64((kt
));
112 return put_old_timespec32(&ts
, userstamp
);
113 return put_timespec64(&ts
, (struct __kernel_timespec
*) userstamp
);