On Mon, 2007-01-15 at 18:01 -0500, Jimi Xenidis wrote:
> > @@ -530,6 +538,33 @@ static ulong boot_of_alloc(ulong size)
> >
> >          pos = pos + i;
> >      }
> > +}
> > +
> > +int boot_of_mem_avail(int pos, ulong *startpage, ulong *endpage)
> If you'd like to hide the bitmap, then perhaps the first arg should
> be a start address and return the address of the next "used" page?

That's an idea. However, I was thinking something more along the lines
of an opaque iterator token.

> > +{
> > +    ulong freebit;
> > +    ulong usedbit;
> > +
> > +    /* find first free page. */
> > +    freebit = find_next_zero_bit(mem_available_pages,
> > MEM_AVAILABLE_PAGES, pos);
> > +    if (freebit >= MEM_AVAILABLE_PAGES) {
> > +        /* We know everything after MEM_AVAILABLE_PAGES is still
> > free. */
> > +        *startpage = MEM_AVAILABLE_PAGES << PAGE_SHIFT;
> > +        *endpage = ~0UL;
> > +        return -1;
> > +    }
> > +    *startpage = freebit << PAGE_SHIFT;
> > +
> > +    /* now find first used page after that. */
> > +    usedbit = find_next_bit(mem_available_pages,
> > MEM_AVAILABLE_PAGES, freebit);
> > +    if (usedbit >= MEM_AVAILABLE_PAGES) {
> > +        /* We know everything after MEM_AVAILABLE_PAGES is still
> > free. */
> > +        *endpage = ~0UL;
> > +        return -1;
> > +    }
> > +    *endpage = usedbit << PAGE_SHIFT;
> 
> I'm not 100% but the code below looks like require that end represent
> a free page so "usedbit - 1"?

It's actually the address of the end of the free memory. For example, if
you have a single page available, let's say at 0x4000, start would be
0x4000 and end would be 0x5000. The length is end - start, or 0x1000.

> > @@ -214,16 +148,22 @@ void memory_init(module_t *mod, int mcou
> >
> >      printk("End of RAM: %luMiB (%luKiB)\n", eomem >> 20, eomem >>
> > 10);
> >
> > -    /* Architecturally the first 4 pages are exception hendlers, we
> > -     * will also be copying down some code there */
> > +    /* Architecturally the first 4 pages are exception handlers. */
> >      heap_start = 4 << PAGE_SHIFT;
> > -    if (oftree < (ulong)_start)
> > -        heap_start = ALIGN_UP(oftree_end, PAGE_SIZE);
> > -
> 
> all the images below are in the bitmap, so can;t you use
> boot_of_mem_avail() to figure this out?

Yes, and that makes me very happy. :) Revised patch follows.

-- 
Hollis Blanchard
IBM Linux Technology Center


_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@lists.xensource.com
http://lists.xensource.com/xen-ppc-devel

Reply via email to