selftests: ntsync: Add some tests for auto-reset event state.
authorElizabeth Figura <zfigura@codeweavers.com>
Fri, 13 Dec 2024 19:35:04 +0000 (13:35 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 8 Jan 2025 12:18:12 +0000 (13:18 +0100)
Test event-specific ioctls NTSYNC_IOC_EVENT_SET, NTSYNC_IOC_EVENT_RESET,
NTSYNC_IOC_EVENT_PULSE, NTSYNC_IOC_EVENT_READ for auto-reset events, and
waiting on auto-reset events.

Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
Link: https://lore.kernel.org/r/20241213193511.457338-24-zfigura@codeweavers.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
tools/testing/selftests/drivers/ntsync/ntsync.c

index 4024a5c48bbb6ae3e09fe6efb4ceb21a8e7045b9..66a096cb204565ebd5772c70c1c5d5c6a3f36cc1 100644 (file)
@@ -426,6 +426,62 @@ TEST(manual_event_state)
        close(fd);
 }
 
+TEST(auto_event_state)
+{
+       struct ntsync_event_args event_args;
+       __u32 index, signaled;
+       int fd, event, ret;
+
+       fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
+       ASSERT_LE(0, fd);
+
+       event_args.manual = 0;
+       event_args.signaled = 1;
+       event = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
+       EXPECT_LE(0, event);
+
+       check_event_state(event, 1, 0);
+
+       signaled = 0xdeadbeef;
+       ret = ioctl(event, NTSYNC_IOC_EVENT_SET, &signaled);
+       EXPECT_EQ(0, ret);
+       EXPECT_EQ(1, signaled);
+       check_event_state(event, 1, 0);
+
+       ret = wait_any(fd, 1, &event, 123, &index);
+       EXPECT_EQ(0, ret);
+       EXPECT_EQ(0, index);
+       check_event_state(event, 0, 0);
+
+       signaled = 0xdeadbeef;
+       ret = ioctl(event, NTSYNC_IOC_EVENT_RESET, &signaled);
+       EXPECT_EQ(0, ret);
+       EXPECT_EQ(0, signaled);
+       check_event_state(event, 0, 0);
+
+       ret = wait_any(fd, 1, &event, 123, &index);
+       EXPECT_EQ(-1, ret);
+       EXPECT_EQ(ETIMEDOUT, errno);
+
+       ret = ioctl(event, NTSYNC_IOC_EVENT_SET, &signaled);
+       EXPECT_EQ(0, ret);
+       EXPECT_EQ(0, signaled);
+
+       ret = ioctl(event, NTSYNC_IOC_EVENT_PULSE, &signaled);
+       EXPECT_EQ(0, ret);
+       EXPECT_EQ(1, signaled);
+       check_event_state(event, 0, 0);
+
+       ret = ioctl(event, NTSYNC_IOC_EVENT_PULSE, &signaled);
+       EXPECT_EQ(0, ret);
+       EXPECT_EQ(0, signaled);
+       check_event_state(event, 0, 0);
+
+       close(event);
+
+       close(fd);
+}
+
 TEST(test_wait_any)
 {
        int objs[NTSYNC_MAX_WAIT_COUNT + 1], fd, ret;