lkml.org 
[lkml]   [2024]   [Mar]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 27/30] selftests: ntsync: Add some tests for wakeup signaling via alerts.
    Date
    Expand the alert tests to cover alerting a thread mid-wait, to test that the
    relevant scheduling logic works correctly.

    Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
    ---
    .../testing/selftests/drivers/ntsync/ntsync.c | 62 +++++++++++++++++++
    1 file changed, 62 insertions(+)

    diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
    index 5465a16d38b3..968874d7e325 100644
    --- a/tools/testing/selftests/drivers/ntsync/ntsync.c
    +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
    @@ -1113,9 +1113,12 @@ TEST(wake_all)
    TEST(alert_any)
    {
    struct ntsync_event_args event_args = {0};
    + struct ntsync_wait_args wait_args = {0};
    struct ntsync_sem_args sem_args = {0};
    __u32 index, count, signaled;
    + struct wait_args thread_args;
    int objs[2], fd, ret;
    + pthread_t thread;

    fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
    ASSERT_LE(0, fd);
    @@ -1163,6 +1166,34 @@ TEST(alert_any)
    EXPECT_EQ(0, ret);
    EXPECT_EQ(2, index);

    + /* test wakeup via alert */
    +
    + ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_RESET, &signaled);
    + EXPECT_EQ(0, ret);
    +
    + wait_args.timeout = get_abs_timeout(1000);
    + 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 = NTSYNC_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(event_args.event, NTSYNC_IOC_EVENT_SET, &signaled);
    + 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);
    +
    close(event_args.event);

    /* test with an auto-reset event */
    @@ -1199,9 +1230,12 @@ TEST(alert_any)
    TEST(alert_all)
    {
    struct ntsync_event_args event_args = {0};
    + struct ntsync_wait_args wait_args = {0};
    struct ntsync_sem_args sem_args = {0};
    + struct wait_args thread_args;
    __u32 index, count, signaled;
    int objs[2], fd, ret;
    + pthread_t thread;

    fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
    ASSERT_LE(0, fd);
    @@ -1235,6 +1269,34 @@ TEST(alert_all)
    EXPECT_EQ(0, ret);
    EXPECT_EQ(2, index);

    + /* test wakeup via alert */
    +
    + ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_RESET, &signaled);
    + EXPECT_EQ(0, ret);
    +
    + wait_args.timeout = get_abs_timeout(1000);
    + 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 = NTSYNC_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(event_args.event, NTSYNC_IOC_EVENT_SET, &signaled);
    + 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);
    +
    close(event_args.event);

    /* test with an auto-reset event */
    --
    2.43.0

    \
     
     \ /
      Last update: 2024-05-27 16:14    [W:5.762 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site