1. 14 8月, 2008 1 次提交
    • M
      x86: resurrect proper handling of maxcpus= kernel option (v2) · 23b49c19
      Max Krasnyansky 提交于
      For some reason we had two parsers registered for maxcpus=. One in init/main.c
      and another in arch/x86/smpboot.c. So I nuked the one in arch/x86.
      
      Also 64-bit kernels used to handle maxcpus= as documented in
      Documentation/cpu-hotplug.txt. CPUs with 'id > maxcpus' are initialized
      but not booted. 32-bit version for some reason ignored them even though
      all the infrastructure for booting them later is there.
      
      In the current mainline both 64 and 32 bit versions are broken.
      This patch restores the correct behaviour. I've tested x86_64 version on
      4- and 8- way Core2 and 2-way Opteron based machines. Various config
      combinations SMP, !SMP, CPU_HOTPLUG, !CPU_HOTPLUG.
      Booted with maxcpus=1 and maxcpus=4, etc. Everything is working as expected.
      
      So far we've received two reports from different people confirming that 32-bit
      version also works fine, both on dual core laptops and 16way server machines.
      
      [v2: This version fixes visws breakage pointed out by Ingo.]
      Signed-off-by: NMax Krasnyansky <maxk@qualcomm.com>
      Cc: lizf@cn.fujitsu.com
      Cc: jeff.chua.linux@gmail.com
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      23b49c19
  2. 12 8月, 2008 2 次提交
  3. 21 7月, 2008 1 次提交
  4. 18 7月, 2008 3 次提交
    • M
      x86: APIC: Make apic_verbosity unsigned · baa13188
      Maciej W. Rozycki 提交于
      As a microoptimisation, make apic_verbosity unsigned.  This will make
      apic_printk(APIC_QUIET, ...) expand into just printk(...) with the
      surrounding condition and a reference to apic_verbosity removed.
      Signed-off-by: NMaciej W. Rozycki <macro@linux-mips.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      baa13188
    • C
      x86: apic_32 - introduce calibrate_APIC_clock · 836c129d
      Cyrill Gorcunov 提交于
      Introduce calibrate_APIC_clock so it could help in further 32/64bit
      apic code merging.
      Signed-off-by: NCyrill Gorcunov <gorcunov@gmail.com>
      Cc: Cyrill Gorcunov <gorcunov@gmail.com>
      Cc: macro@linux-mips.org
      Cc: yhlu.kernel@gmail.com
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      836c129d
    • M
      x86: APIC: remove apic_write_around(); use alternatives · 593f4a78
      Maciej W. Rozycki 提交于
      Use alternatives to select the workaround for the 11AP Pentium erratum
      for the affected steppings on the fly rather than build time.  Remove the
      X86_GOOD_APIC configuration option and replace all the calls to
      apic_write_around() with plain apic_write(), protecting accesses to the
      ESR as appropriate due to the 3AP Pentium erratum.  Remove
      apic_read_around() and all its invocations altogether as not needed.
      Remove apic_write_atomic() and all its implementing backends.  The use of
      ASM_OUTPUT2() is not strictly needed for input constraints, but I have
      used it for readability's sake.
      
      I had the feeling no one else was brave enough to do it, so I went ahead
      and here it is.  Verified by checking the generated assembly and tested
      with both a 32-bit and a 64-bit configuration, also with the 11AP
      "feature" forced on and verified with gdb on /proc/kcore to work as
      expected (as an 11AP machines are quite hard to get hands on these days).
      Some script complained about the use of "volatile", but apic_write() needs
      it for the same reason and is effectively a replacement for writel(), so I
      have disregarded it.
      
      I am not sure what the policy wrt defconfig files is, they are generated
      and there is risk of a conflict resulting from an unrelated change, so I
      have left changes to them out.  The option will get removed from them at
      the next run.
      
      Some testing with machines other than mine will be needed to avoid some
      stupid mistake, but despite its volume, the change is not really that
      intrusive, so I am fairly confident that because it works for me, it will
      everywhere.
      Signed-off-by: NMaciej W. Rozycki <macro@linux-mips.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      593f4a78
  5. 11 7月, 2008 1 次提交
  6. 09 7月, 2008 1 次提交
  7. 08 7月, 2008 11 次提交
    • Y
      x86: use disable_apic in 32bit · 914bebfa
      Yinghai Lu 提交于
      change the enable_local_apic to static force_enable_local_apic for 32bit
      Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      914bebfa
    • Y
      x86: let setup_arch call init_apic_mappings for 32bit · f3294a33
      Yinghai Lu 提交于
      instead of calling it from trap_init()
      
      also move init ioapic mapping out of apic_32.c
      
      so 32 bit do same as 64 bit
      Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      f3294a33
    • C
      x86: nmi_watchdog - use nmi_watchdog variable for printing · 116f570e
      Cyrill Gorcunov 提交于
      Since it is possible NMI_ definitions could be changed
      one day we better print out real nmi_watchdog value instead
      of constant string.
      Signed-off-by: NCyrill Gorcunov <gorcunov@gmail.com>
      Cc: macro@linux-mips.org
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      116f570e
    • Y
      x86: check command line when CONFIG_X86_MPPARSE is not set, v2 · 3c999f14
      Yinghai Lu 提交于
      if acpi=off, acpi=noirq and pci=noacpi, we need to disable apic.
      Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: "Maciej W. Rozycki" <macro@linux-mips.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      3c999f14
    • J
      x86: fix stack overflow for large values of MAX_APICS · b6df1b8b
      Jack Steiner 提交于
      physid_mask_of_physid() causes a huge stack (12k) to be created if the
      number of APICS is large. Replace physid_mask_of_physid() with a
      new function that does not create large stacks. This is a problem only
      on large x86_64 systems.
      
      this paves the way to increase MAX_APICS.
      Signed-off-by: NJack Steiner <steiner@sgi.com>
      Cc: linux-mm@kvack.org
      Cc: mingo@elte.hu
      Cc: tglx@linutronix.de
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      b6df1b8b
    • M
      x86: cleanup early per cpu variables/accesses v4 · 23ca4bba
      Mike Travis 提交于
        * Introduce a new PER_CPU macro called "EARLY_PER_CPU".  This is
          used by some per_cpu variables that are initialized and accessed
          before there are per_cpu areas allocated.
      
          ["Early" in respect to per_cpu variables is "earlier than the per_cpu
          areas have been setup".]
      
          This patchset adds these new macros:
      
      	DEFINE_EARLY_PER_CPU(_type, _name, _initvalue)
      	EXPORT_EARLY_PER_CPU_SYMBOL(_name)
      	DECLARE_EARLY_PER_CPU(_type, _name)
      
      	early_per_cpu_ptr(_name)
      	early_per_cpu_map(_name, _idx)
      	early_per_cpu(_name, _cpu)
      
          The DEFINE macro defines the per_cpu variable as well as the early
          map and pointer.  It also initializes the per_cpu variable and map
          elements to "_initvalue".  The early_* macros provide access to
          the initial map (usually setup during system init) and the early
          pointer.  This pointer is initialized to point to the early map
          but is then NULL'ed when the actual per_cpu areas are setup.  After
          that the per_cpu variable is the correct access to the variable.
      
          The early_per_cpu() macro is not very efficient but does show how to
          access the variable if you have a function that can be called both
          "early" and "late".  It tests the early ptr to be NULL, and if not
          then it's still valid.  Otherwise, the per_cpu variable is used
          instead:
      
      	#define early_per_cpu(_name, _cpu) 			\
      		(early_per_cpu_ptr(_name) ?			\
      			early_per_cpu_ptr(_name)[_cpu] :	\
      			per_cpu(_name, _cpu))
      
          A better method is to actually check the pointer manually.  In the
          case below, numa_set_node can be called both "early" and "late":
      
      	void __cpuinit numa_set_node(int cpu, int node)
      	{
      	    int *cpu_to_node_map = early_per_cpu_ptr(x86_cpu_to_node_map);
      
      	    if (cpu_to_node_map)
      		    cpu_to_node_map[cpu] = node;
      	    else
      		    per_cpu(x86_cpu_to_node_map, cpu) = node;
      	}
      
        * Add a flag "arch_provides_topology_pointers" that indicates pointers
          to topology cpumask_t maps are available.  Otherwise, use the function
          returning the cpumask_t value.  This is useful if cpumask_t set size
          is very large to avoid copying data on to/off of the stack.
      
        * The coverage of CONFIG_DEBUG_PER_CPU_MAPS has been increased while
          the non-debug case has been optimized a bit.
      
        * Remove an unreferenced compiler warning in drivers/base/topology.c
      
        * Clean up #ifdef in setup.c
      
      For inclusion into sched-devel/latest tree.
      
      Based on:
      	git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
          +   sched-devel/latest  .../mingo/linux-2.6-sched-devel.git
      Signed-off-by: NMike Travis <travis@sgi.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      23ca4bba
    • M
      x86: APIC/UP: Remove redundant NMI watchdog downgrade · 19662027
      Maciej W. Rozycki 提交于
      For the UP case the NMI watchdog downgrade is done consistently in
      APIC_init_uniprocessor() now.  Remove redundant code used only when
      BIOS-disabled local APIC is activated.
      Signed-off-by: NMaciej W. Rozycki <macro@linux-mips.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      19662027
    • M
      x86: APIC/UP: Downgrade the NMI watchdog for no I/O APIC · acae7d90
      Maciej W. Rozycki 提交于
       If configured to use the I/O APIC, the NMI watchdog is deemed to fail if
      the chip will not be used in the UP configuration, because "noapic" has
      been specified or the chip is simply not there.  Downgrade to the local
      APIC watchdog to rectify.
      
      The new #ifdef is ugly, I know.  A proper solution is to provide suitable
      definitions of smp_found_config, etc. for !CONFIG_X86_IO_APIC in a header.
      Likewise the whole if () condition should be moved to a static inline
      function.  Such clean-ups are beyond the scope of this change and can be
      done once the whole issue of the timer has been sorted out.
      Signed-off-by: NMaciej W. Rozycki <macro@linux-mips.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      acae7d90
    • I
      Revert "x86, io-apic: fix nmi_watchdog=1 bootup hang" · ab5a5be0
      Ingo Molnar 提交于
      This reverts commit 2229ff84f01746d02fb6b79e156fb5cce48c908f.
      
      A better fix from Maciej will be merged.
      ab5a5be0
    • I
      x86, io-apic: fix nmi_watchdog=1 bootup hang · ff11571b
      Ingo Molnar 提交于
      nmi_watchdog=1 hangs on 64-bit:
      
      [    0.250000] Detected 12.564 MHz APIC timer.
      [    0.254178] APIC timer registered as dummy, due to nmi_watchdog=1!
      [    0.260366] Testing NMI watchdog ... <4>WARNING: CPU#0: NMI appears to be stuck (0->0)!
      [    ...     ]
      [    0.470003] calling  genl_init+0x0/0xd0
      [  hard hang ]
      
      bisected it down to:
      
       git-bisect start
       git-bisect good 1beee8dc
       git-bisect bad 11582ece0aaa2d0f94f345c08a4ab9997078a083
       git-bisect bad 5479c623bb44089844022c03d4c0eb16d5b7a15f
       git-bisect bad cfb4c7fabeb499e1c29f9d1878968e37a938e28a
       git-bisect good 246dd412
       git-bisect bad 3f8237eaff7dc1e35fa791dae095574fd974e671
       git-bisect good 90e23b13ab849e2a11f00c655eb3a2011b4623be
       git-bisect bad 833526a34eeefc117df3191a594c3c3a4f15a9ac
       git-bisect good 791b93d3dfaf16c23e978bec0cc0a3dd9d855d63
       git-bisect bad 65767c64068f2c93e56a1accfed5c78230ac12d7
       git-bisect bad 2abc5c05dd82c188e3bdf6641a274f013348d14b
       git-bisect bad 317e1f2597ffb4d4db940577bbe56dc6e881ef07
      
      | 317e1f2597ffb4d4db940577bbe56dc6e881ef07 is first bad commit
      | commit 317e1f2597ffb4d4db940577bbe56dc6e881ef07
      | Author: Maciej W. Rozycki <macro@linux-mips.org>
      | Date:   Wed May 21 22:10:22 2008 +0100
      |     x86: I/O APIC: clean up the 8259A on a NMI watchdog failure
      
      the problem is that in the dummy-lapic branch we rely on the i8259A
      but if the NMI watchdog fails we turn off IRQ 0 - which doesnt work
      too well ;-)
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      ff11571b
    • T
      x86, clockevents: add C1E aware idle function · aa276e1c
      Thomas Gleixner 提交于
      C1E on AMD machines is like C3 but without control from the OS. Up to
      now we disabled the local apic timer for those machines as it stops
      when the CPU goes into C1E. This excludes those machines from high
      resolution timers / dynamic ticks, which hurts especially X2 based
      laptops.
      
      The current boot time C1E detection has another, more serious flaw
      as well: some BIOSes do not enable C1E until the ACPI processor module
      is loaded. This causes systems to stop working after that point.
      
      To work nicely with C1E enabled machines we use a separate idle
      function, which checks on idle entry whether C1E was enabled in the
      Interrupt Pending Message MSR. This allows us to do timer broadcasting
      for C1E and covers the late enablement of C1E as well.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      aa276e1c
  8. 26 6月, 2008 1 次提交
  9. 10 6月, 2008 1 次提交
  10. 25 5月, 2008 3 次提交
  11. 13 5月, 2008 2 次提交
  12. 26 4月, 2008 1 次提交
  13. 25 4月, 2008 1 次提交
  14. 17 4月, 2008 11 次提交