Recently, I worked for unify the interrupt delivery mode and do its
setup earlier. And I met a bug about ACPI.
When I investigated it, I got your commit c4e1acbb35e4 (ACPI / init:
Run acpi_early_init() before timekeeping_init()). And I reproduced the
problem you said.
In the changelog of commit:
Commit 73f7d1ca3263 (ACPI / init: Run acpi_early_init() before
timekeeping_init()) optimistically moved the early ACPI initialization
before timekeeping_init(), but that didn't work, because it broke fast
TSC calibration for Julian Wollrath on Thinkpad x121e (and most likely
Here, does the fast TSC calibration means *quick_pit_calibrate()* ?
for others too). The reason is that acpi_early_init() enables the SCI
and that interferes with the fast TSC calibration mechanism.
I reproduced it by the following command line:
the original dmesg is:
[ 0.000000] tsc: Fast TSC calibration using PIT
the broken dmesg is:
[ 0.001000] tsc: PIT calibration matches HPET. 1 loops
Is it right? If it is wrong, please give the right process for
Thus follow the original idea to execute acpi_early_init() before
efi_enter_virtual_mode() to help the EFI people for now and we can
revisit the other problem that commit 73f7d1ca3263 attempted to
address in the future (if really necessary).
If the result which I reproduced was right, I think we can do what
the commit 73f7d1ca3263 attempted to do now. And it also can fix the
Because my patchset will setup the interrupt delivery mode earlier
than TSC initialization. So, in Fast TSC calibration, kernel is in its
final interrupt mode, not just PIC mode. The change of trigger type
will never break the Fast TSC calibration(I have tested in my box).