diff options
author | kib <kib@FreeBSD.org> | 2012-06-23 09:33:06 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2012-06-23 09:33:06 +0000 |
commit | 497817697cfb819824b7ae8619a5094ace1b3698 (patch) | |
tree | e776dfcefe80b16e0aa0a27d0fdb364391c6c4b8 /sys/sys/vdso.h | |
parent | e19c8fe0ffaebe2cb325b0d14102166d51b7429d (diff) | |
download | FreeBSD-src-497817697cfb819824b7ae8619a5094ace1b3698.zip FreeBSD-src-497817697cfb819824b7ae8619a5094ace1b3698.tar.gz |
Stop updating the struct vdso_timehands from even handler executed in
the scheduled task from tc_windup(). Do it directly from tc_windup in
interrupt context [1].
Establish the permanent mapping of the shared page into the kernel
address space, avoiding the potential need to sleep waiting for
allocation of sf buffer during vdso_timehands update. As a
consequence, shared_page_write_start() and shared_page_write_end()
functions are not needed anymore.
Guess and memorize the pointers to native host and compat32 sysentvec
during initialization, to avoid the need to get shared_page_alloc_sx
lock during the update.
In tc_fill_vdso_timehands(), do not loop waiting for timehands
generation to stabilize, since vdso_timehands is written in the same
interrupt context which wrote timehands.
Requested by: mav [1]
MFC after: 29 days
Diffstat (limited to 'sys/sys/vdso.h')
-rw-r--r-- | sys/sys/vdso.h | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/sys/sys/vdso.h b/sys/sys/vdso.h index 9f3f3af..653a606 100644 --- a/sys/sys/vdso.h +++ b/sys/sys/vdso.h @@ -29,7 +29,6 @@ #define _SYS_VDSO_H #include <sys/types.h> -#include <sys/eventhandler.h> #include <machine/vdso.h> struct vdso_timehands { @@ -74,6 +73,8 @@ u_int __vdso_gettc(const struct vdso_timehands *vdso_th); #ifdef _KERNEL +void timekeep_push_vdso(void); + uint32_t tc_fill_vdso_timehands(struct vdso_timehands *vdso_th); /* @@ -86,9 +87,6 @@ uint32_t tc_fill_vdso_timehands(struct vdso_timehands *vdso_th); */ uint32_t cpu_fill_vdso_timehands(struct vdso_timehands *vdso_th); -typedef void (*tc_windup_fn)(void *); -EVENTHANDLER_DECLARE(tc_windup, tc_windup_fn); - #define VDSO_TH_NUM 4 #ifdef COMPAT_FREEBSD32 |