diff options
author | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-09-20 02:13:37 +0200 |
---|---|---|
committer | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-10-12 00:35:30 +0200 |
commit | d0bf06bfa085c6791ebad5ab4ccbc8e090333a5f (patch) | |
tree | 6809fe3e1626436532c49b5e837d770e52b6acff | |
parent | 51c8f3e456fc208deadafc8d90404c63399f3196 (diff) | |
download | strace-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.c | 3 | ||||
-rw-r--r-- | tests/io_uring_register.c | 66 |
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; } |