lkml.org 
[lkml]   [2006]   [Sep]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    SubjectRe: x86_64 account-for-memmap patch in 2.6.18-rc4-mm3 doesn't boot.
    From
    On (01/09/06 20:24), Paul Jackson didst pronounce:
    > > That is a bit of a sickener. It may be worth getting your good lab tech
    > > to check if there is a configuration setting in the hardware for
    > > simulating console output before you make the trip.
    >
    > Apparently my lab setup simply lacks correct flow control on the serial
    > console line. I hacked the 8250 serial driver in my kernel to put a one
    > msec delay between each character output, and it no longer drops
    > console output during boot.
    >

    Nice work.

    > > > This may take a day or three to yield results, unless I get lucky.
    > > >
    > >
    > > I have Keith's problem with reserve-based-hot-add to keep me occupied in
    > > the meantime. Whenever you get the chance will be fine. Thanks a lot
    >
    > Ok, below is the console output for one of these crashes.
    >
    > This output is missing the first couple dozen lines commencing with
    > grub announcing it is loading my kernel, as those lines seem to go via
    > a different serial driver that I didn't chase down to hack. Those
    > initial lines were still dropping lotsa chars. If you need those
    > initial lines bad, holler, and I can probably hack something to get
    > them to show up.
    >

    I could do with those lines, but I believe there was enough information
    printed to determine why it failed to boot. I've attached a patch that
    should boot the machine and assuming it works, I just need the output of
    dmesg.

    > By the way, the crash continues to happen 100% with the patch:
    >
    > patches/account-for-memmap-and-optionally-the-kernel-image-as-holes.patch
    >

    Not suprising considering what the min_free_kbytes is from this output!

    > Node 0 DMA free:1616kB min:143085642166168kB low:178857052707708kB high:214628463249252kB active:0kB inactive:0kB present:18446744073709538996kB pages_scanned:0 all_unreclaimable? yes
    > lowmem_reserve[]: 0 2026 2026
    > Node 0 DMA32 free:2036328kB min:5776kB low:7220kB high:8664kB active:0kB inactive:0kB present:2075356kB pages_scanned:0 all_unreclaimable? no
    >

    I believe it is because memmap was calculated to be bigger than it
    possibly could be. Can you try booting the following patch with
    loglevel=8 and send me the dmesg output if it boots please? Thanks

    diff -rup -X /usr/src/patchset-0.6/bin//dontdiff linux-2.6.18-rc4-mm3-clean/mm/page_alloc.c linux-2.6.18-rc4-mm3-fix_accountmemmap/mm/page_alloc.c
    --- linux-2.6.18-rc4-mm3-clean/mm/page_alloc.c 2006-08-28 15:05:30.000000000 +0100
    +++ linux-2.6.18-rc4-mm3-fix_accountmemmap/mm/page_alloc.c 2006-09-04 10:36:04.000000000 +0100
    @@ -2373,7 +2373,9 @@ unsigned long __meminit account_memmap(s
    if (zone_index == memmap_zone_idx(pgdat->node_mem_map)) {
    pages = pgdat->node_spanned_pages;
    pages = (pages * sizeof(struct page)) >> PAGE_SHIFT;
    - printk(KERN_DEBUG "%lu pages used for memmap\n", pages);
    + printk(KERN_DEBUG
    + " %s zone: %lu pages used for memmap\n",
    + zone_names[zone_index], pages);
    }
    return pages;
    }
    @@ -2411,7 +2413,9 @@ unsigned long account_memmap(struct pgli
    }

    pages >>= PAGE_SHIFT;
    - printk(KERN_DEBUG "%lu pages used for SPARSE memmap\n", pages);
    + printk(KERN_DEBUG
    + " %s zone: %lu pages used for SPARSEMEM memmap\n",
    + zone_names[zone_index], pages);
    return pages;
    }
    #endif
    @@ -2437,17 +2441,24 @@ static void __meminit free_area_init_cor

    for (j = 0; j < MAX_NR_ZONES; j++) {
    struct zone *zone = pgdat->node_zones + j;
    - unsigned long size, realsize;
    + unsigned long size, realsize, memmap_size;

    size = zone_spanned_pages_in_node(nid, j, zones_size);
    realsize = size - zone_absent_pages_in_node(nid, j,
    zholes_size);

    - realsize -= account_memmap(pgdat, j);
    + /* Account for the size of mem_map */
    + memmap_size = account_memmap(pgdat, j);
    + if (realsize >= memmap_size)
    + realsize -= memmap_size;
    + else
    + printk(KERN_WARNING "memmap_size of %lu exceeds %lu\n",
    + memmap_size, realsize);
    +
    /* Account for reserved DMA pages */
    if (j == ZONE_DMA && realsize > dma_reserve) {
    realsize -= dma_reserve;
    - printk(KERN_DEBUG "%lu pages DMA reserved\n",
    + printk(KERN_DEBUG " DMA zone: %lu pages reserved\n",
    dma_reserve);
    }

    --
    VGER BF report: U 0.499996
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-09-04 11:47    [W:0.029 / U:178.500 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site