1. 13 8月, 2005 1 次提交
  2. 30 7月, 2005 1 次提交
    • E
      [PATCH] Fix sync_tsc hang · 3d483f47
      Eric W. Biederman 提交于
      sync_tsc was using smp_call_function to ask the boot processor to report
      it's tsc value.  smp_call_function performs an IPI_send_allbutself which is
      a broadcast ipi.  There is a window during processor startup during which
      the target cpu has started and before it has initialized it's interrupt
      vectors so it can properly process an interrupt.  Receveing an interrupt
      during that window will triple fault the cpu and do other nasty things.
      
      Why cli does not protect us from that is beyond me.
      
      The simple fix is to match ia64 and provide a smp_call_function_single.
      Which avoids the broadcast and is more efficient.
      
      This certainly fixes the problem of getting stuck on boot which was
      very easy to trigger on my SMP Hyperthreaded Xeon, and I think
      it fixes it for the right reasons.
      
      Minor changes by AK
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      3d483f47
  3. 29 7月, 2005 3 次提交
  4. 28 7月, 2005 2 次提交
  5. 26 6月, 2005 4 次提交
  6. 21 5月, 2005 1 次提交
  7. 17 5月, 2005 3 次提交
    • A
      [PATCH] x86_64: Don't assume BSP has ID 0 in new smp bootup · 18a2b647
      Andi Kleen 提交于
      This patch removes the assumption that LAPIC entries contain the BSP as its
      first entry.  This is a slight improvement to the temporary fix submitted by
      Suresh Siddha.
      
      - Removes assumption that LAPIC entries contain BSP first.
      
      - Builds x86_acpiid_to_apicid[] and bios_cpu_apicid[] properly with BSP as
        first entry.
      
      - Made maxcpus=1 boot on these systems.  Since the parsing earlier in
        arch/x86_64/kernel/mpparse.c stopped after maxcpus entries, other entries
        were not processed, this causes kernel not to boot on these systems.
      
      TBD: x86_acpiid_to_apicid and bios_cpu_apicid[] seem to be exactly the
           same.  This could be removed, but might need more work to cleanup.
      Signed-off-by: NAshok Raj <ashok.raj@intel.com>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      18a2b647
    • A
      [PATCH] x86_64: Collected NMI watchdog fixes. · 75152114
      Andi Kleen 提交于
      Collected NMI watchdog fixes.
      
      - Fix call of check_nmi_watchdog
      
      - Remove earlier move of check_nmi_watchdog to later.  It does not fix the
        race it was supposed to fix fully.
      
      - Remove unused P6 definitions
      
      - Add support for performance counter based watchdog on P4 systems.
      
        This allows to run it only once per second, which saves some CPU time.
        Previously it would run at 1000Hz, which was too much.
      
        Code ported from i386
      
        Make this the default on Intel systems.
      
      - Use check_nmi_watchdog with local APIC based nmi
      
      - Fix race in touch_nmi_watchdog
      
      - Fix bug that caused incorrect performance counters to be programmed in a
        few cases on K8.
      
      - Remove useless check for local APIC
      
      - Use local_t and per_cpu variables for per CPU data.
      
      - Keep other CPUs busy during check_nmi_watchdog to make sure they really
        tick when in lapic mode.
      
      - Only check CPUs that are actually online.
      
      - Various other fixes.
      
      - Fix fallback path when MSRs are unimplemented
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      75152114
    • A
      [PATCH] x86_64: Update TSC sync algorithm · dda50e71
      Andi Kleen 提交于
      The new TSC sync algorithm recently submitted did not work too well.
      
      The result was that some MP machines where the TSC came up of the BIOS very
      unsynchronized and that did not have HPET support were nearly unusable because
      the time would jump forwards and backwards between CPUs.
      
      After a lot of research ;-) and some more prototypes I ended up with just
      using the one from IA64 which looks best.  It has some internal self tuning
      that should adapt to changing interconnect latencies.  It holds up in my tests
      so far.
      
      I believe it was originally written by David Mosberger, I just ported it over
      to x86-64.  See the inline comment for a description.
      
      This cleans up the code because it uses smp_call_function for syncing instead
      of having custom hooks in SMP bootup.
      
      Please note that the cycle numbers it outputs are too optimistic because they
      do not take into account the latency of WRMSR and RDTSC, which can be hundreds
      of cycles.  It seems to be able to sync a dual Opteron to 200-300 cycles,
      which is probably good enough.
      
      There is a timing window during AP bootup where interrupts can see
      inconsistent time before the TSC is synced.  It is hard to avoid unfortunately
      because we can only do the TSC sync after some setup, and we need to enable
      interrupts before that.  I just ignored it for now.
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      dda50e71
  8. 17 4月, 2005 5 次提交