On 08/12/2016 01:18 PM, Andy Lutomirski wrote: > I don't think this is right. If the HPET ever returns the same value > twice in a row (unlikely because it's generally too slow to read, but > it's plausible that someone will make a fast HPET some day), then this > could deadlock.
True... I guess that means we've got to do some kind of sequence counter preferably in the same cacheline as the HPET value itself, or _something that we guarantee to change on each write to the cached value. > Also, does this code need to be NMI-safe? This implementation is > deadlocky if it's called from an NMI. Urg. Can't we just do if (in_nmi()) return read_real_hpet(); ? > The original code was wait-free, right? That was a nice property, too. You mean no spins? I don't think this one really spins ever either.