static void show_hostrt_diagnostics(void) { if (!xnvdso_test_feature(cobalt_vdso, XNVDSO_FEAT_HOST_REALTIME)) { printf("XNVDSO_FEAT_HOST_REALTIME not available\n"); return; } if (cobalt_vdso->hostrt_data.live) printf("hostrt data area is live\n"); else { printf("hostrt data area is not live\n"); return; } printf("sequence counter : %u\n", cobalt_vdso->hostrt_data.lock.sequence); printf("wall_time_sec : %lld\n", (unsigned long long)cobalt_vdso->hostrt_data.wall_sec); printf("wall_time_nsec : %u\n", cobalt_vdso->hostrt_data.wall_nsec); printf("wall_to_monotonic_sec : %lld\n", (unsigned long long)cobalt_vdso->hostrt_data.wtom_sec); printf("wall_to_monotonic_nsec : %u\n", cobalt_vdso->hostrt_data.wtom_nsec); printf("cycle_last : %Lu\n", (long long)cobalt_vdso->hostrt_data.cycle_last); printf("mask : 0x%Lx\n", (long long)cobalt_vdso->hostrt_data.mask); printf("mult : %u\n", cobalt_vdso->hostrt_data.mult); printf("shift : %u\n\n", cobalt_vdso->hostrt_data.shift); }
static void show_hostrt_diagnostics(void) { if (!xnvdso_test_feature(vdso, XNVDSO_FEAT_HOST_REALTIME)) { printf("XNVDSO_FEAT_HOST_REALTIME not available\n"); return; } if (vdso->hostrt_data.live) printf("hostrt data area is live\n"); else { printf("hostrt data area is not live\n"); return; } printf("Sequence counter : %u\n", vdso->hostrt_data.lock.sequence); printf("wall_time_sec : %ld\n", vdso->hostrt_data.wall_time_sec); printf("wall_time_nsec : %u\n", vdso->hostrt_data.wall_time_nsec); printf("wall_to_monotonic\n"); printf(" tv_sec : %jd\n", (intmax_t)vdso->hostrt_data.wall_to_monotonic.tv_sec); printf(" tv_nsec : %ld\n", vdso->hostrt_data.wall_to_monotonic.tv_nsec); printf("cycle_last : %Lu\n", vdso->hostrt_data.cycle_last); printf("mask : 0x%Lx\n", vdso->hostrt_data.mask); printf("mult : %u\n", vdso->hostrt_data.mult); printf("shift : %u\n\n", vdso->hostrt_data.shift); }
static void show_realtime_offset(void) { if (!xnvdso_test_feature(cobalt_vdso, XNVDSO_FEAT_HOST_REALTIME)) { printf("XNVDSO_FEAT_WALLCLOCK_OFFSET not available\n"); return; } printf("Wallclock offset : %llu\n", (long long)cobalt_vdso->wallclock_offset); }
static void cleanup_current_mode(void *key) { unsigned long *mode = key; *mode = -1; if (xnvdso_test_feature(XNVDSO_FEAT_DROP_U_MODE)) { XENOMAI_SYSCALL0(__xn_sys_drop_u_mode); free_current_mode(mode); } }
int main(int argc, char **argv) { int res; struct timespec ts1, ts2; mlockall(MCL_CURRENT|MCL_FUTURE); if (!xeno_sem_heap[1]) { fprintf(stderr, "Could not determine position of the " "global semaphore heap\n"); return 1; } if (!xnvdso_test_feature(XNVDSO_FEAT_HOST_REALTIME)) { printf("XNVDSO_FEAT_HOST_REALTIME not available\n"); return 1; } if (nkvdso->hostrt_data.live) printf("hostrt data area is live\n"); else { printf("hostrt data area is not live\n"); return 2; } printf("Sequence counter : %u\n", nkvdso->hostrt_data.seqcount.sequence); printf("wall_time_sec : %ld\n", nkvdso->hostrt_data.wall_time_sec); printf("wall_time_nsec : %u\n", nkvdso->hostrt_data.wall_time_nsec); printf("wall_to_monotonic\n"); printf(" tv_sec : %jd\n", (intmax_t)nkvdso->hostrt_data.wall_to_monotonic.tv_sec); printf(" tv_nsec : %ld\n", nkvdso->hostrt_data.wall_to_monotonic.tv_nsec); printf("cycle_last : %lu\n", nkvdso->hostrt_data.cycle_last); printf("mask : 0x%lx\n", nkvdso->hostrt_data.mask); printf("mult : %u\n", nkvdso->hostrt_data.mult); printf("shift : %u\n\n", nkvdso->hostrt_data.shift); res = clock_gettime(CLOCK_REALTIME, &ts1); if (res) printf("clock_gettime(CLOCK_REALTIME) failed!\n"); signal(SIGXCPU, count_modeswitches); rt_task_set_mode(0, T_WARNSW, NULL); modeswitches = 0; res = clock_gettime(CLOCK_HOST_REALTIME, &ts2); if (res) printf("clock_gettime(CLOCK_HOST_REALTIME) failed!\n"); if (modeswitches == 1) { printf("CLOCK_HOST_REALTIME caused a mode switch.\n"); return 3; } rt_task_set_mode(T_CONFORMING, 0, NULL); printf("CLOCK_REALTIME : tv_sec = %jd, tv_nsec = %llu\n", ts1.tv_sec, ts1.tv_nsec); printf("CLOCK_HOST_REALTIME: tv_sec = %jd, tv_nsec = %llu\n", ts2.tv_sec, ts2.tv_nsec); return 0; }