1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Copyright (C) 2015-2017 Cyril Hrubis <chrubis@suse.cz> 4 */ 5 6/* 7 * Check that poll() timeouts correctly. 8 */ 9#include <errno.h> 10#include <fcntl.h> 11#include <sys/wait.h> 12#include <sys/poll.h> 13 14#include "tst_timer_test.h" 15 16static int fds[2]; 17 18int sample_fn(int clk_id, long long usec) 19{ 20 unsigned int sleep_ms = usec / 1000; 21 22 struct pollfd pfds[] = { 23 {.fd = fds[0], .events = POLLIN} 24 }; 25 26 tst_timer_start(clk_id); 27 TEST(poll(pfds, 1, sleep_ms)); 28 tst_timer_stop(); 29 tst_timer_sample(); 30 31 if (TST_RET != 0) { 32 tst_res(TFAIL | TTERRNO, "poll() returned %li", TST_RET); 33 return 1; 34 } 35 36 return 0; 37} 38 39static void setup(void) 40{ 41 SAFE_PIPE(fds); 42} 43 44static void cleanup(void) 45{ 46 if (fds[0] > 0) 47 SAFE_CLOSE(fds[0]); 48 49 if (fds[1] > 0) 50 SAFE_CLOSE(fds[1]); 51} 52 53static struct tst_test test = { 54 .scall = "poll()", 55 .sample = sample_fn, 56 .setup = setup, 57 .cleanup = cleanup, 58}; 59