1. 15 7月, 2011 3 次提交
  2. 14 7月, 2011 2 次提交
  3. 13 7月, 2011 2 次提交
    • T
      x86, numa: Implement pfn -> nid mapping granularity check · 1e01979c
      Tejun Heo 提交于
      SPARSEMEM w/o VMEMMAP and DISCONTIGMEM, both used only on 32bit, use
      sections array to map pfn to nid which is limited in granularity.  If
      NUMA nodes are laid out such that the mapping cannot be accurate, boot
      will fail triggering BUG_ON() in mminit_verify_page_links().
      
      On 32bit, it's 512MiB w/ PAE and SPARSEMEM.  This seems to have been
      granular enough until commit 2706a0bf (x86, NUMA: Enable
      CONFIG_AMD_NUMA on 32bit too).  Apparently, there is a machine which
      aligns NUMA nodes to 128MiB and has only AMD NUMA but not SRAT.  This
      led to the following BUG_ON().
      
       On node 0 totalpages: 2096615
         DMA zone: 32 pages used for memmap
         DMA zone: 0 pages reserved
         DMA zone: 3927 pages, LIFO batch:0
         Normal zone: 1740 pages used for memmap
         Normal zone: 220978 pages, LIFO batch:31
         HighMem zone: 16405 pages used for memmap
         HighMem zone: 1853533 pages, LIFO batch:31
       BUG: Int 6: CR2   (null)
            EDI   (null)  ESI 00000002  EBP 00000002  ESP c1543ecc
            EBX f2400000  EDX 00000006  ECX   (null)  EAX 00000001
            err   (null)  EIP c16209aa   CS 00000060  flg 00010002
       Stack: f2400000 00220000 f7200800 c1620613 00220000 01000000 04400000 00238000
                (null) f7200000 00000002 f7200b58 f7200800 c1620929 000375fe   (null)
              f7200b80 c16395f0 00200a02 f7200a80   (null) 000375fe 00000002   (null)
       Pid: 0, comm: swapper Not tainted 2.6.39-rc5-00181-g2706a0bf #17
       Call Trace:
        [<c136b1e5>] ? early_fault+0x2e/0x2e
        [<c16209aa>] ? mminit_verify_page_links+0x12/0x42
        [<c1620613>] ? memmap_init_zone+0xaf/0x10c
        [<c1620929>] ? free_area_init_node+0x2b9/0x2e3
        [<c1607e99>] ? free_area_init_nodes+0x3f2/0x451
        [<c1601d80>] ? paging_init+0x112/0x118
        [<c15f578d>] ? setup_arch+0x791/0x82f
        [<c15f43d9>] ? start_kernel+0x6a/0x257
      
      This patch implements node_map_pfn_alignment() which determines
      maximum internode alignment and update numa_register_memblks() to
      reject NUMA configuration if alignment exceeds the pfn -> nid mapping
      granularity of the memory model as determined by PAGES_PER_SECTION.
      
      This makes the problematic machine boot w/ flatmem by rejecting the
      NUMA config and provides protection against crazy NUMA configurations.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Link: http://lkml.kernel.org/r/20110712074534.GB2872@htj.dyndns.org
      LKML-Reference: <20110628174613.GP478@escobedo.osrc.amd.com>
      Reported-and-Tested-by: NHans Rosenfeld <hans.rosenfeld@amd.com>
      Cc: Conny Seidel <conny.seidel@amd.com>
      Signed-off-by: NH. Peter Anvin <hpa@linux.intel.com>
      1e01979c
    • T
      x86, mm: s/PAGES_PER_ELEMENT/PAGES_PER_SECTION/ · d0ead157
      Tejun Heo 提交于
      DISCONTIGMEM on x86-32 implements pfn -> nid mapping similarly to
      SPARSEMEM; however, it calls each mapping unit ELEMENT instead of
      SECTION.  This patch renames it to SECTION so that PAGES_PER_SECTION
      is valid for both DISCONTIGMEM and SPARSEMEM.  This will be used by
      the next patch to implement mapping granularity check.
      
      This patch is trivial constant rename.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Link: http://lkml.kernel.org/r/20110712074422.GA2872@htj.dyndns.org
      Cc: Hans Rosenfeld <hans.rosenfeld@amd.com>
      Signed-off-by: NH. Peter Anvin <hpa@linux.intel.com>
      d0ead157
  4. 08 7月, 2011 4 次提交
  5. 07 7月, 2011 6 次提交
  6. 06 7月, 2011 10 次提交
  7. 05 7月, 2011 2 次提交
  8. 04 7月, 2011 2 次提交
  9. 01 7月, 2011 1 次提交
    • T
      x86-32, NUMA: Fix boot regression caused by NUMA init unification on highmem machines · a26474e8
      Tejun Heo 提交于
      During 32/64 NUMA init unification, commit 797390d8 ("x86-32,
      NUMA: use sparse_memory_present_with_active_regions()") made
      32bit mm init call memory_present() automatically from
      active_regions instead of leaving it to each NUMA init path.
      
      This commit description is inaccurate - memory_present() calls
      aren't the same for flat and numaq.  After the commit,
      memory_present() is only called for the intersection of e820 and
      NUMA layout.  Before, on flatmem, memory_present() would be
      called from 0 to max_pfn.  After, it would be called only on the
      areas that e820 indicates to be populated.
      
      This is how x86_64 works and should be okay as memmap is allowed
      to contain holes; however, x86_32 DISCONTIGMEM is missing
      early_pfn_valid(), which makes memmap_init_zone() assume that
      memmap doesn't contain any hole.  This leads to the following
      oops if e820 map contains holes as it often does on machine with
      near or more 4GiB of memory by calling pfn_to_page() on a pfn
      which isn't mapped to a NUMA node, a reported by Conny Seidel:
      
        BUG: unable to handle kernel paging request at 000012b0
        IP: [<c1aa13ce>] memmap_init_zone+0x6c/0xf2
        *pdpt =3D 0000000000000000 *pde =3D f000eef3f000ee00
        Oops: 0000 [#1] SMP
        last sysfs file:
        Modules linked in:
      
        Pid: 0, comm: swapper Not tainted 2.6.39-rc5-00164-g797390d8 #1 To Be Filled By O.E.M. To Be Filled By O.E.M./E350M1
        EIP: 0060:[<c1aa13ce>] EFLAGS: 00010012 CPU: 0
        EIP is at memmap_init_zone+0x6c/0xf2
        EAX: 00000000 EBX: 000a8000 ECX: 000a7fff EDX: f2c00b80
        ESI: 000a8000 EDI: f2c00800 EBP: c19ffe54 ESP: c19ffe34
         DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
        Process swapper (pid: 0, ti=3Dc19fe000 task=3Dc1a07f60 task.ti=3Dc19fe000)
        Stack:
         00000002 00000000 0023f000 00000000 10000000 00000a00 f2c00000 f2c00b58
         c19ffeb0 c1a80f24 000375fe 00000000 f2c00800 00000800 00000100 00000030
         c1abb768 0000003c 00000000 00000000 00000004 00207a02 f2c00800 000375fe
        Call Trace:
         [<c1a80f24>] free_area_init_node+0x358/0x385
         [<c1a81384>] free_area_init_nodes+0x420/0x487
         [<c1a79326>] paging_init+0x114/0x11b
         [<c1a6cb13>] setup_arch+0xb37/0xc0a
         [<c1a69554>] start_kernel+0x76/0x316
         [<c1a690a8>] i386_start_kernel+0xa8/0xb0
      
      This patch fixes the bug by defining early_pfn_valid() to be the
      same as pfn_valid() when DISCONTIGMEM.
      Reported-bisected-and-tested-by: NConny Seidel <conny.seidel@amd.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Cc: hans.rosenfeld@amd.com
      Cc: Christoph Lameter <cl@linux.com>
      Cc: Conny Seidel <conny.seidel@amd.com>
      Link: http://lkml.kernel.org/r/20110628094107.GB3386@htj.dyndns.orgSigned-off-by: NIngo Molnar <mingo@elte.hu>
      a26474e8
  10. 30 6月, 2011 5 次提交
  11. 29 6月, 2011 3 次提交