On Mon, Nov 30, 2015 at 08:34:18PM +0300, Andrei Borzenkov wrote: > 30.11.2015 19:50, Andrei Borzenkov пишет: > > 30.11.2015 19:31, Vitaly Kuznetsov пишет: > >> Andrei Borzenkov <arvidj...@gmail.com> writes: > >> > >>> 26.11.2014 11:59, Laszlo Ersek пишет: > >>>> HyperV Gen2 virtual machines have no PIT; guest code should rely on UEFI > >>>> services instead. > >>>> > >>> > >>> Could you retest with current master? It now supports multiple methods > >>> to calibrate TSC and should avoid PIT on UEFI systems. > >> > >> Unfortunately, current master (grub-2.02-beta2-561-g346a494) still > >> doesn't work for me, timer keeps running like crazy on Gen2 Hyper-V VMs. > >> > > > > @Michael: I remember you tested version of Vladimir patch on Hyper-V? > > Could you test current master? > >
I don't have access to Hyper-V either. My initial patch was tested on Hyper-V from my colleage in Nuremburg. For Vladimir's patch I did tests on my EFI machine and mostly intersted in pmtimer to function properly, as that's new introduced timer to the patch .. > > > if ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH)) { > ret = 1; > /* Wait. */ > while ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) > == 0x00); > } > > > If PIT is not present all reads should return 0xff so this will always > succeed, right? Linux kernel is using some sanity checks, if loop > terminated too early it assumes calibration failure. Well, yes the detection is bogus, I think the condition should check for return 0x00, which means the timer is counting and can continue to wait for it to finish. if ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0) { ret = 1; /* Wait. */ while ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0x00); } Vitaly, could you please help to retest ? Thanks, Michael > _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel