opnsense-src/sys/dev/acpica
Konstantin Belousov 1680854946 Implement userspace gettimeofday(2) with HPET timecounter.
Right now, userspace (fast) gettimeofday(2) on x86 only works for
RDTSC.  For older machines, like Core2, where RDTSC is not C2/C3
invariant, and which fall to HPET hardware, this means that the call
has both the penalty of the syscall and of the uncached hw behind the
QPI or PCIe connection to the sought bridge.  Nothing can me done
against the access latency, but the syscall overhead can be removed.
System already provides mappable /dev/hpetX devices, which gives
straight access to the HPET registers page.

Add yet another algorithm to the x86 'vdso' timehands. Libc is updated
to handle both RDTSC and HPET.  For HPET, the index of the hpet device
to mmap is passed from kernel to userspace, index might be changed and
libc invalidates its mapping as needed.

Remove cpu_fill_vdso_timehands() KPI, instead require that
timecounters which can be used from userspace, to provide
tc_fill_vdso_timehands{,32}() methods.  Merge i386 and amd64
libc/<arch>/sys/__vdso_gettc.c into one source file in the new
libc/x86/sys location.  __vdso_gettc() internal interface is changed
to move timecounter algorithm detection into the MD code.

Measurements show that RDTSC even with the syscall overhead is faster
than userspace HPET access.  But still, userspace HPET is three-four
times faster than syscall HPET on several Core2 and SandyBridge
machines.

Tested by:	Howard Su <howard0su@gmail.com>
Sponsored by:	The FreeBSD Foundation
MFC after:	1 month
Differential revision:	https://reviews.freebsd.org/D7473
2016-08-17 09:52:09 +00:00
..
Osd Use polling spin loops for timeouts during early boot. 2016-05-16 21:33:31 +00:00
acpi.c Remove a tunable and always reset system clock while resuming with ACPI. 2016-07-13 19:16:32 +00:00
acpi_acad.c Use DEVMETHOD_END macro defined in sys/bus.h instead of {0, 0} sentinel on device_method_t arrays 2013-01-30 18:01:20 +00:00
acpi_battery.c Prevent a division by zero with some broken batteries 2011-11-26 13:43:50 +00:00
acpi_button.c Use DEVMETHOD_END macro defined in sys/bus.h instead of {0, 0} sentinel on device_method_t arrays 2013-01-30 18:01:20 +00:00
acpi_cmbat.c Use DEVMETHOD_END macro defined in sys/bus.h instead of {0, 0} sentinel on device_method_t arrays 2013-01-30 18:01:20 +00:00
acpi_cpu.c Add an EARLY_AP_STARTUP option to start APs earlier during boot. 2016-05-14 18:22:52 +00:00
acpi_dock.c Use DEVMETHOD_END macro defined in sys/bus.h instead of {0, 0} sentinel on device_method_t arrays 2013-01-30 18:01:20 +00:00
acpi_ec.c Silence PVS-Studio warning (V595). 2016-02-23 23:09:45 +00:00
acpi_hpet.c Implement userspace gettimeofday(2) with HPET timecounter. 2016-08-17 09:52:09 +00:00
acpi_hpet.h Implement userspace gettimeofday(2) with HPET timecounter. 2016-08-17 09:52:09 +00:00
acpi_if.m Remove PCI_SET_POWERSTATE method from acpi.c and eradicate all PCI-specific 2010-10-19 19:53:06 +00:00
acpi_isab.c - There's no need to overwrite the default device method with the default 2011-11-22 21:28:20 +00:00
acpi_lid.c [acpi] graphics drivers want access to acpi lid handle 2016-06-05 02:02:51 +00:00
acpi_package.c Remove a bogus bzero() call. 2016-02-18 23:32:11 +00:00
acpi_pci.c Add a new bus method to fetch device-specific CPU sets. 2016-05-09 20:50:21 +00:00
acpi_pci_link.c - Some BIOSes use an Extended IRQ resource descriptor in _PRS for a link 2013-04-22 15:51:06 +00:00
acpi_pcib.c Add a new bus method to fetch device-specific CPU sets. 2016-05-09 20:50:21 +00:00
acpi_pcib_acpi.c Add a new bus method to fetch device-specific CPU sets. 2016-05-09 20:50:21 +00:00
acpi_pcib_pci.c Implement a proper detach method for the PCI-PCI bridge driver. 2016-05-20 00:03:22 +00:00
acpi_pcibvar.h Add a new bus method to fetch device-specific CPU sets. 2016-05-09 20:50:21 +00:00
acpi_pcivar.h Associate device_t objects with ACPI handles via PCI_CHILD_ADDED(). 2016-04-07 17:15:16 +00:00
acpi_perf.c Remove misc NULL checks after M_WAITOK allocations. 2016-05-10 10:26:07 +00:00
acpi_powerres.c Remove not needed initialisation code. 2014-06-26 10:48:01 +00:00
acpi_quirk.c Import ACPICA 20090521. 2009-06-05 18:44:36 +00:00
acpi_quirks Add a quirk for a motherboard whose acpi timer runs too fast. 2005-06-26 18:19:14 +00:00
acpi_resource.c Convert rman to use rman_res_t instead of u_long 2016-01-27 02:23:54 +00:00
acpi_smbat.c Remove instances of variables that were set, but never used. gcc 4.9 2014-03-30 23:43:36 +00:00
acpi_smbus.h Import ACPI smart battery support. Newer systems (Acer, mostly) do not 2005-10-23 00:20:13 +00:00
acpi_thermal.c Fix a minor leak in ACPI thermal 2016-06-07 19:08:13 +00:00
acpi_throttle.c Do not probe Intel PIIX4 south bridge quirks on amd64. These quirky south 2015-05-21 19:31:10 +00:00
acpi_timer.c Use uintmax_t (typedef'd to rman_res_t type) for rman ranges. 2016-03-18 01:28:41 +00:00
acpi_video.c Silence PVS-Studio warning (V595). 2016-02-23 22:55:44 +00:00
acpiio.h sys/dev: minor spelling fixes. 2016-05-03 03:41:25 +00:00
acpivar.h Add a new bus method to fetch device-specific CPU sets. 2016-05-09 20:50:21 +00:00