On Friday 20 July 2012 07:31:47 Marek Vasut wrote:
> Dear Mike Frysinger,
> > On Saturday 07 July 2012 23:08:14 Marek Vasut wrote:
> > > +/*
> > > DEFINE_CACHE_ALIGN_BUFFER() is similar to ALLOC_CACHE_ALIGN_BUFFER,
> > > but it's purpose is to allow allocating aligned buffers outside of
> > > function scope.  Usage of this macro shall be avoided or used with
> > > extreme care! */
> > > +#define DEFINE_CACHE_ALIGN_BUFFER(type, name, size)
> > > + static char __##name[roundup(size * sizeof(type), ARCH_DMA_MINALIGN)]
> > > +                 __aligned(ARCH_DMA_MINALIGN);
> > > + static type *name = (type *)__##name;
> > 
> > how is this any different from doing:
> >     static __u8 foo[1234] __aligned(ARCH_DMA_MINALIGN);
> 
> Does __aligned() align both start of the buffer downwards and end of it
> upwards ?

it guarantees the start is aligned.  i don't believe it does any tail padding.

that said, you've added just 1 consumer, but it uses in function scope, so i 
don't see why you had to define a new helper in the first place.  the existing 
one would work fine shouldn't it ?

you should probably add a const to the 2nd part so gcc is more likely to 
optimize away the storage:
        static type * const name = (type *)__##name;
otherwise older gcc versions will create a pointer to go through rather than 
having things directly access the buffer.

w/out const:
$ readelf -s a.out  | grep foo
    11: 00000000004005d0     8 OBJECT  LOCAL  DEFAULT   13 foo.1592
    12: 0000000000402080    96 OBJECT  LOCAL  DEFAULT   25 __foo.1591
w/const:
$ readelf -s a.out  | grep foo
    11: 0000000000402080    96 OBJECT  LOCAL  DEFAULT   25 __foo.1591
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to