(root)/
strace-6.5/
tests-mx32/
sched_xetscheduler.c
       1  /*
       2   * Check decoding of sched_getscheduler and sched_setscheduler syscalls.
       3   *
       4   * Copyright (c) 2016-2021 The strace developers.
       5   * All rights reserved.
       6   *
       7   * SPDX-License-Identifier: GPL-2.0-or-later
       8   */
       9  
      10  #include "tests.h"
      11  #include "scno.h"
      12  #include "pidns.h"
      13  
      14  #include <sched.h>
      15  #include <stdio.h>
      16  #include <unistd.h>
      17  
      18  int
      19  main(void)
      20  {
      21  	PIDNS_TEST_INIT;
      22  
      23  	TAIL_ALLOC_OBJECT_CONST_PTR(struct sched_param, param);
      24  	const int pid = getpid();
      25  	const char *pid_str = pidns_pid2str(PT_TGID);
      26  
      27  	long rc = syscall(__NR_sched_getscheduler, pid);
      28  	const char *scheduler;
      29  	switch (rc) {
      30  		case SCHED_FIFO:
      31  			scheduler = "SCHED_FIFO";
      32  			break;
      33  		case SCHED_RR:
      34  			scheduler = "SCHED_RR";
      35  			break;
      36  #ifdef SCHED_BATCH
      37  		case SCHED_BATCH:
      38  			scheduler = "SCHED_BATCH";
      39  			break;
      40  #endif
      41  #ifdef SCHED_IDLE
      42  		case SCHED_IDLE:
      43  			scheduler = "SCHED_IDLE";
      44  			break;
      45  #endif
      46  #ifdef SCHED_ISO
      47  		case SCHED_ISO:
      48  			scheduler = "SCHED_ISO";
      49  			break;
      50  #endif
      51  #ifdef SCHED_DEADLINE
      52  		case SCHED_DEADLINE:
      53  			scheduler = "SCHED_DEADLINE";
      54  			break;
      55  #endif
      56  		default:
      57  			scheduler = "SCHED_OTHER";
      58  	}
      59  	pidns_print_leader();
      60  	printf("sched_getscheduler(%d%s) = %ld (%s)\n",
      61  	       pid, pid_str, rc, scheduler);
      62  
      63  	rc = syscall(__NR_sched_getscheduler, -1);
      64  	pidns_print_leader();
      65  	printf("sched_getscheduler(-1) = %s\n", sprintrc(rc));
      66  
      67  	param->sched_priority = -1;
      68  
      69  	rc = syscall(__NR_sched_setscheduler, pid, SCHED_FIFO, NULL);
      70  	pidns_print_leader();
      71  	printf("sched_setscheduler(%d%s, SCHED_FIFO, NULL) = %s\n",
      72  	       pid, pid_str, sprintrc(rc));
      73  
      74  	rc = syscall(__NR_sched_setscheduler, pid, SCHED_FIFO, param + 1);
      75  	pidns_print_leader();
      76  	printf("sched_setscheduler(%d%s, SCHED_FIFO, %p) = %s\n",
      77  	       pid, pid_str, param + 1, sprintrc(rc));
      78  
      79  	rc = syscall(__NR_sched_setscheduler, pid, 0xfaceda7a, param);
      80  	pidns_print_leader();
      81  	printf("sched_setscheduler(%d%s, %#x /* SCHED_??? */, [%d]) = %s\n",
      82  	       pid, pid_str, 0xfaceda7a,
      83  	       param->sched_priority, sprintrc(rc));
      84  
      85  	rc = syscall(__NR_sched_setscheduler, -1, SCHED_FIFO, param);
      86  	pidns_print_leader();
      87  	printf("sched_setscheduler(-1, SCHED_FIFO, [%d]) = %s\n",
      88  	       param->sched_priority, sprintrc(rc));
      89  
      90  	rc = syscall(__NR_sched_setscheduler, pid, SCHED_FIFO, param);
      91  	pidns_print_leader();
      92  	printf("sched_setscheduler(%d%s, SCHED_FIFO, [%d]) = %s\n",
      93  	       pid, pid_str, param->sched_priority, sprintrc(rc));
      94  
      95  	pidns_print_leader();
      96  	puts("+++ exited with 0 +++");
      97  	return 0;
      98  }