]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Stop updating the struct vdso_timehands from even handler executed in
authorkib <kib@FreeBSD.org>
Sat, 23 Jun 2012 09:33:06 +0000 (09:33 +0000)
committerkib <kib@FreeBSD.org>
Sat, 23 Jun 2012 09:33:06 +0000 (09:33 +0000)
commit497817697cfb819824b7ae8619a5094ace1b3698
treee776dfcefe80b16e0aa0a27d0fdb364391c6c4b8
parente19c8fe0ffaebe2cb325b0d14102166d51b7429d
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
sys/kern/kern_exec.c
sys/kern/kern_tc.c
sys/sys/sysent.h
sys/sys/vdso.h