[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [BUG] panic: "IO-APIC + timer doesn't work" - several people have reproduced
On 17.03.2020 16:23, Jason Andryuk wrote: > Below is the diff. It was messier and I tidied it up some. I've looked into this some more. I can see how what we currently do is not in line with firmware handing off with LegacyReplacement mode enabled. However, this case doesn't look to apply here: > It's mainly the change to hpet_resume() to mimic Linux's legacy HPET > setup on T0. It turns on HPET_CFG_LEGACY to ensure the timer interrupt > is running. And it also includes the printing of the initial HPET > config: > HPET_CFG 00000001 While HPET_CFG_ENABLE is set, HPET_CFG_LEGACY is clear. > HPET_T0_CFG 00008030 > HPET_T0_ROUTE 0000016c And while firmware must have setup FSB routing for T0, its enable bits (both HPET_TN_ENABLE and HPET_TN_FSB) are also clear. Therefore we have, afaics, no indication whatsoever that we ought to enable LegacyReplacement mode. Of course the spec also says "Assuming platform does not have 8254/RTC hardware or does not want to support this legacy timer hardware, for this case, System BIOS should set the LegacyReplacement Route bit and report IRQ0 & IRQ8 as being consumed by the HPET block in system name space:" (followed by a table). What is referred to as "system name space" is, I assume, ACPI DSDT/SSDTs, which we have no access to this early (and Linux doesn't either, aiui), so also can't be used as indicator. Otoh I also don't think it is correct to blindly enable LegacyReplacement mode, like - afaics - Linux does, the more with our split brain model as far as affected devices go (Xen "owns" the PIT [and of course also the HPET], while Linux "owns" the RTC). This is because of the effect of this setting on what actually drives IRQ8. In theory we might be able do so when ACPI_FADT_NO_CMOS_RTC is set, but Linux may use the CMOS RTC even when that flag is set. So right now the only possible approach I see to address your problem is to add yet another fallback mode to check_timer(), forcing LegacyReplacement mode to be enabled. But between / after which step(s) to put this there isn't at all obvious to me. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |