aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os/linux
diff options
context:
space:
mode:
authorJoran Dirk Greef <joran@ronomon.com>2020-09-19 17:31:39 +0200
committerJoran Dirk Greef <joran@ronomon.com>2020-09-19 17:31:39 +0200
commitf4df2f091ab528dc7e1e91d8d60ebf3fd1bfa377 (patch)
tree242fec5edaa274d506759f4cae7b115f3ed29a02 /lib/std/os/linux
parent64ae9a6a870fc6d8295118f2d255ee661942dc78 (diff)
downloadzig-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.zig32
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..]);
}