1. 08 7月, 2008 7 次提交
  2. 10 6月, 2008 2 次提交
  3. 04 6月, 2008 2 次提交
  4. 03 6月, 2008 10 次提交
  5. 31 5月, 2008 2 次提交
  6. 20 5月, 2008 2 次提交
    • A
      x86: cope with no remap space being allocated for a numa node · 84d6bd0e
      Andy Whitcroft 提交于
      When allocating the pgdat's for numa nodes on x86_32 we attempt to place
      them in the numa remap space for that node.  However should the node not
      have any remap space allocated (such as due to having non-ram pages in
      the remap location in the node) then we will incorrectly place the pgdat
      at zero.  Check we have remap available, falling back to node 0 memory
      where we do not.
      Signed-off-by: NAndy Whitcroft <apw@shadowen.org>
      Acked-by: NMel Gorman <mel@csn.ul.ie>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      84d6bd0e
    • A
      x86: reinstate numa remap for SPARSEMEM on x86 NUMA systems · b9ada428
      Andy Whitcroft 提交于
      Recent kernels have been panic'ing trying to allocate memory early in boot,
      in __alloc_pages:
      
        BUG: unable to handle kernel paging request at 00001568
        IP: [<c10407b6>] __alloc_pages+0x33/0x2cc
        *pdpt = 00000000013a5001 *pde = 0000000000000000
        Oops: 0000 [#1] SMP
        Modules linked in:
      
        Pid: 1, comm: swapper Not tainted (2.6.25 #78)
        EIP: 0060:[<c10407b6>] EFLAGS: 00010246 CPU: 0
        EIP is at __alloc_pages+0x33/0x2cc
        EAX: 00001564 EBX: 000412d0 ECX: 00001564 EDX: 000005c3
        ESI: f78012a0 EDI: 00000001 EBP: 00001564 ESP: f7871e50
        DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
        Process swapper (pid: 1, ti=f7870000 task=f786f670 task.ti=f7870000)
        Stack: 00000000 f786f670 00000010 00000000 0000b700 000412d0 f78012a0 00000001
               00000000 c105b64d 00000000 000412d0 f78012a0 f7803120 00000000 c105c1c5
               00000010 f7803144 000412d0 00000001 f7803130 f7803120 f78012a0 00000001
        Call Trace:
         [<c105b64d>] kmem_getpages+0x94/0x129
         [<c105c1c5>] cache_grow+0x8f/0x123
         [<c105c689>] ____cache_alloc_node+0xb9/0xe4
         [<c105c999>] kmem_cache_alloc_node+0x92/0xd2
         [<c1018929>] build_sched_domains+0x536/0x70d
         [<c100b63c>] do_flush_tlb_all+0x0/0x3f
         [<c100b63c>] do_flush_tlb_all+0x0/0x3f
         [<c10572d6>] interleave_nodes+0x23/0x5a
         [<c105c44f>] alternate_node_alloc+0x43/0x5b
         [<c1018b47>] arch_init_sched_domains+0x46/0x51
         [<c136e85e>] kernel_init+0x0/0x82
         [<c137ac19>] sched_init_smp+0x10/0xbb
         [<c136e8a1>] kernel_init+0x43/0x82
         [<c10035cf>] kernel_thread_helper+0x7/0x10
      
      Debugging this showed that the NODE_DATA() for nodes other than node 0
      were all NULL.  Tracing this back showed that the NODE_DATA() pointers
      were being initialised to each nodes remap space.  However under
      SPARSEMEM remap is disabled which leads to the pgdat's being placed
      incorrectly at kernel virtual address 0.  Leading to the panic when
      attempting to allocate memory from these nodes.
      
      Numa remap was disabled in the commit below.  This occured while fixing
      problems triggered when attempting to boot x86_32 NUMA SPARSEMEM kernels
      on non-numa hardware.
      
      	x86: make NUMA work on 32-bit
      	commit 1b000a5d
      
      The real problem is believed to be related to other alignment issues in
      the regions blocked out from the bootmem allocator for small memory
      systems, and has been fixed separately.  Therefore re-enable remap for
      SPARSMEM, which fixes pgdat allocation issues.  Testing confirms that
      SPARSMEM NUMA kernels will boot correctly with this part of the change
      reverted.
      Signed-off-by: NAndy Whitcroft <apw@shadowen.org>
      Acked-by: NMel Gorman <mel@csn.ul.ie>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      b9ada428
  7. 05 5月, 2008 1 次提交
    • T
      x86: undo visws/numaq build changes · 48b83d24
      Thomas Gleixner 提交于
      arch/x86/pci/Makefile_32 has a nasty detail. VISWS and NUMAQ build
      override the generic pci-y rules. This needs a proper cleanup, but
      that needs more thoughts. Undo
      
      commit 895d3093
          x86: numaq fix
          do not override the existing pci-y rule when adding visws or
          numaq rules.
      
      There is also a stupid init function ordering problem vs. acpi.o
      
      Add comments to the Makefile to avoid tripping over this again.
      
      Remove the srat stub code in discontig_32.c to allow a proper NUMAQ
      build.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      48b83d24
  8. 20 4月, 2008 1 次提交
  9. 17 4月, 2008 1 次提交
  10. 27 3月, 2008 1 次提交
    • Y
      x86: fix trim mtrr not to setup_memory two times · 76c32418
      Yinghai Lu 提交于
      we could call find_max_pfn() directly instead of setup_memory() to get
      max_pfn needed for mtrr trimming.
      
      otherwise setup_memory() is called two times... that is duplicated...
      
      [ mingo@elte.hu: both Thomas and me simulated a double call to
        setup_bootmem_allocator() and can confirm that it is a real bug
        which can hang in certain configs. It's not been reported yet but
        that is probably due to the relatively scarce nature of
        MTRR-trimming systems. ]
      Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      76c32418
  11. 08 2月, 2008 1 次提交
    • B
      Introduce flags for reserve_bootmem() · 72a7fe39
      Bernhard Walle 提交于
      This patchset adds a flags variable to reserve_bootmem() and uses the
      BOOTMEM_EXCLUSIVE flag in crashkernel reservation code to detect collisions
      between crashkernel area and already used memory.
      
      This patch:
      
      Change the reserve_bootmem() function to accept a new flag BOOTMEM_EXCLUSIVE.
      If that flag is set, the function returns with -EBUSY if the memory already
      has been reserved in the past.  This is to avoid conflicts.
      
      Because that code runs before SMP initialisation, there's no race condition
      inside reserve_bootmem_core().
      
      [akpm@linux-foundation.org: coding-style fixes]
      [akpm@linux-foundation.org: fix powerpc build]
      Signed-off-by: NBernhard Walle <bwalle@suse.de>
      Cc: <linux-arch@vger.kernel.org>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Vivek Goyal <vgoyal@in.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      72a7fe39
  12. 30 1月, 2008 3 次提交
    • M
      x86: make NUMA work on 32-bit · 1b000a5d
      Mel Gorman 提交于
      The DISCONTIG memory model on x86 32 bit uses a remap allocator early
      in boot. The objective is that portions of every node are mapped in to
      the kernel virtual area (KVA) in place of ZONE_NORMAL so that node-local
      allocations can be made for pgdat and mem_map structures.
      
      With SPARSEMEM, the amount that is set aside is insufficient for all the
      mem_maps to be allocated. During the boot process, it falls back to using
      the bootmem allocator. This breaks assumptions that SPARSEMEM makes about
      the layout of the mem_map in memory and results in a VM_BUG_ON triggering
      due to pfn_to_page() returning garbage values.
      
      This patch only enables the remap allocator for use with DISCONTIG.
      
      Without SRAT support, a compile-error occurs because ACPI table parsing
      functions are only available in x86-64. This patch also adds no-op stubs
      and prints a warning message. What likely needs to be done is sharing
      the table parsing functions between 32 and 64 bit if they are
      compatible.
      Signed-off-by: NMel Gorman <mel@csn.ul.ie>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      1b000a5d
    • M
      x86: make NUMA work on 32-bit again · bac4894d
      Mel Gorman 提交于
      On 32-bit NUMA, the memmap representing struct pages on each node is
      allocated from node-local memory if possible. As only node-0 has memory from
      ZONE_NORMAL, the memmap must be mapped into low memory. This is done by
      reserving space in the Kernel Virtual Area (KVA) for the memmap belonging
      to other nodes by taking pages from the end of ZONE_NORMAL and remapping
      the other nodes memmap into those virtual addresses. The node boundaries
      are then adjusted so that the region of pages is not used and it is marked
      as reserved in the bootmem allocator.
      
      This reserved portion of the KVA is PMD aligned althought
      strictly speaking that requirement could be lifted (see thread at
      http://lkml.org/lkml/2007/8/24/220). The problem is that when aligned, there
      may be a portion of ZONE_NORMAL at the end that is not used for memmap and
      does not have an initialised memmap nor is it marked reserved in the bootmem
      allocator. Later in the boot process, these pages are freed and a storm of
      Bad page state messages result.
      
      This patch marks these pages reserved that are wasted due to alignment
      in the bootmem allocator so they are not accidently freed. It is worth
      noting that memory from node-0 is wasted where it could have been put into
      ZONE_HIGHMEM on NUMA machines. Worse, the KVA is always reserved from the
      location of real memory even when there is plenty of spare virtual address
      space.
      
      This patch also makes sure that reserve_bootmem() is not called with a
      0-length size in numa_kva_reserve().  When this happens, it usually means
      that a kernel built for Summit is being booted on a normal machine. The
      resulting BUG_ON() is misleading so it is caught here.
      Signed-off-by: NMel Gorman <mel@csn.ul.ie>
      Signed-off-by: NAndy Whitcroft <apw@shadowen.org>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      bac4894d
    • H
      i386: handle an initrd in highmem (version 2) · cf8fa920
      H. Peter Anvin 提交于
      The boot protocol has until now required that the initrd be located in
      lowmem, which makes the lowmem/highmem boundary visible to the boot
      loader.  This was exported to the bootloader via a compile-time
      field.  Unfortunately, the vmalloc= command-line option breaks this
      part of the protocol; instead of adding yet another hack that affects
      the bootloader, have the kernel relocate the initrd down below the
      lowmem boundary inside the kernel itself.
      
      Note that this does not rely on HIGHMEM being enabled in the kernel.
      Signed-off-by: NH. Peter Anvin <hpa@zytor.com>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      cf8fa920
  13. 30 10月, 2007 1 次提交
  14. 20 10月, 2007 1 次提交
  15. 18 10月, 2007 1 次提交
  16. 17 10月, 2007 1 次提交
  17. 11 10月, 2007 2 次提交
  18. 16 5月, 2007 1 次提交