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 {
630630test "queue_nop" {
631631 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 };
634637 defer {
635638 ring.deinit();
636639 testing.expectEqual(@as(i32, -1), ring.fd);
......@@ -693,7 +696,10 @@ test "queue_nop" {
693696test "queue_readv" {
694697 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 };
697703 defer ring.deinit();
698704
699705 const fd = try os.openZ("/dev/zero", os.O_RDONLY | os.O_CLOEXEC, 0);
......@@ -731,7 +737,10 @@ test "queue_readv" {
731737test "queue_writev/queue_fsync" {
732738 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 };
735744 defer ring.deinit();
736745
737746 const path = "test_io_uring_queue_writev";
......@@ -770,10 +779,12 @@ test "queue_writev/queue_fsync" {
770779}
771780
772781test "queue_write/queue_read" {
773 // TODO
774 if (builtin.os.tag != .linux or true) return error.SkipZigTest;
782 if (builtin.os.tag != .linux) 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 };
777788 defer ring.deinit();
778789
779790 const path = "test_io_uring_queue_write";
......@@ -788,15 +799,20 @@ test "queue_write/queue_read" {
788799 ring.link_with_next_sqe(sqe_write);
789800 var sqe_read = try ring.queue_read(456, fd, buffer_read[0..], 10);
790801 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;
791807 testing.expectEqual(linux.io_uring_cqe {
792808 .user_data = 123,
793809 .res = buffer_write.len,
794810 .flags = 0,
795 }, try ring.copy_cqe());
811 }, cqe1);
796812 testing.expectEqual(linux.io_uring_cqe {
797813 .user_data = 456,
798814 .res = buffer_read.len,
799815 .flags = 0,
800 }, try ring.copy_cqe());
816 }, cqe2);
801817 testing.expectEqualSlices(u8, buffer_write[0..], buffer_read[0..]);
802818}