History log of /dflybsd-src/sys/dev/acpica/acpi_timer.c (Results 1 – 19 of 19)
Revision Date Author Comments
# 8fbc264d 09-Jun-2020 Matthew Dillon <dillon@apollo.backplane.com>

kernel - Refactor sysclock_t from 32 to 64 bits

* Refactor the core cpu timer API, changing sysclock_t from 32
to 64 bits. Provide a full 64-bit count from all sources.

* Implement muldivu64() u

kernel - Refactor sysclock_t from 32 to 64 bits

* Refactor the core cpu timer API, changing sysclock_t from 32
to 64 bits. Provide a full 64-bit count from all sources.

* Implement muldivu64() using gcc's 128-bit integer type. This
functions takes three 64-bit valus, performs (a * b) / d
using a 128-bit intermediate calculation, and returns a 64-bit
result.

Change all timer scaling functions to use this function which
effectively gives systimers the capability of handling any
timeout that fits 64 bits for the timer's resolution.

* Remove TSC frequency scaling, it is no longer needed. The
TSC timer is now used at its full resolution.

* Use atomic_fcmpset_long() instead of a clock spinlock when
updating the msb bits for hardware timer sources less than
64 bits wide.

* Properly recalculate existing systimers when the clock source
is changed. Existing systimers were not being recalculated,
leading to the system failing to boot when time sources had
radically different clock frequencies.

show more ...


# e3e00568 13-Apr-2018 Matthew Dillon <dillon@apollo.backplane.com>

kernel - Improve SPINLOCK, acpi_timer performance under qemu/kvm/VMs

* Improve acpi_timer 24-bit performance by reducing use of clock_lock().

* Integrate a delta test into acpi_cputimer.base and re

kernel - Improve SPINLOCK, acpi_timer performance under qemu/kvm/VMs

* Improve acpi_timer 24-bit performance by reducing use of clock_lock().

* Integrate a delta test into acpi_cputimer.base and remove the
out-of-band tracking globals. We can query the timer and calculate
the return value for deltas less than 1/16 full-range. Beyond
that range we need to get the clock_lock() to calculate the high
24 bits safely and update acpi_cputimer.base.

On SMP systems, cpu #1 will update acpi_cputimer.base more
frequently, reducing the chance that multiple cpus will need the
clock_lock() at the same time.

* Refactor the safe24 code to make it easier to use.

* Improve the regressive SPINLOCK assembly macro, bringing it up to
modern performance levels. This fixes unnecessary cache ping-ponging
during contention.

Suggested-by: mjg_

show more ...


# df21e16d 28-Jan-2018 Imre Vadász <imre@vdsz.com>

acpi - Use KOBJ_GPRI_ACPI driver priorities for ig4 and gpio_intel.

* Since we currently don't handle the ACPI _DEP methods appropriately,
use the "global priority hack" from
5025fc65cd2448de8a5

acpi - Use KOBJ_GPRI_ACPI driver priorities for ig4 and gpio_intel.

* Since we currently don't handle the ACPI _DEP methods appropriately,
use the "global priority hack" from
5025fc65cd2448de8a5b7295c9936b473a7b0194 to enforce that ig4 and
gpio_intel attach before various ACPI namespace devices.

* This uses the KOBJ_GPRI_ACPI+1 and KOBJ_GPRI_ACPI+2 driver global priority
levels for important ACPI drivers, which may have to attach before other
ACPI devices can be used.

* This also adds the KOBJ_GPRI_ACPI global priority level to the sdhci_acpi
driver declaration.

show more ...


# 5025fc65 16-Jan-2018 Matthew Dillon <dillon@apollo.backplane.com>

kernel - Add a global priority hack for ACPI

* Allows ACPI to fully probe and attach all acpi devices before
attaching any non-ACPI devices.

* May improve device attach stability.

* Currently on

kernel - Add a global priority hack for ACPI

* Allows ACPI to fully probe and attach all acpi devices before
attaching any non-ACPI devices.

* May improve device attach stability.

* Currently only implemented at the top-level of the acpi
device tree.

show more ...


# 0087561d 24-Jan-2017 Sepherosa Ziehau <sephe@dragonflybsd.org>

cputimer: Initialize explicitly.


# cd9b0844 15-Jul-2016 Matthew Dillon <dillon@apollo.backplane.com>

kernel - Remove unnecessary cpu_enable_intr()

* Remove an unnecessary cpu_enable_intr() being called just prior to
a write_rflags().


# 831d9a4b 24-Mar-2016 Sascha Wildner <saw@online.de>

