On Thu, 2007-08-02 at 18:39 +0100, Andy Whitcroft wrote:
> Dave Hansen wrote:
> > On Thu, 2007-08-02 at 10:25 +0100, Andy Whitcroft wrote:
> >> +unsigned long __meminit vmemmap_section_start(struct page *page)
> >> +{
> >> +       unsigned long offset = ((unsigned long)page) -
> >> +                                               ((unsigned 
> >> long)(vmemmap)); 
> > 
> > Isn't this basically page_to_pfn()?  Can we use it here?
> 
> No, as that does direct subtraction of the two pointers.  Our 'page'
> here is not guarenteed to be aligned even to a struct page boundary.

Are you saying that it isn't PAGE_MASK (((unsigned long)page)&PAGE_MASK
== page) aligned.  Or, that it isn't sizeof(struct page) aligned?

> +unsigned long __meminit vmemmap_section_start(struct page *page)
...
> @@ -204,7 +209,7 @@ int __meminit vmemmap_populated(unsigned long start, int 
> page_size)
>         unsigned long end = start + page_size;
> 
>         for (; start < end; start += (PAGES_PER_SECTION * sizeof(struct 
> page)))
> -               if (pfn_valid(VMM_SECTION_PAGE(start)))
> +               if (pfn_valid(vmemmap_section_start(start)))
>                         return 1;

If "start" is an "unsigned long", why is it being passed into a function
that takes a "struct page"?

I think the types are confusing me a bit.

-- Dave

-
To unsubscribe from this list: send the line "unsubscribe linux-arch" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to