ron minnich <[EMAIL PROTECTED]> writes:

> On Tue, 9 Mar 2004, YhLu wrote:
> 
> > I mean
> > 
> >         /* Get the base address */
> >         base = resource->base;
> >         /* Get the resource alignment */
> >         align = 1UL << resource->align;
> > 
> >         /* Get the limit (rounded up) */
> >         limit = base + ((resource->size + align - 1UL) & ~(align - 1UL))
> > -1UL;
> 
> I am thinking now about what you said. Granularity is the units of
> allocation. Alignment is the alignment of the data.
> 
> Examples: 64 byte granularity, 32-byte alignment, you can see that 
>           addresses of 32, 64, 96, etc. are acceptable. 
>           64 byte granularity, 64 byte alignment, only addresses of
>           64, 128, ... are acceptable.
> 
> If memory serves, behind a bridge, the memory space granularity is 16 bits 
> (or is it 20? memory fails). Alignment is more or less the size of the 
> resource. 
> 
> Looking at quadrics, the resource is 28 bits, so that will have to be the 
> alignment, and granularity is 20 bits. 
> 
> So the expression above is wrong, I think you are correct. It will work in 
> many cases but fail in some. I think it should  be this:
> 
>    limit = base + ((resource->size + gran - 1UL) & ~(gran - 1UL))  -1UL
> 
> as you already said.
> 
> I.e. take the base, add a size rounded up to gran, and add it to base.

That is right.   I feel quite silly that is the code that is sitting in
my tree and I feel for not getting it pushed out earlier.   I'm going
to many directions at once or something like that.

It has the additional comment:

        /* Get the resource granularity */
        gran = 1UL << resource->gran;

        /* For a non bridge resource granularity and alignment are the same.
         * For a bridge resource align is the largest needed alignment below
         * the bridge.  While the granularity is simply how many low bits of the
         * address cannot be set.
         */
        
        /* Get the limit (rounded up) */
        limit = base + ((resource->size + gran - 1UL) & ~(gran - 1UL)) -1UL;

I will get this committed shortly.  At least I chose sane names so this
could be reasoned out.

Eric
_______________________________________________
Linuxbios mailing list
[EMAIL PROTECTED]
http://www.clustermatic.org/mailman/listinfo/linuxbios

Reply via email to