authorgravatar for joran@ronomon.comJoran Dirk Greef <joran@ronomon.com> 2020-09-19 17:31:39+02:00
committergravatar for joran@ronomon.comJoran Dirk Greef <joran@ronomon.com> 2020-09-19 17:31:39+02:00
logf4df2f091ab528dc7e1e91d8d60ebf3fd1bfa377
tree242fec5edaa274d506759f4cae7b115f3ed29a02
parent64ae9a6a870fc6d8295118f2d255ee661942dc78

Allow the kernel to drive feature detection


1 files changed, 24 insertions(+), 8 deletions(-)

lib/std/os/linux/io_uring.zig+24-8
...@@ -630,7 +630,10 @@ inline fn check_errno(res: usize) !void {...@@ -630,7 +630,10 @@ inline fn check_errno(res: usize) !void {
630test "queue_nop" {630test "queue_nop" {
631 if (builtin.os.tag != .linux) return error.SkipZigTest;631 if (builtin.os.tag != .linux) return error.SkipZigTest;
632632
633 var ring = try IO_Uring.init(1, 0);633 var ring = IO_Uring.init(1, 0) catch |err| {
634 if (err == error.UnsupportedKernel) return error.SkipZigTest;
635 return err;
636 };
634 defer {637 defer {
635 ring.deinit();638 ring.deinit();
636 testing.expectEqual(@as(i32, -1), ring.fd);639 testing.expectEqual(@as(i32, -1), ring.fd);
...@@ -693,7 +696,10 @@ test "queue_nop" {...@@ -693,7 +696,10 @@ test "queue_nop" {
693test "queue_readv" {696test "queue_readv" {
694 if (builtin.os.tag != .linux) return error.SkipZigTest;697 if (builtin.os.tag != .linux) return error.SkipZigTest;
695698
696 var ring = try IO_Uring.init(1, 0);699 var ring = IO_Uring.init(1, 0) catch |err| {
700 if (err == error.UnsupportedKernel) return error.SkipZigTest;
701 return err;
702 };
697 defer ring.deinit();703 defer ring.deinit();
698704
699 const fd = try os.openZ("/dev/zero", os.O_RDONLY | os.O_CLOEXEC, 0);705 const fd = try os.openZ("/dev/zero", os.O_RDONLY | os.O_CLOEXEC, 0);
...@@ -731,7 +737,10 @@ test "queue_readv" {...@@ -731,7 +737,10 @@ test "queue_readv" {
731test "queue_writev/queue_fsync" {737test "queue_writev/queue_fsync" {
732 if (builtin.os.tag != .linux) return error.SkipZigTest;738 if (builtin.os.tag != .linux) return error.SkipZigTest;
733739
734 var ring = try IO_Uring.init(2, 0);740 var ring = IO_Uring.init(2, 0) catch |err| {
741 if (err == error.UnsupportedKernel) return error.SkipZigTest;
742 return err;
743 };
735 defer ring.deinit();744 defer ring.deinit();
736 745
737 const path = "test_io_uring_queue_writev";746 const path = "test_io_uring_queue_writev";
...@@ -770,10 +779,12 @@ test "queue_writev/queue_fsync" {...@@ -770,10 +779,12 @@ test "queue_writev/queue_fsync" {
770}779}
771780
772test "queue_write/queue_read" {781test "queue_write/queue_read" {
773 // TODO782 if (builtin.os.tag != .linux) return error.SkipZigTest;
774 if (builtin.os.tag != .linux or true) return error.SkipZigTest;
775783
776 var ring = try IO_Uring.init(2, 0);784 var ring = IO_Uring.init(2, 0) catch |err| {
785 if (err == error.UnsupportedKernel) return error.SkipZigTest;
786 return err;
787 };
777 defer ring.deinit();788 defer ring.deinit();
778 789
779 const path = "test_io_uring_queue_write";790 const path = "test_io_uring_queue_write";
...@@ -788,15 +799,20 @@ test "queue_write/queue_read" {...@@ -788,15 +799,20 @@ test "queue_write/queue_read" {
788 ring.link_with_next_sqe(sqe_write);799 ring.link_with_next_sqe(sqe_write);
789 var sqe_read = try ring.queue_read(456, fd, buffer_read[0..], 10);800 var sqe_read = try ring.queue_read(456, fd, buffer_read[0..], 10);
790 testing.expectEqual(@as(u32, 2), try ring.submit());801 testing.expectEqual(@as(u32, 2), try ring.submit());
802
803 var cqe1 = try ring.copy_cqe();
804 var cqe2 = try ring.copy_cqe();
805 if (cqe1.res == -linux.EOPNOTSUPP) return error.SkipZigTest;
806 if (cqe2.res == -linux.EOPNOTSUPP) return error.SkipZigTest;
791 testing.expectEqual(linux.io_uring_cqe {807 testing.expectEqual(linux.io_uring_cqe {
792 .user_data = 123,808 .user_data = 123,
793 .res = buffer_write.len,809 .res = buffer_write.len,
794 .flags = 0,810 .flags = 0,
795 }, try ring.copy_cqe());811 }, cqe1);
796 testing.expectEqual(linux.io_uring_cqe {812 testing.expectEqual(linux.io_uring_cqe {
797 .user_data = 456,813 .user_data = 456,
798 .res = buffer_read.len,814 .res = buffer_read.len,
799 .flags = 0,815 .flags = 0,
800 }, try ring.copy_cqe());816 }, cqe2);
801 testing.expectEqualSlices(u8, buffer_write[0..], buffer_read[0..]);817 testing.expectEqualSlices(u8, buffer_write[0..], buffer_read[0..]);
802}818}