sched.c revision 38a34c9349267c99ce1ddbd0b6e985147415d355
138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin/* 238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2004 Ulrich Drepper <drepper@redhat.com> 338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2005 Roland McGrath <roland@redhat.com> 438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2012-2015 Dmitry V. Levin <ldv@altlinux.org> 538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * All rights reserved. 638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Redistribution and use in source and binary forms, with or without 838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * modification, are permitted provided that the following conditions 938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * are met: 1038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 1. Redistributions of source code must retain the above copyright 1138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * notice, this list of conditions and the following disclaimer. 1238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 2. Redistributions in binary form must reproduce the above copyright 1338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * notice, this list of conditions and the following disclaimer in the 1438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * documentation and/or other materials provided with the distribution. 1538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 3. The name of the author may not be used to endorse or promote products 1638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * derived from this software without specific prior written permission. 1738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 1838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin */ 2938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin 30fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin#include "defs.h" 31fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin 32fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin#include <sched.h> 33fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin 34fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin#include "xlat/schedulers.h" 353456bcca6732829c00b66745743325fc6162322fDmitry V. Levin#include "xlat/sched_flags.h" 36fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin 37a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sched_getscheduler) 38fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin{ 39fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin if (entering(tcp)) { 40fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin tprintf("%d", (int) tcp->u_arg[0]); 41fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin } else if (!syserror(tcp)) { 42fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin tcp->auxstr = xlookup(schedulers, tcp->u_rval); 43fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin if (tcp->auxstr != NULL) 44fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin return RVAL_STR; 45fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin } 46fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin return 0; 47fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin} 48fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin 49a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sched_setscheduler) 50fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin{ 5110c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin tprintf("%d, ", (int) tcp->u_arg[0]); 5210c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin printxval(schedulers, tcp->u_arg[1], "SCHED_???"); 5310c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin tprints(", "); 5410c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin printnum_int(tcp, tcp->u_arg[2], "%d"); 5510c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin 5610c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin return RVAL_DECODED; 57fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin} 58fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin 59a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sched_getparam) 60fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin{ 61f8bf1d56330288b2a5f4e54763062a45f0f26f58Dmitry V. Levin if (entering(tcp)) 62fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin tprintf("%d, ", (int) tcp->u_arg[0]); 63f8bf1d56330288b2a5f4e54763062a45f0f26f58Dmitry V. Levin else 64f8bf1d56330288b2a5f4e54763062a45f0f26f58Dmitry V. Levin printnum_int(tcp, tcp->u_arg[1], "%d"); 65fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin return 0; 66fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin} 67fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin 68a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sched_setparam) 69fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin{ 7010c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin tprintf("%d, ", (int) tcp->u_arg[0]); 7110c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin printnum_int(tcp, tcp->u_arg[1], "%d"); 7210c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin 7310c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin return RVAL_DECODED; 74fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin} 75fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin 76a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sched_get_priority_min) 77fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin{ 7810c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin printxval(schedulers, tcp->u_arg[0], "SCHED_???"); 7910c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin 8010c408aceaa63c4d0be454d0262a68f1f6fde467Dmitry V. Levin return RVAL_DECODED; 81fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin} 82fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin 83a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sched_rr_get_interval) 84fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin{ 85fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin if (entering(tcp)) { 86f8bf1d56330288b2a5f4e54763062a45f0f26f58Dmitry V. Levin tprintf("%d, ", (int) tcp->u_arg[0]); 87fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin } else { 88fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin if (syserror(tcp)) 89f8bf1d56330288b2a5f4e54763062a45f0f26f58Dmitry V. Levin printaddr(tcp->u_arg[1]); 90fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin else 91fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin print_timespec(tcp, tcp->u_arg[1]); 92fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin } 93fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin return 0; 94fff2f319f97c7555eef4a6de350c6353283634e0Dmitry V. Levin} 953456bcca6732829c00b66745743325fc6162322fDmitry V. Levin 963456bcca6732829c00b66745743325fc6162322fDmitry V. Levinstatic void 973456bcca6732829c00b66745743325fc6162322fDmitry V. Levinprint_sched_attr(struct tcb *tcp, const long addr, unsigned int size) 983456bcca6732829c00b66745743325fc6162322fDmitry V. Levin{ 993456bcca6732829c00b66745743325fc6162322fDmitry V. Levin struct { 1003456bcca6732829c00b66745743325fc6162322fDmitry V. Levin uint32_t size; 1013456bcca6732829c00b66745743325fc6162322fDmitry V. Levin uint32_t sched_policy; 1023456bcca6732829c00b66745743325fc6162322fDmitry V. Levin uint64_t sched_flags; 1033456bcca6732829c00b66745743325fc6162322fDmitry V. Levin uint32_t sched_nice; 1043456bcca6732829c00b66745743325fc6162322fDmitry V. Levin uint32_t sched_priority; 1053456bcca6732829c00b66745743325fc6162322fDmitry V. Levin uint64_t sched_runtime; 1063456bcca6732829c00b66745743325fc6162322fDmitry V. Levin uint64_t sched_deadline; 1073456bcca6732829c00b66745743325fc6162322fDmitry V. Levin uint64_t sched_period; 1083456bcca6732829c00b66745743325fc6162322fDmitry V. Levin } attr = {}; 1093456bcca6732829c00b66745743325fc6162322fDmitry V. Levin 1103456bcca6732829c00b66745743325fc6162322fDmitry V. Levin if (size > sizeof(attr)) 1113456bcca6732829c00b66745743325fc6162322fDmitry V. Levin size = sizeof(attr); 1123456bcca6732829c00b66745743325fc6162322fDmitry V. Levin if (umoven_or_printaddr(tcp, addr, size, &attr)) 1133456bcca6732829c00b66745743325fc6162322fDmitry V. Levin return; 1143456bcca6732829c00b66745743325fc6162322fDmitry V. Levin 1153456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprintf("{size=%u, sched_policy=", attr.size); 1163456bcca6732829c00b66745743325fc6162322fDmitry V. Levin printxval(schedulers, attr.sched_policy, "SCHED_???"); 1173456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprints(", sched_flags="); 1183456bcca6732829c00b66745743325fc6162322fDmitry V. Levin printflags(sched_flags, attr.sched_flags, "SCHED_FLAG_???"); 1193456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprintf(", sched_nice=%d", attr.sched_nice); 1203456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprintf(", sched_priority=%u", attr.sched_priority); 1213456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprintf(", sched_runtime=%" PRIu64, attr.sched_runtime); 1223456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprintf(", sched_deadline=%" PRIu64, attr.sched_deadline); 1233456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprintf(", sched_period=%" PRIu64 "}", attr.sched_period); 1243456bcca6732829c00b66745743325fc6162322fDmitry V. Levin} 1253456bcca6732829c00b66745743325fc6162322fDmitry V. Levin 1263456bcca6732829c00b66745743325fc6162322fDmitry V. LevinSYS_FUNC(sched_setattr) 1273456bcca6732829c00b66745743325fc6162322fDmitry V. Levin{ 1283456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprintf("%d, ", (int) tcp->u_arg[0]); 1293456bcca6732829c00b66745743325fc6162322fDmitry V. Levin print_sched_attr(tcp, tcp->u_arg[1], 0x100); 1303456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprintf(", %u", (unsigned int) tcp->u_arg[2]); 1313456bcca6732829c00b66745743325fc6162322fDmitry V. Levin 1323456bcca6732829c00b66745743325fc6162322fDmitry V. Levin return RVAL_DECODED; 1333456bcca6732829c00b66745743325fc6162322fDmitry V. Levin} 1343456bcca6732829c00b66745743325fc6162322fDmitry V. Levin 1353456bcca6732829c00b66745743325fc6162322fDmitry V. LevinSYS_FUNC(sched_getattr) 1363456bcca6732829c00b66745743325fc6162322fDmitry V. Levin{ 1373456bcca6732829c00b66745743325fc6162322fDmitry V. Levin if (entering(tcp)) { 1383456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprintf("%d, ", (int) tcp->u_arg[0]); 1393456bcca6732829c00b66745743325fc6162322fDmitry V. Levin } else { 1403456bcca6732829c00b66745743325fc6162322fDmitry V. Levin print_sched_attr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 1413456bcca6732829c00b66745743325fc6162322fDmitry V. Levin tprintf(", %u, %u", 1423456bcca6732829c00b66745743325fc6162322fDmitry V. Levin (unsigned int) tcp->u_arg[2], 1433456bcca6732829c00b66745743325fc6162322fDmitry V. Levin (unsigned int) tcp->u_arg[3]); 1443456bcca6732829c00b66745743325fc6162322fDmitry V. Levin } 1453456bcca6732829c00b66745743325fc6162322fDmitry V. Levin 1463456bcca6732829c00b66745743325fc6162322fDmitry V. Levin return 0; 1473456bcca6732829c00b66745743325fc6162322fDmitry V. Levin} 148