#
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 ...
|