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 SYS_FUNC(sched_setaffinity) 36 { 37 if (entering(tcp)) { 38 tprintf("%ld, %lu, ", tcp->u_arg[0], tcp->u_arg[1]); 39 print_affinitylist(tcp, tcp->u_arg[2], tcp->u_arg[1]); 40 } 41 return 0; 42 } 43 44 SYS_FUNC(sched_getaffinity) 45 { 46 if (entering(tcp)) { 47 tprintf("%ld, %lu, ", tcp->u_arg[0], tcp->u_arg[1]); 48 } else { 49 if (tcp->u_rval == -1) 50 tprintf("%#lx", tcp->u_arg[2]); 51 else 52 print_affinitylist(tcp, tcp->u_arg[2], tcp->u_rval); 53 } 54 return 0; 55 } 56