Dmitry V. Levin | b94b983 | 2014-12-11 19:25:02 +0000 | [diff] [blame] | 1 | #include "defs.h" |
| 2 | |
| 3 | static void |
| 4 | print_affinitylist(struct tcb *tcp, long list, unsigned int len) |
| 5 | { |
| 6 | int first = 1; |
| 7 | unsigned long w, min_len; |
| 8 | |
| 9 | if (abbrev(tcp) && len / sizeof(w) > max_strlen) |
| 10 | min_len = len - max_strlen * sizeof(w); |
| 11 | else |
| 12 | min_len = 0; |
| 13 | for (; len >= sizeof(w) && len > min_len; |
| 14 | len -= sizeof(w), list += sizeof(w)) { |
| 15 | if (umove(tcp, list, &w) < 0) |
| 16 | break; |
| 17 | if (first) |
| 18 | tprints("{"); |
| 19 | else |
| 20 | tprints(", "); |
| 21 | first = 0; |
| 22 | tprintf("%lx", w); |
| 23 | } |
| 24 | if (len) { |
| 25 | if (first) |
| 26 | tprintf("%#lx", list); |
| 27 | else |
| 28 | tprintf(", %s}", (len >= sizeof(w) && len > min_len ? |
| 29 | "???" : "...")); |
| 30 | } else { |
| 31 | tprints(first ? "{}" : "}"); |
| 32 | } |
| 33 | } |
| 34 | |
| 35 | int |
| 36 | sys_sched_setaffinity(struct tcb *tcp) |
| 37 | { |
| 38 | if (entering(tcp)) { |
| 39 | tprintf("%ld, %lu, ", tcp->u_arg[0], tcp->u_arg[1]); |
| 40 | print_affinitylist(tcp, tcp->u_arg[2], tcp->u_arg[1]); |
| 41 | } |
| 42 | return 0; |
| 43 | } |
| 44 | |
| 45 | int |
| 46 | sys_sched_getaffinity(struct tcb *tcp) |
| 47 | { |
| 48 | if (entering(tcp)) { |
| 49 | tprintf("%ld, %lu, ", tcp->u_arg[0], tcp->u_arg[1]); |
| 50 | } else { |
| 51 | if (tcp->u_rval == -1) |
| 52 | tprintf("%#lx", tcp->u_arg[2]); |
| 53 | else |
| 54 | print_affinitylist(tcp, tcp->u_arg[2], tcp->u_rval); |
| 55 | } |
| 56 | return 0; |
| 57 | } |