1. 18 Sep, 2010 1 commit
    • Thomas Gleixner's avatar
      x86: Hpet: Avoid the comparator readback penalty · 995bd3bb
      Thomas Gleixner authored
      Due to the overly intelligent design of HPETs, we need to workaround
      the problem that the compare value which we write is already behind
      the actual counter value at the point where the value hits the real
      compare register. This happens for two reasons:
      
      1) We read out the counter, add the delta and write the result to the
         compare register. When a NMI or SMI hits between the read out and
         the write then the counter can be ahead of the event already
      
      2) The write to the compare register is delayed by up to two HPET
         cycles in certain chipsets.
      
      We worked around this by reading back the compare register to make
      sure that the written value has hit the hardware. For certain ICH9+
      chipsets this can require two readouts, as the first one can return
      the previous compare register value. That's bad performance wise for
      the normal case where the event is far enough in the future.
      
      As we already know that the write can be delayed by up to two cycles
      we can avoid the read back of the compare register completely if we
      make the decision whether the delta has elapsed already or not based
      on the following calculation:
      
        cmp = event - actual_count;
      
      If cmp is less than 8 HPET clock cycles, then we decide that the event
      has happened already and return -ETIME. That covers the above #1 and
      #2 problems which would cause a wait for HPET wraparound (~306
      seconds).
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarNix <nix@esperi.org.uk>
      Tested-by: default avatarArtur Skawina <art.08.09@gmail.com>
      Cc: Damien Wyart <damien.wyart@free.fr>
      Tested-by: default avatarJohn Drescher <drescherjm@gmail.com>
      Cc: Venkatesh Pallipadi <venki@google.com>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: Andreas Herrmann <andreas.herrmann3@amd.com>
      Tested-by: default avatarBorislav Petkov <borislav.petkov@amd.com>
      Cc: Suresh Siddha <suresh.b.siddha@intel.com>
      LKML-Reference: <alpine.LFD.2.00.1009151500060.2416@localhost6.localdomain6>
      995bd3bb
  2. 17 Sep, 2010 19 commits
  3. 16 Sep, 2010 14 commits
  4. 15 Sep, 2010 6 commits