From: Cyril Hrubis <chrubis@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v4] syscalls/ioprio: Add test cases for I/O priority
Date: Tue, 13 Aug 2019 14:02:45 +0200 [thread overview]
Message-ID: <20190813120244.GA16005@rei.lan> (raw)
In-Reply-To: <20190811075915.11608-1-linus.walleij@linaro.org>
Hi!
> diff --git a/testcases/kernel/syscalls/ioprio/ioprio_set01.c b/testcases/kernel/syscalls/ioprio/ioprio_set01.c
> new file mode 100644
> index 000000000000..3cc1e51fc5c0
> --- /dev/null
> +++ b/testcases/kernel/syscalls/ioprio/ioprio_set01.c
> @@ -0,0 +1,63 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2019 Linus Walleij <linus.walleij@linaro.org>
> + *
> + * Description:
> + * Basic ioprio_set() test. Gets the current process I/O priority and
> + * bumps it up one notch, then down two notches and checks that the
> + * new priority is reported back correctly.
> + */
> +#include <sys/types.h>
> +#include <sys/syscall.h>
> +
> +#include "tst_test.h"
> +#include "lapi/syscalls.h"
> +#include "ioprio.h"
> +
> +static void run(void)
> +{
> + int class, prio;
> +
> + /* Get the I/O priority for the current process */
> + TEST(sys_ioprio_get(IOPRIO_WHO_PROCESS, 0));
> +
> + if (TST_RET == -1)
> + tst_brk(TBROK | TTERRNO, "ioprio_get failed");
> +
> + class = IOPRIO_PRIO_CLASS(TST_RET);
> + prio = IOPRIO_PRIO_LEVEL(TST_RET);
> + tst_res(TINFO, "ioprio_get returned class %s prio %d",
> + to_class_str[class], prio);
> +
> + /* Bump prio to what it was + 1 */
> + class = IOPRIO_CLASS_BE;
> + if (!prio_in_range(prio + 1)) {
> + tst_res(TFAIL, "ioprio increase out of range (%d)", prio + 1);
> + return;
> + }
> + prio = (prio + 1) % IOPRIO_PRIO_NUM;
I guess that the % IOPRION_PRIO_NUM is not needed here since we already
checked that the prio+1 is in range, or do I miss something?
> + TEST(sys_ioprio_set(IOPRIO_WHO_PROCESS, 0,
> + IOPRIO_PRIO_VALUE(class, prio)));
> + if (TST_RET == -1)
> + tst_res(TFAIL | TTERRNO, "ioprio_set failed");
> + else
> + ioprio_check_setting(class, prio, 1);
> +
> + /* Bump prio down two notches */
> + if (!prio_in_range(prio - 2)) {
> + tst_res(TFAIL, "ioprio increase out of range (%d)", prio - 2);
> + return;
> + }
> + prio = (prio - 2) % IOPRIO_PRIO_NUM;
Here as well.
> + TEST(sys_ioprio_set(IOPRIO_WHO_PROCESS, 0,
> + IOPRIO_PRIO_VALUE(class, prio)));
> + if (TST_RET == -1)
> + tst_res(TFAIL | TTERRNO, "ioprio_set failed");
> + else
> + ioprio_check_setting(class, prio, 1);
> +}
> +
> +static struct tst_test test = {
> + .test_all = run,
> +};
> diff --git a/testcases/kernel/syscalls/ioprio/ioprio_set02.c b/testcases/kernel/syscalls/ioprio/ioprio_set02.c
> new file mode 100644
> index 000000000000..5472b549a268
> --- /dev/null
> +++ b/testcases/kernel/syscalls/ioprio/ioprio_set02.c
> @@ -0,0 +1,67 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2019 Linus Walleij <linus.walleij@linaro.org>
> + *
> + * Description:
> + * Extended ioprio_set() test. Gets the current process I/O priority and
^
We are not getting anything here.
> + * tests to set all 8 priority levels for best effort prioritym then
> + * switches to test all 8 priority levels for idle priority. Also test
> + * some non-working priorities to make sure they don't work.
> + */
> +#include <sys/types.h>
> +#include <sys/syscall.h>
> +
> +#include "tst_test.h"
> +#include "lapi/syscalls.h"
> +#include "ioprio.h"
> +
> +static void run(void)
> +{
> + int class, prio;
> + int fail_in_loop;
> +
> + /* Bump to best effort scheduling, all 8 priorities */
> + class = IOPRIO_CLASS_BE;
> +
> + fail_in_loop = 0;
> + for (prio = 0; prio < IOPRIO_PRIO_NUM; prio++) {
> + TEST(sys_ioprio_set(IOPRIO_WHO_PROCESS, 0,
> + IOPRIO_PRIO_VALUE(class, prio)));
> + if (TST_RET == -1) {
> + tst_res(TFAIL | TTERRNO, "ioprio_set IOPRIO_CLASS_BE prio %d failed", prio);
> + fail_in_loop = 1;
> + }
> + }
> + if (!fail_in_loop)
> + tst_res(TPASS, "tested all prios in class %s",
> + to_class_str[class]);
> +
> + /* Bump down to idle scheduling */
> + class = IOPRIO_CLASS_IDLE;
> +
> + fail_in_loop = 0;
> + for (prio = 0; prio < IOPRIO_PRIO_NUM; prio++) {
> + TEST(sys_ioprio_set(IOPRIO_WHO_PROCESS, 0,
> + IOPRIO_PRIO_VALUE(class, prio)));
> + if (TST_RET == -1) {
> + tst_res(TFAIL | TTERRNO, "ioprio_set IOPRIO_CLASS_IDLE prio %d failed", prio);
> + fail_in_loop = 1;
> + }
> + }
> + if (!fail_in_loop)
> + tst_res(TPASS, "tested all prios in class %s",
> + to_class_str[class]);
> +
> + /* Test NONE scheduling */
> + class = IOPRIO_CLASS_NONE;
> + TEST(sys_ioprio_set(IOPRIO_WHO_PROCESS, 0,
> + IOPRIO_PRIO_VALUE(class, 0)));
> + if (TST_RET == -1)
> + tst_res(TFAIL | TTERRNO, "ioprio_set IOPRIO_CLASS_NONE failed");
> + else
> + ioprio_check_setting(class, 0, 1);
> +}
> +
> +static struct tst_test test = {
> + .test_all = run,
> +};
> diff --git a/testcases/kernel/syscalls/ioprio/ioprio_set03.c b/testcases/kernel/syscalls/ioprio/ioprio_set03.c
> new file mode 100644
> index 000000000000..66d61b67e8c1
> --- /dev/null
> +++ b/testcases/kernel/syscalls/ioprio/ioprio_set03.c
> @@ -0,0 +1,57 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2019 Linus Walleij <linus.walleij@linaro.org>
> + *
> + * Description:
> + * Negative ioprio_set() test. Test some non-working priorities to make
> + * sure they don't work.
> + */
> +#include <sys/types.h>
> +#include <sys/syscall.h>
> +
> +#include "tst_test.h"
> +#include "lapi/syscalls.h"
> +#include "ioprio.h"
> +
> +static void run(void)
> +{
> + int class;
> +
> + class = IOPRIO_CLASS_BE;
> +
> + /* Test to fail with prio 8, first set prio 4 */
> + sys_ioprio_set(IOPRIO_WHO_PROCESS, 0,
> + IOPRIO_PRIO_VALUE(class, 4));
What do we need this for?
> + TEST(sys_ioprio_set(IOPRIO_WHO_PROCESS, 0,
> + IOPRIO_PRIO_VALUE(class, 8)));
> + if (TST_RET == -1) {
> + ioprio_check_setting(class, 4, 1);
> + if (errno == EINVAL)
> + tst_res(TPASS | TTERRNO, "returned correct error for wrong prio");
> + else
> + tst_res(TFAIL, "ioprio_set returns wrong errno %d",
> + TST_ERR);
> + } else {
> + tst_res(TFAIL, "ioprio_set IOPRIO_CLASS_BE prio 8 should not work");
> + }
> +
> + /* Any other prio than 0 should not work with NONE */
> + class = IOPRIO_CLASS_NONE;
> + TEST(sys_ioprio_set(IOPRIO_WHO_PROCESS, 0,
> + IOPRIO_PRIO_VALUE(class, 4)));
> + if (TST_RET == -1) {
> + tst_res(TINFO, "tested illegal priority with class %s",
> + to_class_str[class]);
> + if (errno == EINVAL)
> + tst_res(TPASS | TTERRNO, "returned correct error for wrong prio");
> + else
> + tst_res(TFAIL, "ioprio_set returns wrong errno %d",
> + TST_ERR);
> + } else {
> + tst_res(TFAIL, "ioprio_set IOPRIO_CLASS_NONE should fail");
> + }
This is almost copy&pasted I would consider putting it into a
function...
> +}
> +
> +static struct tst_test test = {
> + .test_all = run,
> +};
Other than the minor issues this looks good.
Also I can fix these and apply the patch myself, no need to resend v5.
--
Cyril Hrubis
chrubis@suse.cz
prev parent reply other threads:[~2019-08-13 12:02 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-11 7:59 [LTP] [PATCH v4] syscalls/ioprio: Add test cases for I/O priority Linus Walleij
2019-08-13 12:02 ` Cyril Hrubis [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190813120244.GA16005@rei.lan \
--to=chrubis@suse.cz \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox