|
@@ -125,7 +125,23 @@ static ossl_inline int io_getevents(aio_context_t ctx, long min, long max,
|
|
|
struct io_event *events,
|
|
|
struct timespec *timeout)
|
|
|
{
|
|
|
+#if defined(__NR_io_getevents)
|
|
|
return syscall(__NR_io_getevents, ctx, min, max, events, timeout);
|
|
|
+#elif defined(__NR_io_pgetevents_time64)
|
|
|
+ /* Let's only support the 64 suffix syscalls for 64-bit time_t.
|
|
|
+ * This simplifies the code for us as we don't need to use a 64-bit
|
|
|
+ * version of timespec with a 32-bit time_t and handle converting
|
|
|
+ * between 64-bit and 32-bit times and check for overflows.
|
|
|
+ */
|
|
|
+ if (sizeof(timeout->tv_sec) == 8)
|
|
|
+ return syscall(__NR_io_pgetevents_time64, ctx, min, max, events, timeout, NULL);
|
|
|
+ else {
|
|
|
+ errno = ENOSYS;
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+#else
|
|
|
+# error "We require either the io_getevents syscall or __NR_io_pgetevents_time64."
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
static void afalg_waitfd_cleanup(ASYNC_WAIT_CTX *ctx, const void *key,
|