summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2021-09-20 02:13:37 +0200
committerEugene Syromyatnikov <evgsyr@gmail.com>2021-10-12 00:35:30 +0200
commitd0bf06bfa085c6791ebad5ab4ccbc8e090333a5f (patch)
tree6809fe3e1626436532c49b5e837d770e52b6acff
parent51c8f3e456fc208deadafc8d90404c63399f3196 (diff)
downloadstrace-d0bf06bfa085c6791ebad5ab4ccbc8e090333a5f.tar.gz
io_uring: decode IORING_REGISTER_IOWQ_AFF io_uring_register op
* src/io_uring.c (SYS_FUNC(io_uring_register)) <case IORING_REGISTER_IOWQ_AFF>: Decode, call print_affinitylist. * tests/io_uring_register.c: Add checks for IORING_REGISTER_IOWQ_AFF op deocding.
-rw-r--r--src/io_uring.c3
-rw-r--r--tests/io_uring_register.c66
2 files changed, 69 insertions, 0 deletions
diff --git a/src/io_uring.c b/src/io_uring.c
index 8ef8bb29c..8bd48100c 100644
--- a/src/io_uring.c
+++ b/src/io_uring.c
@@ -518,6 +518,9 @@ SYS_FUNC(io_uring_register)
case IORING_REGISTER_BUFFERS_UPDATE:
print_io_uring_update_rsrc(tcp, arg, nargs, opcode);
break;
+ case IORING_REGISTER_IOWQ_AFF:
+ print_affinitylist(tcp, arg, nargs);
+ break;
case IORING_UNREGISTER_BUFFERS:
case IORING_UNREGISTER_FILES:
case IORING_UNREGISTER_EVENTFD:
diff --git a/tests/io_uring_register.c b/tests/io_uring_register.c
index f800311d2..0b3fa2af0 100644
--- a/tests/io_uring_register.c
+++ b/tests/io_uring_register.c
@@ -783,6 +783,72 @@ main(void)
}
}
+
+ /* IORING_REGISTER_IOWQ_AFF */
+ unsigned long aff[] = {
+ (unsigned long) 0xbadc0deddadfacedULL,
+ (unsigned long) 0xfacefeeddeadbeefULL,
+ };
+ const unsigned long *arg_aff = tail_memdup(aff, sizeof(aff));
+ const unsigned long *arg_aff_end = arg_aff + ARRAY_SIZE(aff);
+
+ sys_io_uring_register(fd_null, 17, NULL, 0xfacefeed);
+ printf("io_uring_register(%u<%s>, "
+ XLAT_KNOWN(0x11, "IORING_REGISTER_IOWQ_AFF")
+ ", NULL, 4207869677) = %s\n",
+ fd_null, path_null, errstr);
+
+ sys_io_uring_register(fd_null, 17, arg_aff_end, 0);
+ printf("io_uring_register(%u<%s>, "
+ XLAT_KNOWN(0x11, "IORING_REGISTER_IOWQ_AFF") ", [], 0) = %s\n",
+ fd_null, path_null, errstr);
+
+ sys_io_uring_register(fd_null, 17, arg_aff_end, 1);
+ printf("io_uring_register(%u<%s>, "
+ XLAT_KNOWN(0x11, "IORING_REGISTER_IOWQ_AFF")
+ ", %p, 1) = %s\n",
+ fd_null, path_null, arg_aff_end, errstr);
+
+ sys_io_uring_register(fd_null, 17, arg_aff + 1, 2);
+ printf("io_uring_register(%u<%s>, "
+ XLAT_KNOWN(0x11, "IORING_REGISTER_IOWQ_AFF")
+#ifdef WORDS_BIGENDIAN
+# if SIZEOF_LONG > 4
+ ", [49, 50, 51, 54, 55, 57, 59, 60, 61, 62, 63]" /* face */
+# else
+ ", [16, 18, 19, 21, 23, 25, 26, 27, 28, 30, 31]" /* dead */
+# endif
+#else
+ ", [0, 1, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 15]" /* beef */
+#endif /* WORDS_BIGENDIAN */
+ ", 2) = %s\n",
+ fd_null, path_null, errstr);
+
+ sys_io_uring_register(fd_null, 17, arg_aff + 1, sizeof(aff));
+ printf("io_uring_register(%u<%s>, "
+ XLAT_KNOWN(0x11, "IORING_REGISTER_IOWQ_AFF")
+ ", %p, %zu) = %s\n",
+ fd_null, path_null, arg_aff + 1, sizeof(aff), errstr);
+
+ sys_io_uring_register(fd_null, 17, arg_aff, sizeof(aff));
+ printf("io_uring_register(%u<%s>, "
+ XLAT_KNOWN(0x11, "IORING_REGISTER_IOWQ_AFF") ", "
+ "[0, 2, 3, 5, 6, 7, 10, 11, 13, 15" /* aced */
+ ", 16, 17, 18, 19, 20, 22, 23, 25, 27, 28, 30, 31" /* dadf */
+#if SIZEOF_LONG > 4
+ ", 32, 34, 35, 37, 38, 39, 40, 42, 43" /* 0ded */
+ ", 50, 51, 52, 54, 55, 57, 59, 60, 61, 63" /* badc */
+ ", 64, 65, 66, 67, 69, 70, 71, 73, 74, 75, 76, 77, 79" /* beef */
+ ", 80, 82, 83, 85, 87, 89, 90, 91, 92, 94, 95" /* dead feed */
+ ", 96, 98, 99, 101, 102, 103, 105, 106, 107, 108, 109, 110, 111"
+ ", 113, 114, 115, 118, 119, 121, 123, 124, 125, 126, 127"/*face*/
+#else
+ ", 32, 33, 34, 35, 37, 38, 39, 41, 42, 43, 44, 45, 47" /* beef */
+ ", 48, 50, 51, 53, 55, 57, 58, 59, 60, 62, 63" /* dead */
+#endif
+ "], %zu) = %s\n",
+ fd_null, path_null, sizeof(aff), errstr);
+
puts("+++ exited with 0 +++");
return 0;
}