=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/systat/cpu.c,v retrieving revision 1.6 retrieving revision 1.7 diff -c -r1.6 -r1.7 *** src/usr.bin/systat/cpu.c 2018/05/14 12:31:21 1.6 --- src/usr.bin/systat/cpu.c 2018/09/26 17:23:13 1.7 *************** *** 1,4 **** ! /* $OpenBSD: cpu.c,v 1.6 2018/05/14 12:31:21 mpi Exp $ */ /* * Copyright (c) 2013 Reyk Floeter --- 1,4 ---- ! /* $OpenBSD: cpu.c,v 1.7 2018/09/26 17:23:13 cheloha Exp $ */ /* * Copyright (c) 2013 Reyk Floeter *************** *** 50,55 **** --- 50,56 ---- #include #include + #include #include #include #include *************** *** 99,104 **** --- 100,106 ---- }; int cpu_count; + int *cpu_online; int64_t *cpu_states; int64_t **cpu_tm; int64_t **cpu_old; *************** *** 156,163 **** for (i = 0; i < cpu_count; i++) { cpu_time_mib[2] = i; tmpstate = cpu_states + (CPUSTATES * i); ! if (sysctl(cpu_time_mib, 3, cpu_tm[i], &size, NULL, 0) < 0) ! error("sysctl KERN_CPTIME2"); percentages(CPUSTATES, tmpstate, cpu_tm[i], cpu_old[i], cpu_diff[i]); } --- 158,170 ---- for (i = 0; i < cpu_count; i++) { cpu_time_mib[2] = i; tmpstate = cpu_states + (CPUSTATES * i); ! if (sysctl(cpu_time_mib, 3, cpu_tm[i], &size, NULL, 0) < 0) { ! if (errno != ENODEV) ! error("sysctl KERN_CPTIME2"); ! cpu_online[i] = 0; ! continue; ! } ! cpu_online[i] = 1; percentages(CPUSTATES, tmpstate, cpu_tm[i], cpu_old[i], cpu_diff[i]); } *************** *** 200,205 **** --- 207,214 ---- mib[1] = HW_NCPU; if (sysctl(mib, 2, &cpu_count, &size, NULL, 0) == -1) return (-1); + if ((cpu_online = calloc(cpu_count, sizeof(*cpu_online))) == NULL) + return (-1); if ((cpu_states = calloc(cpu_count, CPUSTATES * sizeof(int64_t))) == NULL) return (-1); *************** *** 246,251 **** --- 255,275 ---- return; \ } while (0) + #define ADD_OFFLINE_CPU(v) do { \ + if (cur >= dispstart && cur < end) { \ + print_fld_size(FLD_CPU_CPU, (v)); \ + print_fld_str(FLD_CPU_USR, "-"); \ + print_fld_str(FLD_CPU_NIC, "-"); \ + print_fld_str(FLD_CPU_SYS, "-"); \ + print_fld_str(FLD_CPU_SPIN, "-"); \ + print_fld_str(FLD_CPU_INT, "-"); \ + print_fld_str(FLD_CPU_IDLE, "-"); \ + end_line(); \ + } \ + if (++cur >= end) \ + return; \ + } while (0) + void print_cpu(void) { *************** *** 258,263 **** --- 282,291 ---- end = num_disp; for (c = 0; c < cpu_count; c++) { + if (!cpu_online[c]) { + ADD_OFFLINE_CPU(c); + continue; + } states = cpu_states + (CPUSTATES * c); for (i = 0; i < CPUSTATES; i++)