1. 08 7月, 2008 5 次提交
    • 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: modify Kconfig to allow up to 4096 cpus · 1184dc2f
      Mike Travis 提交于
        * Increase the limit of NR_CPUS to 4096 and introduce a boolean
          called "MAXSMP" which when set (e.g. "allyesconfig"), will set
          NR_CPUS = 4096 and NODES_SHIFT = 9 (512).
      
        * Changed max setting for NODES_SHIFT from 15 to 9 to accurately
          reflect the real limit.
      Signed-off-by: NMike Travis <travis@sgi.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      1184dc2f
    • M
      x86: fix remove cpu_pda table patch · 7496b606
      Mike Travis 提交于
      Mike Travis wrote:
      > Ingo Molnar wrote:
      >> * Mike Travis <travis@sgi.com> wrote:
      >>
      >>> [Ingo - please replace "PATCH 07/11" with this one.]
      
      > >>>     *	Remove 544k bytes from the kernel by removing the boot_cpu_pda
      > >>> 	array from the data section and allocating it during startup.
      
      >>> 	Fixed panic in setup_per_cpu_areas when HOTPLUG_CPU not set.
      >>>
      >>> For inclusion into sched-devel/latest tree.
      >> sched-devel.git randconfig testing found another crash with your queue:
      >>
      >> [    0.111060] Brought up 1 CPUs
      >> [    0.111986] Total of 1 processors activated (4022.73 BogoMIPS).
      >> [    0.112987] Testing NMI watchdog ... <1>BUG: unable to handle kernel NULL pointer dereference at 0000000000000040
      >> [    0.114982] IP: [<ffffffff8180d4a0>] check_nmi_watchdog+0xb0/0x210
      >> [    0.114982] PGD 0
      >> [    0.114982] Oops: 0000 [1] SMP
      >> [    0.114982] CPU 0
      >> [............]
      >>
      >>  http://redhat.com/~mingo/misc/config-Mon_Apr_28_23_25_25_CEST_2008.bad
      >>  http://redhat.com/~mingo/misc/log-Mon_Apr_28_23_25_25_CEST_2008.bad
      >>
      >> 	Ingo
      >
      > Hi Ingo,
      >
      > I need a bit more information on your hardware configuration.  Building a
      > kernel with the above config file started up fine on both the Intel and AMD
      > boxes.
      >
      > Based on the above output it looks like it might be a UP machine?
      ...
      
      Ok, I think I found it.  In check_nmi_watchdog():
      
              for (cpu = 0; cpu < NR_CPUS; cpu++)
                      prev_nmi_count[cpu] = cpu_pda(cpu)->__nmi_count;
      
      As I mentioned it works fine on both of my systems so could you try it out?
      
      Thanks!
      Mike
      --
      
        * Change function check_nmi_watchdog() to use nr_cpu_ids instead of NR_CPUS.
      
      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>
      7496b606
    • Y
      x86: don't call pxm_to_node again · dbb6152e
      Yinghai Lu 提交于
      also make bus_numa work even if ACPI_NUMA is not defined.
      
      don't call pxm_to_node again, and use node directly.
      Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      dbb6152e
    • Y
      x86: make dev_to_node return online node · b755de8d
      Yinghai Lu 提交于
      a numa system (with multi HT chains) may return node without ram. Aka it
      is not online. Try to get an online node, otherwise return -1.
      Signed-off-by: NYinghai Lu <yinghai.lu@sun.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      b755de8d
  2. 07 7月, 2008 3 次提交
  3. 06 7月, 2008 13 次提交
  4. 05 7月, 2008 19 次提交