[ofw] Re: [ofa-general] [RFC] 3/5: IB ACM: libibacm

Ira Weiny weiny2 at llnl.gov
Fri Sep 18 17:05:39 PDT 2009


On Fri, 18 Sep 2009 17:23:36 -0600
Jason Gunthorpe <jgunthorpe at obsidianresearch.com> wrote:

> On Fri, Sep 18, 2009 at 03:28:48PM -0700, Ira Weiny wrote:
> 
> > One is for static defines CL_NTOH and the other is for variables at
> > run time.  I found this code in Linux.
> 
> Thats gross, and is exactly why you don't do this yourself...
> 
> bswap64/32/16 do this all automatically. ntohl also do it and are more
> portable.
> 
> from glibc:
> 
> #   define ntohl(x)     __bswap_32 (x)
> #define bswap_32(x) __bswap_32 (x)
> #  define __bswap_32(x) \
>      (__extension__                                                           \
>       ({ register unsigned int __v, __x = (x);                                \
>          if (__builtin_constant_p (__x))                                      \
>            __v = __bswap_constant_32 (__x);                                   \
>          else                                                                 \
>            __asm__ ("bswap %0" : "=r" (__v) : "0" (__x));                     \
>          __v; }))
> 
> 
> I'd say just use the ntohl, ntohs, and bswap64 macros directly and
> Window can provide headers with whatever it needs instead. They are
> already doing this..

I agree but ntohl etc do not seem to work for the macros which are defined.

osm_sa_mad_ctrl.c: In function 'sa_mad_ctrl_process':
osm_sa_mad_ctrl.c:140: error: case label does not reduce to an integer constant
...
	switch (p_sa_mad->attr_id) {
	case IB_MAD_ATTR_CLASS_PORT_INFO:
...

>From ib_types.h

#define IB_MAD_ATTR_CLASS_PORT_INFO			(CL_HTON16(0x0001))

Thus the 

#define __bswap_constant_16(x) \
     ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))

in bits/byteswap.h

Ira

> 
> Ditto for stdint.h and stdbool.h. Those are C99 headers, just use them.
> 
> Jason


-- 
Ira Weiny
Math Programmer/Computer Scientist
Lawrence Livermore National Lab
925-423-8008
weiny2 at llnl.gov



More information about the general mailing list