kernel/acpi_timer: Add a missing cpu_enable_intr() after the timer test.

It's not related to the acpi_timer issue two people are seeing with
20160318 currently, but wrong in any case.


# ac8ea0ad 12-Aug-2015 Sascha Wildner <saw@online.de>

i386 removal, part 34/x: Remove some i386 traces from the kernel.


# afc8ff3c 29-Jun-2015 Sascha Wildner <saw@online.de>

Convert acpi_timer to using ACPICA functions.


# 9d1f0c52 15-Nov-2014 Sascha Wildner <saw@online.de>

kernel: Refer to it as "ACPICA", not "ACPI CA" or "ACPI-CA".


# a6874b57 03-Aug-2014 Sascha Wildner <saw@online.de>

kernel/acpi_timer: Lower the bar for ACPI-fast on real and virtual machines.

This brings in FreeBSD's revisions 220331-220369:

r220369 | jkim | 2011-04-05 20:40:19 +0200 (Tue, 05 Apr 2011) | 6 line

kernel/acpi_timer: Lower the bar for ACPI-fast on real and virtual machines.

This brings in FreeBSD's revisions 220331-220369:

r220369 | jkim | 2011-04-05 20:40:19 +0200 (Tue, 05 Apr 2011) | 6 lines

Lower the bar for ACPI-fast on real machines slightly. Empirical evidences
show that there are perfectly working PM timers with occasional "hiccups",
probably because of an SMI. Now we ignore the maximum if it happens once in
the test loop and the width is small enough. Also, relax normal width a bit
to count in a boundary case.

------------------------------------------------------------------------
r220336 | jkim | 2011-04-04 19:44:26 +0200 (Mon, 04 Apr 2011) | 3 lines

Always check the current minimum value to make the test more predictable.
Use INT32_MAX instead of an arbitrary big number for the initial minimum.

------------------------------------------------------------------------
r220333 | jkim | 2011-04-04 19:00:50 +0200 (Mon, 04 Apr 2011) | 5 lines

Lower the bar for ACPI-fast on virtual machines. The current logic depends
on the fact that real hardware has almost fixed cost to read the ACPI timer.
It is virtually always false for hardware emulation and it makes no sense to
read it multiple times, which is already quite expensive for full emulation.

------------------------------------------------------------------------
r220331 | jkim | 2011-04-04 18:47:42 +0200 (Mon, 04 Apr 2011) | 2 lines

Add inline to acpi_timer_read() to reduce unnecessary jumps and calls.

show more ...


# 4520cefc 03-Aug-2014 Sascha Wildner <saw@online.de>

kernel: Don't pass the size of the var as arg2 to sysctl_handle_int().

