um: Implement time-travel=ext
This implements synchronized time-travel mode which - using a special application on a unix socket - lets multiple machines take part in a time-travelling simulation together. The protocol for the unix domain socket is defined in the new file include/uapi/linux/um_timetravel.h. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:

committed by
Richard Weinberger

parent
dd9ada5627
commit
88ce642492
@@ -15,6 +15,7 @@ enum time_travel_mode {
|
||||
TT_MODE_OFF,
|
||||
TT_MODE_BASIC,
|
||||
TT_MODE_INFCPU,
|
||||
TT_MODE_EXTERNAL,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_UML_TIME_TRAVEL_SUPPORT
|
||||
@@ -35,6 +36,24 @@ time_travel_set_event_fn(struct time_travel_event *e,
|
||||
{
|
||||
e->fn = fn;
|
||||
}
|
||||
|
||||
void __time_travel_propagate_time(void);
|
||||
|
||||
static inline void time_travel_propagate_time(void)
|
||||
{
|
||||
if (time_travel_mode == TT_MODE_EXTERNAL)
|
||||
__time_travel_propagate_time();
|
||||
}
|
||||
|
||||
void __time_travel_wait_readable(int fd);
|
||||
|
||||
static inline void time_travel_wait_readable(int fd)
|
||||
{
|
||||
if (time_travel_mode == TT_MODE_EXTERNAL)
|
||||
__time_travel_wait_readable(fd);
|
||||
}
|
||||
|
||||
void time_travel_add_irq_event(struct time_travel_event *e);
|
||||
#else
|
||||
struct time_travel_event {
|
||||
};
|
||||
@@ -47,5 +66,13 @@ static inline void time_travel_sleep(unsigned long long duration)
|
||||
|
||||
/* this is a macro so the event/function need not exist */
|
||||
#define time_travel_set_event_fn(e, fn) do {} while (0)
|
||||
|
||||
static inline void time_travel_propagate_time(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void time_travel_wait_readable(int fd)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_UML_TIME_TRAVEL_SUPPORT */
|
||||
#endif /* __TIMER_INTERNAL_H__ */
|
||||
|
@@ -181,6 +181,7 @@ extern int os_falloc_punch(int fd, unsigned long long offset, int count);
|
||||
extern int os_eventfd(unsigned int initval, int flags);
|
||||
extern int os_sendmsg_fds(int fd, const void *buf, unsigned int len,
|
||||
const int *fds, unsigned int fds_num);
|
||||
int os_poll(unsigned int n, const int *fds);
|
||||
|
||||
/* start_up.c */
|
||||
extern void os_early_checks(void);
|
||||
|
Reference in New Issue
Block a user