xref: /rockchip-linux_mpp/osal/test/mpp_eventfd_test.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2 /*
3  * Copyright (c) 2015 Rockchip Electronics Co., Ltd.
4  */
5 
6 #define MODULE_TAG "mpp_eventfd_test"
7 
8 #include "mpp_log.h"
9 #include "mpp_time.h"
10 #include "mpp_common.h"
11 #include "mpp_thread.h"
12 #include "mpp_eventfd.h"
13 
14 #define WR_VAL      1
15 #define RD_VAL      10
16 
17 static RK_S32 data_fd = -1;
18 static RK_S32 sync_fd = -1;
19 static RK_U64 wr_val_base = WR_VAL;
20 static RK_U64 rd_val_base = RD_VAL;
21 static RK_U64 wr_val = WR_VAL;
22 static RK_U64 rd_val = RD_VAL;
23 static RK_S32 wr_ret = -1;
24 static RK_S32 rd_ret = -1;
25 static RK_S64 wr_timeout = -1;
26 static RK_S64 rd_timeout = -1;
27 
reset_test()28 void reset_test()
29 {
30     wr_val = wr_val_base;
31     rd_val = rd_val_base;
32     wr_ret = -1;
33     rd_ret = -1;
34     rd_val_base++;
35 
36     mpp_eventfd_write(data_fd, 0);
37     mpp_eventfd_read(data_fd, NULL, 0);
38 
39     mpp_log("eventfd test on writing %lld -> %lld\n", wr_val, rd_val);
40 }
41 
thread_read(void * arg)42 void *thread_read(void *arg)
43 {
44     (void) arg;
45     mpp_eventfd_write(sync_fd, 1);
46 
47     rd_ret = mpp_eventfd_read(data_fd, &rd_val, rd_timeout);
48     mpp_log("eventfd read %d timeout %d ret %lld val %lld\n", data_fd, rd_timeout, rd_ret, rd_val);
49 
50     return NULL;
51 }
52 
main()53 int main()
54 {
55     pthread_t td;
56 
57     mpp_log("eventfd test start\n");
58 
59     data_fd = mpp_eventfd_get(0);
60     sync_fd = mpp_eventfd_get(0);
61 
62     mpp_log("eventfd get data_fd %d sync_fd %d\n", data_fd, sync_fd);
63 
64     reset_test();
65     rd_timeout = -1;
66     wr_timeout = 0;
67 
68     pthread_create(&td, NULL, thread_read, NULL);
69     mpp_eventfd_read(sync_fd, NULL, -1);
70     mpp_log("eventfd write %d val %lld\n", data_fd, wr_val);
71     wr_ret = mpp_eventfd_write(data_fd, wr_val);
72     pthread_join(td, NULL);
73     mpp_log("eventfd block mode     test wr: %lld ret %d rd: %lld ret %d - %s\n",
74             wr_val, wr_ret, rd_val, rd_ret,
75             (wr_val == rd_val) ? "success" : "failed");
76 
77     reset_test();
78     rd_timeout = 0;
79     wr_timeout = 100;
80 
81     pthread_create(&td, NULL, thread_read, NULL);
82     mpp_eventfd_read(sync_fd, NULL, -1);
83     msleep(wr_timeout);
84     mpp_log("eventfd write %d val %lld\n", data_fd, wr_val);
85     wr_ret = mpp_eventfd_write(data_fd, wr_val);
86     pthread_join(td, NULL);
87     mpp_log("eventfd non-block mode test wr: %lld ret %d rd: %lld ret %d - %s\n",
88             wr_val, wr_ret, rd_val, rd_ret,
89             (wr_val != rd_val) ? "success" : "failed");
90 
91     reset_test();
92     rd_timeout = 100;
93     wr_timeout = 1;
94 
95     pthread_create(&td, NULL, thread_read, NULL);
96     mpp_eventfd_read(sync_fd, NULL, -1);
97     msleep(wr_timeout);
98     mpp_log("eventfd write %d val %lld\n", data_fd, wr_val);
99     wr_ret = mpp_eventfd_write(data_fd, wr_val);
100     pthread_join(td, NULL);
101     mpp_log("eventfd timeout   mode test wr: %lld ret %d rd: %lld ret %d - %s\n",
102             wr_val, wr_ret, rd_val, rd_ret,
103             (wr_val == rd_val) ? "success" : "failed");
104 
105     reset_test();
106     rd_timeout = 1;
107     wr_timeout = 100;
108 
109     pthread_create(&td, NULL, thread_read, NULL);
110     mpp_eventfd_read(sync_fd, NULL, -1);
111     msleep(wr_timeout);
112     mpp_log("eventfd write %d val %lld\n", data_fd, wr_val);
113     wr_ret = mpp_eventfd_write(data_fd, wr_val);
114     pthread_join(td, NULL);
115     mpp_log("eventfd timeout   mode test wr: %lld ret %d rd: %lld ret %d - %s\n",
116             wr_val, wr_ret, rd_val, rd_ret,
117             (wr_val != rd_val) ? "success" : "failed");
118 
119     mpp_eventfd_put(data_fd);
120     mpp_eventfd_put(sync_fd);
121 
122     mpp_log("eventfd test done\n");
123 
124     return 0;
125 }
126 
127