diff options
Diffstat (limited to 'usr/src/uts/common/sys/timer.h')
| -rw-r--r-- | usr/src/uts/common/sys/timer.h | 37 | 
1 files changed, 32 insertions, 5 deletions
| diff --git a/usr/src/uts/common/sys/timer.h b/usr/src/uts/common/sys/timer.h index ec349c962f..748e0c0627 100644 --- a/usr/src/uts/common/sys/timer.h +++ b/usr/src/uts/common/sys/timer.h @@ -25,7 +25,7 @@   */  /* - * Copyright (c) 2015, Joyent, Inc. All rights reserved. + * Copyright 2016 Joyent, Inc.   */  #ifndef	_SYS_TIMER_H @@ -34,6 +34,9 @@  #include <sys/types.h>  #include <sys/proc.h>  #include <sys/thread.h> +#include <sys/param.h> +#include <sys/siginfo.h> +#include <sys/port.h>  #ifdef	__cplusplus  extern "C" { @@ -42,7 +45,13 @@ extern "C" {  #ifdef	_KERNEL  #define	_TIMER_MAX	32 -extern	int	timer_max;		/* patchable via /etc/system */ +/* + * Max timers per process.  This is patchable via /etc/system and can be + * updated via kmdb.  Sticking to positive powers of 2 is recommended. + */ +extern	int	timer_max; + +#define	_TIMER_ALLOC_INIT	8	/* initial size for p_itimer array */  /*   * Bit values for the it_lock field. @@ -56,6 +65,7 @@ extern	int	timer_max;		/* patchable via /etc/system */   */  #define	IT_SIGNAL		0x01  #define	IT_PORT			0x02	/* use event port notification */ +#define	IT_CALLBACK		0x04	/* custom callback function */  struct clock_backend; @@ -83,14 +93,27 @@ struct itimer {  	struct clock_backend *it_backend;  	void		(*it_fire)(itimer_t *);  	kmutex_t	it_mutex; -	void		*it_portev;	/* port_kevent_t pointer */ -	void		*it_portsrc;	/* port_source_t pointer */ -	int		it_portfd;	/* port file descriptor */ +	union { +		struct { +			void	*_it_portev;	/* port_kevent_t pointer */ +			void	*_it_portsrc;	/* port_source_t pointer */ +			int	_it_portfd;	/* port file descriptor */ +		} _it_ev_port; +		struct { +			void		(*_it_cb_func)(itimer_t *); +			uintptr_t	_it_cb_data[2]; +		} _it_ev_cb; +	} _it_ev_data;  };  #define	it_sigq		__data.__proc.__it_sigq  #define	it_lwp		__data.__proc.__it_lwp  #define	it_frontend	__data.__it_frontend +#define	it_portev	_it_ev_data._it_ev_port._it_portev +#define	it_portsrc	_it_ev_data._it_ev_port._it_portsrc +#define	it_portfd	_it_ev_data._it_ev_port._it_portfd +#define	it_cb_func	_it_ev_data._it_ev_cb._it_cb_func +#define	it_cb_data	_it_ev_data._it_ev_cb._it_cb_data  typedef struct clock_backend {  	struct sigevent clk_default; @@ -107,7 +130,11 @@ typedef struct clock_backend {  extern void clock_add_backend(clockid_t clock, clock_backend_t *backend);  extern clock_backend_t *clock_get_backend(clockid_t clock); +extern void timer_release(struct proc *, itimer_t *); +extern void timer_delete_grabbed(struct proc *, timer_t tid, itimer_t *it);  extern void timer_lwpbind(); +extern int timer_setup(clock_backend_t *, struct sigevent *, port_notify_t *, +    itimer_t **, timer_t *);  extern	void	timer_func(sigqueue_t *);  extern	void	timer_exit(void); | 
