• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Copyright (c) 2019, Linux Test Project
4  * Copyright (c) Zilogic Systems Pvt. Ltd., 2018
5  * Email : code@zilogic.com
6  */
7 
8 #ifndef TST_SAFE_CLOCKS_H__
9 #define TST_SAFE_CLOCKS_H__
10 
11 #include <time.h>
12 #include <sys/timex.h>
13 #include "tst_test.h"
14 #include "tst_clocks.h"
15 #include "lapi/syscalls.h"
16 #include "lapi/posix_clocks.h"
17 
safe_clock_getres(const char * file,const int lineno,clockid_t clk_id,struct timespec * res)18 static inline void safe_clock_getres(const char *file, const int lineno,
19 	clockid_t clk_id, struct timespec *res)
20 {
21 	int rval;
22 
23 	rval = clock_getres(clk_id, res);
24 	if (rval != 0) {
25 		tst_brk(TBROK | TERRNO,
26 			"%s:%d clock_getres(%s) failed",
27 			file, lineno, tst_clock_name(clk_id));
28 	}
29 }
30 
safe_clock_gettime(const char * file,const int lineno,clockid_t clk_id,struct timespec * tp)31 static inline void safe_clock_gettime(const char *file, const int lineno,
32 	clockid_t clk_id, struct timespec *tp)
33 {
34 	int rval;
35 
36 	rval = clock_gettime(clk_id, tp);
37 	if (rval != 0) {
38 		tst_brk(TBROK | TERRNO,
39 			"%s:%d clock_gettime(%s) failed",
40 			file, lineno, tst_clock_name(clk_id));
41 	}
42 }
43 
44 
safe_clock_settime(const char * file,const int lineno,clockid_t clk_id,struct timespec * tp)45 static inline void safe_clock_settime(const char *file, const int lineno,
46 	clockid_t clk_id, struct timespec *tp)
47 {
48 	int rval;
49 
50 	rval = clock_settime(clk_id, tp);
51 	if (rval != 0) {
52 		tst_brk(TBROK | TERRNO,
53 			"%s:%d clock_gettime(%s) failed",
54 			file, lineno, tst_clock_name(clk_id));
55 	}
56 }
57 
safe_clock_adjtime(const char * file,const int lineno,clockid_t clk_id,struct timex * txc)58 static inline int safe_clock_adjtime(const char *file, const int lineno,
59 	clockid_t clk_id, struct timex *txc)
60 {
61 	int rval;
62 
63 	rval = tst_syscall(__NR_clock_adjtime, clk_id, txc);
64 	if (rval < 0) {
65 		tst_brk(TBROK | TERRNO,
66 			"%s:%d clock_adjtime(%s) failed %i",
67 			file, lineno, tst_clock_name(clk_id), rval);
68 	}
69 
70 	return rval;
71 }
72 
73 #define SAFE_CLOCK_GETRES(clk_id, res)\
74 	safe_clock_getres(__FILE__, __LINE__, (clk_id), (res))
75 
76 #define SAFE_CLOCK_GETTIME(clk_id, tp)\
77 	safe_clock_gettime(__FILE__, __LINE__, (clk_id), (tp))
78 
79 #define SAFE_CLOCK_SETTIME(clk_id, tp)\
80 	safe_clock_settime(__FILE__, __LINE__, (clk_id), (tp))
81 
82 #define SAFE_CLOCK_ADJTIME(clk_id, txc)\
83 	safe_clock_adjtime(__FILE__, __LINE__, (clk_id), (txc))
84 
85 #endif /* SAFE_CLOCKS_H__ */
86