7ad0e4b2f83c.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "../config-host.h"
  2. /* SPDX-License-Identifier: MIT */
  3. #include <stdio.h>
  4. #include <time.h>
  5. #include <sys/time.h>
  6. #include "liburing.h"
  7. #include "helpers.h"
  8. int main(int argc, char *argv[])
  9. {
  10. struct __kernel_timespec ts1, ts2;
  11. struct io_uring_cqe *cqe;
  12. struct io_uring_sqe *sqe;
  13. struct io_uring ring;
  14. unsigned long msec;
  15. struct timeval tv;
  16. int ret;
  17. if (argc > 1)
  18. return T_EXIT_SKIP;
  19. ret = io_uring_queue_init(32, &ring, 0);
  20. if (ret) {
  21. fprintf(stderr, "io_uring_queue_init=%d\n", ret);
  22. return T_EXIT_FAIL;
  23. }
  24. sqe = io_uring_get_sqe(&ring);
  25. io_uring_prep_nop(sqe);
  26. ret = io_uring_submit(&ring);
  27. if (ret != 1) {
  28. fprintf(stderr, "io_uring_submit1=%d\n", ret);
  29. return T_EXIT_FAIL;
  30. }
  31. ts1.tv_sec = 5,
  32. ts1.tv_nsec = 0;
  33. ret = io_uring_wait_cqe_timeout(&ring, &cqe, &ts1);
  34. if (ret) {
  35. fprintf(stderr, "io_uring_wait_cqe_timeout=%d\n", ret);
  36. return T_EXIT_FAIL;
  37. }
  38. io_uring_cqe_seen(&ring, cqe);
  39. gettimeofday(&tv, NULL);
  40. ts2.tv_sec = 1;
  41. ts2.tv_nsec = 0;
  42. sqe = io_uring_get_sqe(&ring);
  43. io_uring_prep_timeout(sqe, &ts2, 0, 0);
  44. sqe->user_data = 89;
  45. ret = io_uring_submit(&ring);
  46. if (ret != 1) {
  47. fprintf(stderr, "io_uring_submit2=%d\n", ret);
  48. return T_EXIT_FAIL;
  49. }
  50. io_uring_wait_cqe(&ring, &cqe);
  51. io_uring_cqe_seen(&ring, cqe);
  52. msec = mtime_since_now(&tv);
  53. if (msec >= 900 && msec <= 1100) {
  54. io_uring_queue_exit(&ring);
  55. return T_EXIT_PASS;
  56. }
  57. fprintf(stderr, "%s: Timeout seems wonky (got %lu)\n", __FUNCTION__,
  58. msec);
  59. io_uring_queue_exit(&ring);
  60. return T_EXIT_FAIL;
  61. }