1f08c3bdfSopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 2f08c3bdfSopenharmony_ci/* 3f08c3bdfSopenharmony_ci * Copyright (c) 2021, BELLSOFT. All rights reserved. 4f08c3bdfSopenharmony_ci * Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved. 5f08c3bdfSopenharmony_ci * AUTHOR: Saji Kumar.V.R <saji.kumar@wipro.com> 6f08c3bdfSopenharmony_ci */ 7f08c3bdfSopenharmony_ci 8f08c3bdfSopenharmony_ci/*\ 9f08c3bdfSopenharmony_ci * [Description] 10f08c3bdfSopenharmony_ci * 11f08c3bdfSopenharmony_ci * Checks functionality for sched_setparam(2) 12f08c3bdfSopenharmony_ci * 13f08c3bdfSopenharmony_ci * This test changes the scheduling priority for current process 14f08c3bdfSopenharmony_ci * and verifies it by calling sched_getparam(). 15f08c3bdfSopenharmony_ci */ 16f08c3bdfSopenharmony_ci 17f08c3bdfSopenharmony_ci#include "tst_test.h" 18f08c3bdfSopenharmony_ci#include "tst_sched.h" 19f08c3bdfSopenharmony_ci 20f08c3bdfSopenharmony_ci#define FIFO_OR_RR_PRIO 5 21f08c3bdfSopenharmony_ci#define OTHER_PRIO 0 22f08c3bdfSopenharmony_ci 23f08c3bdfSopenharmony_cistatic struct test_cases_t { 24f08c3bdfSopenharmony_ci char *desc; 25f08c3bdfSopenharmony_ci int policy; 26f08c3bdfSopenharmony_ci int priority; 27f08c3bdfSopenharmony_ci int param; 28f08c3bdfSopenharmony_ci} tcases[] = { 29f08c3bdfSopenharmony_ci { 30f08c3bdfSopenharmony_ci "Test with policy SCHED_FIFO", SCHED_FIFO, FIFO_OR_RR_PRIO, 1}, { 31f08c3bdfSopenharmony_ci "Test with policy SCHED_RR", SCHED_RR, FIFO_OR_RR_PRIO, 1}, { 32f08c3bdfSopenharmony_ci "Test with SCHED_OTHER", SCHED_OTHER, OTHER_PRIO, 0} 33f08c3bdfSopenharmony_ci}; 34f08c3bdfSopenharmony_ci 35f08c3bdfSopenharmony_cistatic void run(unsigned int n) 36f08c3bdfSopenharmony_ci{ 37f08c3bdfSopenharmony_ci struct test_cases_t *tc = &tcases[n]; 38f08c3bdfSopenharmony_ci struct sched_variant *tv = &sched_variants[tst_variant]; 39f08c3bdfSopenharmony_ci struct sched_param p = { .sched_priority = tc->param }; 40f08c3bdfSopenharmony_ci 41f08c3bdfSopenharmony_ci TST_EXP_PASS_SILENT(tv->sched_setscheduler(0, tc->policy, &p)); 42f08c3bdfSopenharmony_ci 43f08c3bdfSopenharmony_ci p.sched_priority = tc->priority; 44f08c3bdfSopenharmony_ci TST_EXP_PASS_SILENT(tv->sched_setparam(0, &p)); 45f08c3bdfSopenharmony_ci 46f08c3bdfSopenharmony_ci p.sched_priority = -1; 47f08c3bdfSopenharmony_ci TST_EXP_PASS_SILENT(tv->sched_getparam(0, &p)); 48f08c3bdfSopenharmony_ci 49f08c3bdfSopenharmony_ci if (p.sched_priority == tc->priority) { 50f08c3bdfSopenharmony_ci tst_res(TPASS, "got expected priority %d", p.sched_priority); 51f08c3bdfSopenharmony_ci } else { 52f08c3bdfSopenharmony_ci tst_res(TFAIL, "unexpected priority value %d, expected %d", 53f08c3bdfSopenharmony_ci p.sched_priority, tc->priority); 54f08c3bdfSopenharmony_ci } 55f08c3bdfSopenharmony_ci} 56f08c3bdfSopenharmony_ci 57f08c3bdfSopenharmony_cistatic void setup(void) 58f08c3bdfSopenharmony_ci{ 59f08c3bdfSopenharmony_ci tst_res(TINFO, "Testing %s variant", sched_variants[tst_variant].desc); 60f08c3bdfSopenharmony_ci} 61f08c3bdfSopenharmony_ci 62f08c3bdfSopenharmony_cistatic struct tst_test test = { 63f08c3bdfSopenharmony_ci .needs_root = 1, 64f08c3bdfSopenharmony_ci .setup = setup, 65f08c3bdfSopenharmony_ci .test = run, 66f08c3bdfSopenharmony_ci .test_variants = ARRAY_SIZE(sched_variants), 67f08c3bdfSopenharmony_ci .tcnt = ARRAY_SIZE(tcases), 68f08c3bdfSopenharmony_ci}; 69