lkml.org 
[lkml]   [2009]   [Mar]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: Regression - locking (all from 2.6.28)
    From
    Date
    On Fri, 2009-03-06 at 08:52 -0800, Dave Hansen wrote:
    > On Fri, 2009-03-06 at 16:40 +0000, Catalin Marinas wrote:
    > > It seems that node_start_pfn() isn't present on all the architectures. I
    > > ended up with something like below:
    > >
    > > + /* struct page scanning for each node */
    > > + for_each_online_node(i) {
    > > + pg_data_t *pgdat = NODE_DATA(i);
    > > + unsigned long start_pfn = pgdat->node_start_pfn;
    > > + unsigned long end_pfn = start_pfn +
    > > + pgdat->node_spanned_pages - 1;
    > > + unsigned long pfn;
    > > +
    > > + for (pfn = start_pfn; pfn < end_pfn; pfn++) {
    > > + struct page *page;
    > > +
    > > + if (!pfn_valid(pfn))
    > > + continue;
    > > + page = pfn_to_page(pfn);
    > > + /* only scan if page is in use */
    > > + if (page_count(page) == 0)
    > > + continue;
    > > + scan_block(page, page + 1, NULL);
    > > + }
    > > + }
    >
    > What does scan_block() actually scan? Is that second argument
    > inclusive?

    No, it's exclusive. In the above case, it just scans a struct page at
    the given pointer.

    > I think you will miss scanning the contents of the last 'struct page' if
    > you do it this way because of the -1 you do to end_pfn.

    Fixed.

    > > Are the pgdat->node_start_pfn and pgdat->node_spanned_pages always
    > > valid? Thanks.
    >
    > The variables themselves? I'm sure there's a window in early boot where
    > they aren't valid, but other than that they should be OK unless you're
    > int the middle of a hotplug operation.
    >
    > See pgdat_resize_(un)lock() in include/linux/memory_hotplug.h.

    I wouldn't hold a lock for that long. It's not really critical to scan
    all the page structures at a time as there are subsequent scans as well,
    so some can be missed.

    --
    Catalin



    \
     
     \ /
      Last update: 2009-03-06 18:21    [W:0.026 / U:1.508 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site