From: Cyril Hrubis <chrubis@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v2] sched_getattr/sched_getattr02: Add new testcase for sched_getattr
Date: Thu, 29 Oct 2015 17:09:13 +0100 [thread overview]
Message-ID: <20151029160913.GE23990@rei> (raw)
In-Reply-To: <56302781.30701@huawei.com>
Hi!
> +#include "test.h"
> +#include "linux_syscall_numbers.h"
> +#include "lapi/sched.h"
> +
> +char *TCID = "sched_getattr02";
> +
> +#define SCHED_DEADLINE 6
> +#define RUNTIME_VAL 10000000
> +#define PERIOD_VAL 30000000
> +#define DEADLINE_VAL 30000000
> +
> +static pid_t pid;
> +static pid_t unused_pid;
> +struct sched_attr attr_copy;
> +static unsigned int size;
> +static unsigned int inval_size;
> +static unsigned int flags;
> +static unsigned int inval_flags = 10000;
> +
> +static struct test_case {
> + pid_t *pid;
> + struct sched_attr *a;
> + unsigned int *size;
> + unsigned int *flags;
> + int exp_errno;
> +} test_cases[] = {
> + {&unused_pid, &attr_copy, &size, &flags, ESRCH},
> + {&pid, NULL, &size, &flags, EINVAL},
> + {&pid, &attr_copy, &inval_size, &flags, EINVAL},
> + {&pid, &attr_copy, &size, &inval_flags, EINVAL}
> +};
> +
> +static void cleanup(void);
> +static void setup(void);
> +static void sched_getattr_verify(const struct test_case *test);
> +
> +int TST_TOTAL = ARRAY_SIZE(test_cases);
> +
> +void *run_deadline(void *data LTP_ATTRIBUTE_UNUSED)
> +{
> + struct sched_attr attr;
> + int ret;
> + unsigned int flags = 0;
> + int ind;
> +
> + attr.size = sizeof(attr);
> + attr.sched_flags = 0;
> + attr.sched_nice = 0;
> + attr.sched_priority = 0;
> +
> + /* This creates a 10ms/30ms reservation */
> + attr.sched_policy = SCHED_DEADLINE;
> + attr.sched_runtime = RUNTIME_VAL;
> + attr.sched_period = PERIOD_VAL;
> + attr.sched_deadline = DEADLINE_VAL;
> +
> + ret = sched_setattr(0, &attr, flags);
> + if (ret < 0)
> + tst_brkm(TFAIL | TERRNO, NULL, "sched_setattr() failed");
Hmm, do we actually have to call sched_setattr() before we try to do
sched_getattr()?
> + for (ind = 0; ind < TST_TOTAL; ind++)
> + sched_getattr_verify(&test_cases[ind]);
Using anything else than i as loop variable is strange.
> + return NULL;
> +}
> +
> +static void sched_getattr_verify(const struct test_case *test)
> +{
> + TEST(sched_getattr(*(test->pid), test->a, *(test->size),
> + *(test->flags)));
> +
> + if (TEST_RETURN != -1) {
> + tst_resm(TFAIL, "sched_getattr() succeeded unexpectedly.");
> + return;
> + }
> +
> + if (TEST_ERRNO == test->exp_errno) {
> + tst_resm(TPASS | TTERRNO,
> + "sched_getattr() returned the expected value");
^
"failed expectedly" would be
a bit better.
> + return;
> + }
> +
> + tst_resm(TFAIL | TTERRNO, "sched_getattr() got unexpected return "
^
"failed unexpectedly"
> + "value: expected: %d - %s",
> + test->exp_errno, tst_strerrno(test->exp_errno));
> +}
> +
> +int main(int argc, char **argv)
> +{
> + pthread_t thread;
> + int lc;
> +
> + tst_parse_opts(argc, argv, NULL, NULL);
> +
> + setup();
> +
> + for (lc = 0; TEST_LOOPING(lc); lc++) {
> + pthread_create(&thread, NULL, run_deadline, NULL);
> + pthread_join(thread, NULL);
> + }
> +
> + cleanup();
> + tst_exit();
> +}
> +
> +void setup(void)
> +{
> + pid = 0;
Pid is global variable and therefore initialized to 0 allready.
> + unused_pid = tst_get_unused_pid(cleanup);
> + size = sizeof(attr_copy);
> + inval_size = size - 1;
Both sizeof(attr_copy) and sizeof(attr_copy) - 1 are compile time
constants, you can use them directly in the structure initalizer instead
of using it indirectly here.
Also the flags can be initialized directly, no need to use pointers as
they are constant at the compile time as well.
> + flags = 0;
> +
> + tst_require_root();
> +
> + if ((tst_kvercmp(3, 14, 0)) < 0)
> + tst_brkm(TCONF, NULL, "EDF needs kernel 3.14 or higher");
> +
> + TEST_PAUSE;
> +}
> +
> +void cleanup(void)
> +{
> +}
Do not add useless empty cleanup() function.
--
Cyril Hrubis
chrubis@suse.cz
next prev parent reply other threads:[~2015-10-29 16:09 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-20 12:59 [LTP] [PATCH] sched_getattr/sched_getattr02: Add new testcase for sched_getattr Cui Bixuan
2015-10-26 15:47 ` Cyril Hrubis
2015-10-28 1:40 ` [LTP] [PATCH v2] " Cui Bixuan
2015-10-29 16:09 ` Cyril Hrubis [this message]
2015-10-31 6:46 ` [LTP] [PATCH v3] " Cui Bixuan
2015-11-02 17:28 ` Cyril Hrubis
2015-11-03 9:22 ` [LTP] [PATCH v4] " Cui Bixuan
2015-11-03 11:29 ` [LTP] [PATCH v5] " Cui Bixuan
2015-11-03 13:21 ` Cyril Hrubis
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=20151029160913.GE23990@rei \
--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