Skip to content

Commit

Permalink
serftests: winesync: Add some tests for wakeup signaling via alerts.
Browse files Browse the repository at this point in the history
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
  • Loading branch information
Zebediah Figura authored and xanmod committed Aug 2, 2022
1 parent 895b83e commit ea4499b
Showing 1 changed file with 66 additions and 0 deletions.
66 changes: 66 additions & 0 deletions tools/testing/selftests/drivers/winesync/winesync.c
Original file line number Diff line number Diff line change
Expand Up @@ -1245,8 +1245,12 @@ TEST(wake_all)
TEST(alert_any)
{
struct winesync_event_args event_args = {0};
struct winesync_wait_args wait_args = {0};
struct winesync_sem_args sem_args = {0};
struct wait_args thread_args;
struct timespec timeout;
__u32 objs[2], index;
pthread_t thread;
int fd, ret;

fd = open("/dev/winesync", O_CLOEXEC | O_RDONLY);
Expand Down Expand Up @@ -1295,6 +1299,35 @@ TEST(alert_any)
EXPECT_EQ(0, ret);
EXPECT_EQ(2, index);

/* test wakeup via alert */

ret = ioctl(fd, WINESYNC_IOC_RESET_EVENT, &event_args);
EXPECT_EQ(0, ret);

get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
wait_args.timeout = (uintptr_t)&timeout;
wait_args.objs = (uintptr_t)objs;
wait_args.count = 2;
wait_args.owner = 123;
wait_args.index = 0xdeadbeef;
wait_args.alert = event_args.event;
thread_args.fd = fd;
thread_args.args = &wait_args;
thread_args.request = WINESYNC_IOC_WAIT_ANY;
ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
EXPECT_EQ(0, ret);

ret = wait_for_thread(thread, 100);
EXPECT_EQ(ETIMEDOUT, ret);

ret = ioctl(fd, WINESYNC_IOC_SET_EVENT, &event_args);
EXPECT_EQ(0, ret);

ret = wait_for_thread(thread, 100);
EXPECT_EQ(0, ret);
EXPECT_EQ(0, thread_args.ret);
EXPECT_EQ(2, wait_args.index);

ret = ioctl(fd, WINESYNC_IOC_DELETE, &event_args.event);
EXPECT_EQ(0, ret);

Expand Down Expand Up @@ -1336,8 +1369,12 @@ TEST(alert_any)
TEST(alert_all)
{
struct winesync_event_args event_args = {0};
struct winesync_wait_args wait_args = {0};
struct winesync_sem_args sem_args = {0};
struct wait_args thread_args;
struct timespec timeout;
__u32 objs[2], index;
pthread_t thread;
int fd, ret;

fd = open("/dev/winesync", O_CLOEXEC | O_RDONLY);
Expand Down Expand Up @@ -1372,6 +1409,35 @@ TEST(alert_all)
EXPECT_EQ(0, ret);
EXPECT_EQ(2, index);

/* test wakeup via alert */

ret = ioctl(fd, WINESYNC_IOC_RESET_EVENT, &event_args);
EXPECT_EQ(0, ret);

get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
wait_args.timeout = (uintptr_t)&timeout;
wait_args.objs = (uintptr_t)objs;
wait_args.count = 2;
wait_args.owner = 123;
wait_args.index = 0xdeadbeef;
wait_args.alert = event_args.event;
thread_args.fd = fd;
thread_args.args = &wait_args;
thread_args.request = WINESYNC_IOC_WAIT_ALL;
ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
EXPECT_EQ(0, ret);

ret = wait_for_thread(thread, 100);
EXPECT_EQ(ETIMEDOUT, ret);

ret = ioctl(fd, WINESYNC_IOC_SET_EVENT, &event_args);
EXPECT_EQ(0, ret);

ret = wait_for_thread(thread, 100);
EXPECT_EQ(0, ret);
EXPECT_EQ(0, thread_args.ret);
EXPECT_EQ(2, wait_args.index);

ret = ioctl(fd, WINESYNC_IOC_DELETE, &event_args.event);
EXPECT_EQ(0, ret);

Expand Down

0 comments on commit ea4499b

Please sign in to comment.