arg1 (second parameter) is for passing a variable and arg2 (third
parameter) is for passing a constant (in which case arg1 is N

kernel: Don't pass the size of the var as arg2 to sysctl_handle_int().

arg1 (second parameter) is for passing a variable and arg2 (third
parameter) is for passing a constant (in which case arg1 is NULL).

show more ...


# d2fa5f95 14-May-2014 Sascha Wildner <saw@online.de>

kernel/acpi: Add quirks framework (and some quirks) from FreeBSD.

I don't know how common the signatures from the supplied quirks
are nowadays (the last addition was in 2005) but the framework
could

kernel/acpi: Add quirks framework (and some quirks) from FreeBSD.

I don't know how common the signatures from the supplied quirks
are nowadays (the last addition was in 2005) but the framework
could nevertheless be useful.

For now, the ACPI_Q_MADT_IRQ0 quirk remains unimplemented because
of the way the associated code is implemented in DragonFly. This
will need further work in the future.

In-discussion-with: sephe

show more ...


# d3c9c58e 20-Feb-2013 Sascha Wildner <saw@online.de>

kernel: Use DEVMETHOD_END in the drivers.


# 5db2f26e 03-Jan-2013 Sascha Wildner <saw@online.de>

kernel: Move sys/dev/acpica5 to sys/dev/acpica.

The 5 used to indicate that it was imported from FreeBSD 5 but that
doesn't matter anymore.

In-discussion-with: sephe


# 16dbe56e 23-Aug-2005 YONETANI Tomokazu <y0netan1@dragonflybsd.org>

Retire old, FreeBSD 4.x -derived ACPI code.


# 9941bd3c 13-Feb-2004 Joerg Sonnenberger <joerg@dragonflybsd.org>

Add __DragonFly__


# 88c4d2f6 30-Jan-2004 Matthew Dillon <dillon@dragonflybsd.org>

This commit represents a major revamping of the clock interrupt and timebase
infrastructure in DragonFly.

* Rip out the existing 8254 timer 0 code, and also disable the use of
Timer 2 (which means

This commit represents a major revamping of the clock interrupt and timebase
infrastructure in DragonFly.

* Rip out the existing 8254 timer 0 code, and also disable the use of
Timer 2 (which means that the PC speaker will no longer go beep). Timer 0
used to represent a periodic interrupt and a great deal of code was in
place to attempt to obtain a timebase off of that periodic interrupt.

Timer 0 is now used in software retriggerable one-shot mode to produce
variable-delay interrupts. A new hardware interrupt clock abstraction
called SYSTIMERS has been introduced which allows threads to register
periodic or one-shot interrupt/IPI callbacks at approximately 1uS
granularity.

Timer 2 is now set in continuous periodic mode with a period of 65536
and provides the timebase for the system, abstracted to 32 bits.

All the old platform-integrated hardclock() and statclock() code has
been rewritten. The old IPI forwarding code has been #if 0'd out and
will soon be entirely removed (the systimer abstraction takes care of
multi-cpu registrations now). The architecture-specific clkintr() now
simply calls an entry point into the systimer and provides a Timer 0
reload and Timer 2 timebase function API.

* On both UP and SMP systems, cpus register systimer interrupts for the Hz
interrupt, the stat interrupt, and the scheduler round-robin interrupt.
The abstraction is carefully designed to allow multiple interrupts occuring
at the same time to be processed in a single hardware interrupt. While
we currently use IPI's to distribute requested interrupts from other cpu's,
the intent is to use the abstraction to take advantage of per-cpu timers
when available (e.g. on the LAPIC) in the future.

systimer interrupts run OUTSIDE THE MP LOCK. Entry points may be called
from the hard interrupt or via an IPI message (IPI messages have always
run outside the MP lock).

* Rip out timecounters and disable alternative timecounter code for other
time sources. This is temporary. Eventually other time sources, such as
the TSC, will be reintegrated as independant, parallel-running entities.
There will be no 'time switching' per-say, subsystems will be able to
select which timebase they wish to use. It is desireable to reintegrate
at least the TSC to improve [get]{micro,nano}[up]time() performance.

WARNING: PPS events may not work properly. They were not removed, but
they have not been retested with the new code either.

* Remove spl protection around [get]{micro,nano}[up]time() calls, they are
now internally protected.

* Use uptime instead of realtime in certain CAM timeout tests

* Remove struct clockframe. Use struct intrframe everywhere where clockframe
used to be used.

* Replace most splstatclock() protections with crit_*() protections, because
such protections must now also protect against IPI messaging interrupts.

* Add fields to the per-cpu globaldata structure to access timebase related
information using only a critical section rather then a mutex. However,
the 8254 Timer 2 access code still uses spin locks. More work needs to
be done here, the 'realtime' correction is still done in a single global
'struct timespec basetime' structure.

* Remove the CLKINTR_PENDING icu and apic interrupt hacks.

* Augment the IPI Messaging code to make an intrframe available to callbacks.

* Document 8254 timing modes in i386/sai/timerreg.h. Note that at the
moment we assume an 8254 instead of an 8253 as we are using TIMER_SWSTROBE
mode. This may or may not have to be changed to an 8253 mode.

* Integrate the NTP correction code into the new timebase subsystem.

* Separate boottime from basettime. Once boottime is believed to be stable
it is no longer effected by NTP or other time corrections.

CAVETS:

* PC speaker no longer works

* Profiling interrupt rate not increased (it needs work to be
made operational on a per-cpu basis rather then system-wide).

* The native timebase API is function-based, but currently hardwired.

* There might or might not be issues with 486 systems due to the
timer mode I am using.

show more ...


# bf3e6b54 24-Sep-2003 David Rhodus <drhodus@dragonflybsd.org>

* Intel ACPI 20030228 distribution with local DragonFly changes.

* OSPM ACPI driver. Note that this driver does not include
support for PCI interrupt routing or enumeration of ISA bridges or

* Intel ACPI 20030228 distribution with local DragonFly changes.

* OSPM ACPI driver. Note that this driver does not include
support for PCI interrupt routing or enumeration of ISA bridges or
Host to PCI bridges. While functional on some machines, this driver
should be considered experimental and should be tested prior to being
deployed in a production environment.


Original work done by John Baldwin
Sponsored by: The Weather Channel

show more ...