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