diff options
author | John Levon <john.levon@joyent.com> | 2020-05-26 13:57:13 +0000 |
---|---|---|
committer | John Levon <john.levon@joyent.com> | 2020-05-26 13:57:13 +0000 |
commit | 5b2acc0949194447bba6e45a0fa44d0b5f42f208 (patch) | |
tree | 7ea9eb87bc68fee386dd39035ce715e87a0e673c /usr/src/compat/freebsd/sys/callout.h | |
parent | 8ca018083101bf1cb175869679bc123187fb1bab (diff) | |
parent | 2a1277d3064386cd5c4e372301007aa330bf1d5e (diff) | |
download | illumos-joyent-gcc9.tar.gz |
mergegcc9
Diffstat (limited to 'usr/src/compat/freebsd/sys/callout.h')
-rw-r--r-- | usr/src/compat/freebsd/sys/callout.h | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/usr/src/compat/freebsd/sys/callout.h b/usr/src/compat/freebsd/sys/callout.h index 6087a09f54..11823e6321 100644 --- a/usr/src/compat/freebsd/sys/callout.h +++ b/usr/src/compat/freebsd/sys/callout.h @@ -12,6 +12,7 @@ /* * Copyright 2014 Pluribus Networks Inc. * Copyright 2018 Joyent, Inc. + * Copyright 2020 Oxide Computer Company */ #ifndef _COMPAT_FREEBSD_SYS_CALLOUT_H_ @@ -21,20 +22,27 @@ struct callout { cyclic_id_t c_cyc_id; - int c_flags; + hrtime_t c_target; + hrtime_t c_fired; void (*c_func)(void *); void *c_arg; - }; -#define CALLOUT_ACTIVE 0x0002 /* callout is currently active */ -#define CALLOUT_PENDING 0x0004 /* callout is waiting for timeout */ - #define C_ABSOLUTE 0x0200 /* event time is absolute. */ -#define callout_active(c) ((c)->c_flags & CALLOUT_ACTIVE) -#define callout_deactivate(c) ((c)->c_flags &= ~CALLOUT_ACTIVE) -#define callout_pending(c) ((c)->c_flags & CALLOUT_PENDING) +/* Callout considered active if t_target has not been zeroed */ +#define callout_active(c) ((c)->c_target != 0) +#define callout_deactivate(c) ((c)->c_target = 0) + +/* + * If a callout is rescheduled (into the future) while its handler is running, + * it will be able to detect the pending invocation by the target time being + * greater than the time at which the handler was fired. + * + * This is only valid when checked from the callout handler, which is the only + * place where it is used by bhyve today. + */ +#define callout_pending(c) ((c)->c_target > (c)->c_fired) void vmm_glue_callout_init(struct callout *c, int mpsafe); int vmm_glue_callout_reset_sbt(struct callout *c, sbintime_t sbt, |