diff options
| author | Joran Dirk Greef <joran@ronomon.com> | 2020-09-19 17:31:39 +0200 |
|---|---|---|
| committer | Joran Dirk Greef <joran@ronomon.com> | 2020-09-19 17:31:39 +0200 |
| commit | f4df2f091ab528dc7e1e91d8d60ebf3fd1bfa377 (patch) | |
| tree | 242fec5edaa274d506759f4cae7b115f3ed29a02 /lib/std/os/linux | |
| parent | 64ae9a6a870fc6d8295118f2d255ee661942dc78 (diff) | |
| download | zig-f4df2f091ab528dc7e1e91d8d60ebf3fd1bfa377.tar.gz zig-f4df2f091ab528dc7e1e91d8d60ebf3fd1bfa377.zip | |
Allow the kernel to drive feature detection
Diffstat (limited to 'lib/std/os/linux')
| -rw-r--r-- | lib/std/os/linux/io_uring.zig | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/lib/std/os/linux/io_uring.zig b/lib/std/os/linux/io_uring.zig index 805646b3e9..4499400677 100644 --- a/lib/std/os/linux/io_uring.zig +++ b/lib/std/os/linux/io_uring.zig @@ -630,7 +630,10 @@ inline fn check_errno(res: usize) !void { test "queue_nop" { if (builtin.os.tag != .linux) return error.SkipZigTest; - var ring = try IO_Uring.init(1, 0); + var ring = IO_Uring.init(1, 0) catch |err| { + if (err == error.UnsupportedKernel) return error.SkipZigTest; + return err; + }; defer { ring.deinit(); testing.expectEqual(@as(i32, -1), ring.fd); @@ -693,7 +696,10 @@ test "queue_nop" { test "queue_readv" { if (builtin.os.tag != .linux) return error.SkipZigTest; - var ring = try IO_Uring.init(1, 0); + var ring = IO_Uring.init(1, 0) catch |err| { + if (err == error.UnsupportedKernel) return error.SkipZigTest; + return err; + }; defer ring.deinit(); const fd = try os.openZ("/dev/zero", os.O_RDONLY | os.O_CLOEXEC, 0); @@ -731,7 +737,10 @@ test "queue_readv" { test "queue_writev/queue_fsync" { if (builtin.os.tag != .linux) return error.SkipZigTest; - var ring = try IO_Uring.init(2, 0); + var ring = IO_Uring.init(2, 0) catch |err| { + if (err == error.UnsupportedKernel) return error.SkipZigTest; + return err; + }; defer ring.deinit(); const path = "test_io_uring_queue_writev"; @@ -770,10 +779,12 @@ test "queue_writev/queue_fsync" { } test "queue_write/queue_read" { - // TODO - if (builtin.os.tag != .linux or true) return error.SkipZigTest; + if (builtin.os.tag != .linux) return error.SkipZigTest; - var ring = try IO_Uring.init(2, 0); + var ring = IO_Uring.init(2, 0) catch |err| { + if (err == error.UnsupportedKernel) return error.SkipZigTest; + return err; + }; defer ring.deinit(); const path = "test_io_uring_queue_write"; @@ -788,15 +799,20 @@ test "queue_write/queue_read" { ring.link_with_next_sqe(sqe_write); var sqe_read = try ring.queue_read(456, fd, buffer_read[0..], 10); testing.expectEqual(@as(u32, 2), try ring.submit()); + + var cqe1 = try ring.copy_cqe(); + var cqe2 = try ring.copy_cqe(); + if (cqe1.res == -linux.EOPNOTSUPP) return error.SkipZigTest; + if (cqe2.res == -linux.EOPNOTSUPP) return error.SkipZigTest; testing.expectEqual(linux.io_uring_cqe { .user_data = 123, .res = buffer_write.len, .flags = 0, - }, try ring.copy_cqe()); + }, cqe1); testing.expectEqual(linux.io_uring_cqe { .user_data = 456, .res = buffer_read.len, .flags = 0, - }, try ring.copy_cqe()); + }, cqe2); testing.expectEqualSlices(u8, buffer_write[0..], buffer_read[0..]); } |
