Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests: ntsync: Add some tests for manual-reset event state.

Test event-specific ioctls NTSYNC_IOC_EVENT_SET, NTSYNC_IOC_EVENT_RESET,
NTSYNC_IOC_EVENT_PULSE, NTSYNC_IOC_EVENT_READ for manual-reset events, and
waiting on manual-reset events.

Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
Link: https://lore.kernel.org/r/20241213193511.457338-23-zfigura@codeweavers.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Elizabeth Figura and committed by
Greg Kroah-Hartman
d2083b5f 72a651c1

+86
+86
tools/testing/selftests/drivers/ntsync/ntsync.c
··· 73 73 return ret; 74 74 } 75 75 76 + static int read_event_state(int event, __u32 *signaled, __u32 *manual) 77 + { 78 + struct ntsync_event_args args; 79 + int ret; 80 + 81 + memset(&args, 0xcc, sizeof(args)); 82 + ret = ioctl(event, NTSYNC_IOC_EVENT_READ, &args); 83 + *signaled = args.signaled; 84 + *manual = args.manual; 85 + return ret; 86 + } 87 + 88 + #define check_event_state(event, signaled, manual) \ 89 + ({ \ 90 + __u32 __signaled, __manual; \ 91 + int ret = read_event_state((event), &__signaled, &__manual); \ 92 + EXPECT_EQ(0, ret); \ 93 + EXPECT_EQ((signaled), __signaled); \ 94 + EXPECT_EQ((manual), __manual); \ 95 + }) 96 + 76 97 static int wait_objs(int fd, unsigned long request, __u32 count, 77 98 const int *objs, __u32 owner, __u32 *index) 78 99 { ··· 357 336 EXPECT_EQ(ETIMEDOUT, errno); 358 337 359 338 close(mutex); 339 + 340 + close(fd); 341 + } 342 + 343 + TEST(manual_event_state) 344 + { 345 + struct ntsync_event_args event_args; 346 + __u32 index, signaled; 347 + int fd, event, ret; 348 + 349 + fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); 350 + ASSERT_LE(0, fd); 351 + 352 + event_args.manual = 1; 353 + event_args.signaled = 0; 354 + event = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args); 355 + EXPECT_LE(0, event); 356 + check_event_state(event, 0, 1); 357 + 358 + signaled = 0xdeadbeef; 359 + ret = ioctl(event, NTSYNC_IOC_EVENT_SET, &signaled); 360 + EXPECT_EQ(0, ret); 361 + EXPECT_EQ(0, signaled); 362 + check_event_state(event, 1, 1); 363 + 364 + ret = ioctl(event, NTSYNC_IOC_EVENT_SET, &signaled); 365 + EXPECT_EQ(0, ret); 366 + EXPECT_EQ(1, signaled); 367 + check_event_state(event, 1, 1); 368 + 369 + ret = wait_any(fd, 1, &event, 123, &index); 370 + EXPECT_EQ(0, ret); 371 + EXPECT_EQ(0, index); 372 + check_event_state(event, 1, 1); 373 + 374 + signaled = 0xdeadbeef; 375 + ret = ioctl(event, NTSYNC_IOC_EVENT_RESET, &signaled); 376 + EXPECT_EQ(0, ret); 377 + EXPECT_EQ(1, signaled); 378 + check_event_state(event, 0, 1); 379 + 380 + ret = ioctl(event, NTSYNC_IOC_EVENT_RESET, &signaled); 381 + EXPECT_EQ(0, ret); 382 + EXPECT_EQ(0, signaled); 383 + check_event_state(event, 0, 1); 384 + 385 + ret = wait_any(fd, 1, &event, 123, &index); 386 + EXPECT_EQ(-1, ret); 387 + EXPECT_EQ(ETIMEDOUT, errno); 388 + 389 + ret = ioctl(event, NTSYNC_IOC_EVENT_SET, &signaled); 390 + EXPECT_EQ(0, ret); 391 + EXPECT_EQ(0, signaled); 392 + 393 + ret = ioctl(event, NTSYNC_IOC_EVENT_PULSE, &signaled); 394 + EXPECT_EQ(0, ret); 395 + EXPECT_EQ(1, signaled); 396 + check_event_state(event, 0, 1); 397 + 398 + ret = ioctl(event, NTSYNC_IOC_EVENT_PULSE, &signaled); 399 + EXPECT_EQ(0, ret); 400 + EXPECT_EQ(0, signaled); 401 + check_event_state(event, 0, 1); 402 + 403 + close(event); 360 404 361 405 close(fd); 362 406 }