Lines Matching full:time
22 #include <linux/time-internal.h>
48 panic("time-travel: time goes backwards %lld -> %lld\n", in time_travel_set_time()
85 panic("time-travel external link is broken\n"); in time_travel_handle_message()
87 panic("invalid time-travel message - %d bytes\n", ret); in time_travel_handle_message()
91 WARN_ONCE(1, "time-travel: unexpected message %lld\n", in time_travel_handle_message()
97 time_travel_set_time(msg->time); in time_travel_handle_message()
101 time_travel_ext_free_until = msg->time; in time_travel_handle_message()
109 static u64 time_travel_ext_req(u32 op, u64 time) in time_travel_ext_req() argument
115 .time = time, in time_travel_ext_req()
129 * current time (for UM_TIMETRAVEL_GET) and getting another in time_travel_ext_req()
130 * ACK without a time would confuse us a lot! in time_travel_ext_req()
142 panic("time-travel: ACK message has different seqno! op=%d, seq=%d != %d time=%lld\n", in time_travel_ext_req()
143 msg.op, msg.seq, mseq, msg.time); in time_travel_ext_req()
146 time_travel_set_time(msg.time); in time_travel_ext_req()
149 return msg.time; in time_travel_ext_req()
169 static void time_travel_ext_update_request(unsigned long long time) in time_travel_ext_update_request() argument
174 /* asked for exactly this time previously */ in time_travel_ext_update_request()
176 time == time_travel_ext_prev_request) in time_travel_ext_update_request()
184 time < time_travel_ext_free_until) in time_travel_ext_update_request()
187 time_travel_ext_prev_request = time; in time_travel_ext_update_request()
189 time_travel_ext_req(UM_TIMETRAVEL_REQUEST, time); in time_travel_ext_update_request()
205 static bool time_travel_ext_request(unsigned long long time) in time_travel_ext_request() argument
213 time < time_travel_ext_free_until) in time_travel_ext_request()
216 time_travel_ext_update_request(time); in time_travel_ext_request()
269 unsigned long long time) in __time_travel_add_event() argument
279 e->time = time; in __time_travel_add_event()
284 * Add the new entry before one with higher time, in __time_travel_add_event()
290 if ((tmp->time > e->time) || in __time_travel_add_event()
291 (tmp->time == e->time && tmp->onstack && e->onstack)) { in __time_travel_add_event()
302 time_travel_ext_update_request(tmp->time); in __time_travel_add_event()
303 time_travel_next_event = tmp->time; in __time_travel_add_event()
308 unsigned long long time) in time_travel_add_event() argument
313 __time_travel_add_event(e, time); in time_travel_add_event()
410 __time_travel_update_time(e->time, idle); in time_travel_update_time()
415 BUG_ON(time_travel_time != e->time); in time_travel_update_time()
421 panic("On-stack event dequeued outside of the stack! time=%lld, event time=%lld, event=%pS\n", in time_travel_update_time()
422 time_travel_time, e->time, e); in time_travel_update_time()
429 time_travel_ext_update_request(e->time); in time_travel_update_time()
440 * Disable interrupts before calculating the new time so in time_travel_update_time_rel()
442 * a bad time e.g. after we read time_travel_time but in time_travel_update_time_rel()
443 * before we've completed updating the time. in time_travel_update_time_rel()
469 * same time (again) to run the interrupt... in time_travel_add_irq_event()
503 os_timer_one_shot(time_travel_timer_event.time - next); in time_travel_sleep()
539 panic("time-travel: invalid external ID in string '%s'\n", in time_travel_connect_external()
549 panic("time-travel: failed to connect to external socket %s\n", in time_travel_connect_external()
569 /* controller gave us the *current* time, so adjust by that */ in time_travel_set_start()
612 extern u64 time_travel_ext_req(u32 op, u64 time);
615 #define time_travel_add_event(e, time) do { } while (0) argument
626 * In basic time-travel mode we still get real interrupts in timer_handler()
627 * (signals) but since we don't read time from the OS, we in timer_handler()
628 * must update the simulated time here to the expiry when in timer_handler()
735 * stuck in loops that expect time to move more than the in timer_read()
819 timer_clockevent.name = "time-travel-timer-infcpu"; in setup_time_travel()
820 timer_clocksource.name = "time-travel-clock"; in setup_time_travel()
826 timer_clockevent.name = "time-travel-timer-external"; in setup_time_travel()
827 timer_clocksource.name = "time-travel-clock-external"; in setup_time_travel()
833 timer_clockevent.name = "time-travel-timer"; in setup_time_travel()
834 timer_clocksource.name = "time-travel-clock"; in setup_time_travel()
841 __setup("time-travel", setup_time_travel);
843 "time-travel\n"
844 "This option just enables basic time travel mode, in which the clock/timers\n"
846 "waiting for real time to elapse. However, instance CPU speed is limited by\n"
850 "time-travel=inf-cpu\n"
851 "This enables time travel mode with infinite processing power, in which there\n"
857 "time-travel=ext:[ID:]/path/to/socket\n"
858 "This enables time travel mode similar to =inf-cpu, except the system will\n"
860 "have more than one system simultaneously be on simulated time. The virtio\n"
877 __setup("time-travel-start", setup_time_travel_start);
879 "time-travel-start=<seconds>\n"
881 "the host's wall clock at the time of UML boot.\n");