[ofa-general] [PATCH 1/3 v2] libibmad. 2nd revision for WinOF portablity.
Sasha Khapyorsky
sashak at voltaire.com
Tue Jan 20 09:43:13 PST 2009
Hi Arlin,
On 11:50 Sat 17 Jan , Arlin Davis wrote:
>
>
> Ok, here is revision 2 of the libibmad WinOF portability patches. I eliminated all #ifdef _WIN32
> crap and tried to limit the changes by adding os dependent file mad_osd.h. With these changes we
> could share the same code base for both OFED and WinOF. Please review and consider accepting this
> patch set.
The patches (I tried to check only 1 and 2) are malformed - whitespaces
are mangled (in 2), also long lines are broken. Please check that it is
appliable with 'git am'.
>
> [PATCH 1/3] libibmad: add os dependent definitions.
> [PATCH 2/3] field.c remove c99 definitions, better portability with WinOF.
Is it possible to preserve c99 stuff? It improves code maintainability
a lot and as far as I remember it is what was considered in previous
discussions (about infiniband-diags porting to WinOF).
> [PATCH 3/3] Minor changes to allow portability to WinOF
>
> infiniband/mad_osd.h added to provide support for os specific defintions
> for portability. With these changes, WinOF can pull directly from OFED
> git tree and share a common code base with minimal changes to mad.h and
> source tree.
>
> mad.h modifications include MAD_EXPORT for export declarations where
> appropriate. Datatype llu changed to ULL for 64bit constants.
>
> makefile.am modified to include new linux version of mad_osd.h
>
> Signed-off-by: Arlin Davis <ardavis at ichips.intel.com>
> ---
> libibmad/Makefile.am | 7 +-
> libibmad/include/infiniband/mad.h | 120 ++++++++++++++++-----------------
> libibmad/include/infiniband/mad_osd.h | 48 +++++++++++++
> 3 files changed, 109 insertions(+), 66 deletions(-)
> create mode 100644 libibmad/include/infiniband/mad_osd.h
>
> diff --git a/libibmad/Makefile.am b/libibmad/Makefile.am
> index beae1a4..8dea157 100644
> --- a/libibmad/Makefile.am
> +++ b/libibmad/Makefile.am
> @@ -1,7 +1,7 @@
>
> SUBDIRS = .
>
> -INCLUDES = -I$(srcdir)/include/infiniband -I$(includedir)
> +INCLUDES = -I$(srcdir)/include -I$(srcdir)/include/infiniband -I$(includedir)
Something not related to porting...
I would rather replace all '#include <mad.h>' occurrences to
'#include <infiniband/mad.h>' and then use '-I$(srcdir)/include' in
INCLUDES definition.
>
> lib_LTLIBRARIES = libibmad.la
>
> @@ -23,9 +23,10 @@ libibmad_la_DEPENDENCIES = $(srcdir)/src/libibmad.map
>
> libibmadincludedir = $(includedir)/infiniband
>
> -libibmadinclude_HEADERS = $(srcdir)/include/infiniband/mad.h
> +libibmadinclude_HEADERS = $(srcdir)/include/infiniband/mad.h $(srcdir)/include/infiniband/mad_osd.h
>
> -EXTRA_DIST = $(srcdir)/include/infiniband/mad.h libibmad.spec.in libibmad.spec \
> +EXTRA_DIST = $(srcdir)/include/infiniband/mad.h $(srcdir)/include/infiniband/mad_osd.h \
> + libibmad.spec.in libibmad.spec \
> $(srcdir)/src/libibmad.map libibmad.ver autogen.sh
And if file is listed in library_HEADERS it will be distributed, so no
need to list it in EXTRA_DIST (of course mad.h should be remove too).
>
> dist-hook:
> diff --git a/libibmad/include/infiniband/mad.h b/libibmad/include/infiniband/mad.h
> index 0a962c0..fe607a7 100644
> --- a/libibmad/include/infiniband/mad.h
> +++ b/libibmad/include/infiniband/mad.h
> @@ -33,13 +33,7 @@
> #ifndef _MAD_H_
> #define _MAD_H_
>
> -#include <stdint.h>
> -#include <string.h>
> -#include <stdlib.h>
> -#include <stdio.h>
> -#include <sys/types.h>
> -#include <unistd.h>
> -#include <byteswap.h>
> +#include <infiniband/mad_osd.h>
Why should we remove all header files here? Some of them (such as
stdio.h) are not really system dependent.
Sasha
>
> #ifdef __cplusplus
> # define BEGIN_C_DECLS extern "C" {
> @@ -52,7 +46,7 @@
> BEGIN_C_DECLS
>
> #define IB_SUBNET_PATH_HOPS_MAX 64
> -#define IB_DEFAULT_SUBN_PREFIX 0xfe80000000000000llu
> +#define IB_DEFAULT_SUBN_PREFIX 0xfe80000000000000ULL
> #define IB_DEFAULT_QP1_QKEY 0x80010000
>
> #define IB_MAD_SIZE 256
> @@ -627,10 +621,10 @@ enum {
> /******************************************************************************/
>
> /* portid.c */
> -char * portid2str(ib_portid_t *portid);
> -int portid2portnum(ib_portid_t *portid);
> -int str2drpath(ib_dr_path_t *path, char *routepath, int drslid, int drdlid);
> -char * drpath2str(ib_dr_path_t *path, char *dstr, size_t dstr_size);
> +MAD_EXPORT char * portid2str(ib_portid_t *portid);
> +MAD_EXPORT int portid2portnum(ib_portid_t *portid);
> +MAD_EXPORT int str2drpath(ib_dr_path_t *path, char *routepath, int drslid, int drdlid);
> +MAD_EXPORT char * drpath2str(ib_dr_path_t *path, char *dstr, size_t dstr_size);
>
> static inline int
> ib_portid_set(ib_portid_t *portid, int lid, int qp, int qkey)
> @@ -644,44 +638,44 @@ ib_portid_set(ib_portid_t *portid, int lid, int qp, int qkey)
> }
>
> /* fields.c */
> -uint32_t mad_get_field(void *buf, int base_offs, int field);
> -void mad_set_field(void *buf, int base_offs, int field, uint32_t val);
> +MAD_EXPORT uint32_t mad_get_field(void *buf, int base_offs, int field);
> +MAD_EXPORT void mad_set_field(void *buf, int base_offs, int field, uint32_t val);
> /* field must be byte aligned */
> -uint64_t mad_get_field64(void *buf, int base_offs, int field);
> -void mad_set_field64(void *buf, int base_offs, int field, uint64_t val);
> -void mad_set_array(void *buf, int base_offs, int field, void *val);
> -void mad_get_array(void *buf, int base_offs, int field, void *val);
> -void mad_decode_field(uint8_t *buf, int field, void *val);
> -void mad_encode_field(uint8_t *buf, int field, void *val);
> -int mad_print_field(int field, const char *name, void *val);
> -char *mad_dump_field(int field, char *buf, int bufsz, void *val);
> -char *mad_dump_val(int field, char *buf, int bufsz, void *val);
> +MAD_EXPORT uint64_t mad_get_field64(void *buf, int base_offs, int field);
> +MAD_EXPORT void mad_set_field64(void *buf, int base_offs, int field, uint64_t val);
> +MAD_EXPORT void mad_set_array(void *buf, int base_offs, int field, void *val);
> +MAD_EXPORT void mad_get_array(void *buf, int base_offs, int field, void *val);
> +MAD_EXPORT void mad_decode_field(uint8_t *buf, int field, void *val);
> +MAD_EXPORT void mad_encode_field(uint8_t *buf, int field, void *val);
> +MAD_EXPORT int mad_print_field(int field, const char *name, void *val);
> +MAD_EXPORT char *mad_dump_field(int field, char *buf, int bufsz, void *val);
> +MAD_EXPORT char *mad_dump_val(int field, char *buf, int bufsz, void *val);
>
> /* mad.c */
> -void *mad_encode(void *buf, ib_rpc_t *rpc, ib_dr_path_t *drpath, void *data);
> -uint64_t mad_trid(void);
> -int mad_build_pkt(void *umad, ib_rpc_t *rpc, ib_portid_t *dport, ib_rmpp_hdr_t *rmpp, void *data);
> +MAD_EXPORT void *mad_encode(void *buf, ib_rpc_t *rpc, ib_dr_path_t *drpath, void *data);
> +MAD_EXPORT uint64_t mad_trid(void);
> +MAD_EXPORT int mad_build_pkt(void *umad, ib_rpc_t *rpc, ib_portid_t *dport, ib_rmpp_hdr_t *rmpp,
> void *data);
>
> /* register.c */
> -int mad_register_port_client(int port_id, int mgmt, uint8_t rmpp_version);
> -int mad_register_client(int mgmt, uint8_t rmpp_version);
> -int mad_register_server(int mgmt, uint8_t rmpp_version,
> +MAD_EXPORT int mad_register_port_client(int port_id, int mgmt, uint8_t rmpp_version);
> +MAD_EXPORT int mad_register_client(int mgmt, uint8_t rmpp_version);
> +MAD_EXPORT int mad_register_server(int mgmt, uint8_t rmpp_version,
> long method_mask[16/sizeof(long)],
> uint32_t class_oui);
> -int mad_class_agent(int mgmt);
> -int mad_agent_class(int agent);
> +MAD_EXPORT int mad_class_agent(int mgmt);
> +MAD_EXPORT int mad_agent_class(int agent);
>
> /* serv.c */
> -int mad_send(ib_rpc_t *rpc, ib_portid_t *dport, ib_rmpp_hdr_t *rmpp,
> +MAD_EXPORT int mad_send(ib_rpc_t *rpc, ib_portid_t *dport, ib_rmpp_hdr_t *rmpp,
> void *data);
> -void * mad_receive(void *umad, int timeout);
> -int mad_respond(void *umad, ib_portid_t *portid, uint32_t rstatus);
> -void * mad_alloc(void);
> -void mad_free(void *umad);
> +MAD_EXPORT void * mad_receive(void *umad, int timeout);
> +MAD_EXPORT int mad_respond(void *umad, ib_portid_t *portid, uint32_t rstatus);
> +MAD_EXPORT void * mad_alloc(void);
> +MAD_EXPORT void mad_free(void *umad);
>
> /* vendor.c */
> -uint8_t *ib_vendor_call(void *data, ib_portid_t *portid,
> - ib_vendor_call_t *call);
> +MAD_EXPORT uint8_t *ib_vendor_call(void *data, ib_portid_t *portid,
> + ib_vendor_call_t *call);
>
> static inline int
> mad_is_vendor_range1(int mgmt)
> @@ -696,29 +690,29 @@ mad_is_vendor_range2(int mgmt)
> }
>
> /* rpc.c */
> -int madrpc_portid(void);
> -int madrpc_set_retries(int retries);
> -int madrpc_set_timeout(int timeout);
> -void * madrpc(ib_rpc_t *rpc, ib_portid_t *dport, void *payload, void *rcvdata);
> -void * madrpc_rmpp(ib_rpc_t *rpc, ib_portid_t *dport, ib_rmpp_hdr_t *rmpp,
> +MAD_EXPORT int madrpc_portid(void);
> +MAD_EXPORT int madrpc_set_retries(int retries);
> +MAD_EXPORT int madrpc_set_timeout(int timeout);
> +void * madrpc(ib_rpc_t *rpc, ib_portid_t *dport, void *payload, void *rcvdata);
> +void * madrpc_rmpp(ib_rpc_t *rpc, ib_portid_t *dport, ib_rmpp_hdr_t *rmpp,
> void *data);
> -void madrpc_init(char *dev_name, int dev_port, int *mgmt_classes,
> +MAD_EXPORT void madrpc_init(char *dev_name, int dev_port, int *mgmt_classes,
> int num_classes);
> void madrpc_save_mad(void *madbuf, int len);
> -void madrpc_show_errors(int set);
> +MAD_EXPORT void madrpc_show_errors(int set);
>
> -void * mad_rpc_open_port(char *dev_name, int dev_port, int *mgmt_classes,
> +void * mad_rpc_open_port(char *dev_name, int dev_port, int *mgmt_classes,
> int num_classes);
> void mad_rpc_close_port(void *ibmad_port);
> -void * mad_rpc(const void *ibmad_port, ib_rpc_t *rpc, ib_portid_t *dport,
> +void * mad_rpc(const void *ibmad_port, ib_rpc_t *rpc, ib_portid_t *dport,
> void *payload, void *rcvdata);
> -void * mad_rpc_rmpp(const void *ibmad_port, ib_rpc_t *rpc, ib_portid_t *dport,
> +void * mad_rpc_rmpp(const void *ibmad_port, ib_rpc_t *rpc, ib_portid_t *dport,
> ib_rmpp_hdr_t *rmpp, void *data);
>
> /* smp.c */
> -uint8_t * smp_query(void *buf, ib_portid_t *id, unsigned attrid, unsigned mod,
> +MAD_EXPORT uint8_t * smp_query(void *buf, ib_portid_t *id, unsigned attrid, unsigned mod,
> unsigned timeout);
> -uint8_t * smp_set(void *buf, ib_portid_t *id, unsigned attrid, unsigned mod,
> +MAD_EXPORT uint8_t * smp_set(void *buf, ib_portid_t *id, unsigned attrid, unsigned mod,
> unsigned timeout);
> uint8_t * smp_query_via(void *buf, ib_portid_t *id, unsigned attrid,
> unsigned mod, unsigned timeout, const void *srcport);
> @@ -730,18 +724,18 @@ uint8_t * sa_call(void *rcvbuf, ib_portid_t *portid, ib_sa_call_t *sa,
> unsigned timeout);
> uint8_t * sa_rpc_call(const void *ibmad_port, void *rcvbuf, ib_portid_t *portid,
> ib_sa_call_t *sa, unsigned timeout);
> -int ib_path_query(ibmad_gid_t srcgid, ibmad_gid_t destgid, ib_portid_t *sm_id,
> +MAD_EXPORT int ib_path_query(ibmad_gid_t srcgid, ibmad_gid_t destgid, ib_portid_t *sm_id,
> void *buf); /* returns lid */
> int ib_path_query_via(const void *srcport, ibmad_gid_t srcgid,
> ibmad_gid_t destgid, ib_portid_t *sm_id, void *buf);
>
> /* resolve.c */
> -int ib_resolve_smlid(ib_portid_t *sm_id, int timeout);
> -int ib_resolve_guid(ib_portid_t *portid, uint64_t *guid,
> +MAD_EXPORT int ib_resolve_smlid(ib_portid_t *sm_id, int timeout);
> +MAD_EXPORT int ib_resolve_guid(ib_portid_t *portid, uint64_t *guid,
> ib_portid_t *sm_id, int timeout);
> -int ib_resolve_portid_str(ib_portid_t *portid, char *addr_str,
> +MAD_EXPORT int ib_resolve_portid_str(ib_portid_t *portid, char *addr_str,
> int dest_type, ib_portid_t *sm_id);
> -int ib_resolve_self(ib_portid_t *portid, int *portnum, ibmad_gid_t *gid);
> +MAD_EXPORT int ib_resolve_self(ib_portid_t *portid, int *portnum, ibmad_gid_t *gid);
>
> int ib_resolve_smlid_via(ib_portid_t *sm_id, int timeout,
> const void *srcport);
> @@ -755,19 +749,19 @@ int ib_resolve_self_via(ib_portid_t *portid, int *portnum, ibmad_gid_t
> *gid,
> const void *srcport);
>
> /* gs.c */
> -uint8_t *perf_classportinfo_query(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *perf_classportinfo_query(void *rcvbuf, ib_portid_t *dest, int port,
> unsigned timeout);
> -uint8_t *port_performance_query(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *port_performance_query(void *rcvbuf, ib_portid_t *dest, int port,
> unsigned timeout);
> -uint8_t *port_performance_reset(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *port_performance_reset(void *rcvbuf, ib_portid_t *dest, int port,
> unsigned mask, unsigned timeout);
> -uint8_t *port_performance_ext_query(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *port_performance_ext_query(void *rcvbuf, ib_portid_t *dest, int port,
> unsigned timeout);
> -uint8_t *port_performance_ext_reset(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *port_performance_ext_reset(void *rcvbuf, ib_portid_t *dest, int port,
> unsigned mask, unsigned timeout);
> -uint8_t *port_samples_control_query(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *port_samples_control_query(void *rcvbuf, ib_portid_t *dest, int port,
> unsigned timeout);
> -uint8_t *port_samples_result_query(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *port_samples_result_query(void *rcvbuf, ib_portid_t *dest, int port,
> unsigned timeout);
>
> uint8_t *perf_classportinfo_query_via(void *rcvbuf, ib_portid_t *dest, int port,
> @@ -785,7 +779,7 @@ uint8_t *port_samples_control_query_via(void *rcvbuf, ib_portid_t *dest, int por
> uint8_t *port_samples_result_query_via(void *rcvbuf, ib_portid_t *dest, int port,
> unsigned timeout, const void *srcport);
> /* dump.c */
> -ib_mad_dump_fn
> +MAD_EXPORT ib_mad_dump_fn
> mad_dump_int, mad_dump_uint, mad_dump_hex, mad_dump_rhex,
> mad_dump_bitfield, mad_dump_array, mad_dump_string,
> mad_dump_linkwidth, mad_dump_linkwidthsup, mad_dump_linkwidthen,
> diff --git a/libibmad/include/infiniband/mad_osd.h b/libibmad/include/infiniband/mad_osd.h
> new file mode 100644
> index 0000000..45741c5
> --- /dev/null
> +++ b/libibmad/include/infiniband/mad_osd.h
> @@ -0,0 +1,49 @@
> +/*
> + * Copyright (c) 2004-2007 Voltaire Inc. All rights reserved.
> + * Copyright (c) 2009 Intel Corporation All rights reserved.
> + *
> + * This software is available to you under a choice of one of two
> + * licenses. You may choose to be licensed under the terms of the GNU
> + * General Public License (GPL) Version 2, available from the file
> + * COPYING in the main directory of this source tree, or the
> + * OpenIB.org BSD license below:
> + *
> + * Redistribution and use in source and binary forms, with or
> + * without modification, are permitted provided that the following
> + * conditions are met:
> + *
> + * - Redistributions of source code must retain the above
> + * copyright notice, this list of conditions and the following
> + * disclaimer.
> + *
> + * - Redistributions in binary form must reproduce the above
> + * copyright notice, this list of conditions and the following
> + * disclaimer in the documentation and/or other materials
> + * provided with the distribution.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + */
> +#ifndef _MAD_OSD_H_
> +#define _MAD_OSD_H_
> +
> +#include <stdint.h>
> +#include <string.h>
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <sys/types.h>
> +#include <unistd.h>
> +#include <byteswap.h>
> +#include <inttypes.h>
> +#include <arpa/inet.h>
> +
> +#define MAD_EXPORT
> +
> +#endif /* _MAD_OSD_H_ */
> --
> 1.5.2.5
>
>
> _______________________________________________
> general mailing list
> general at lists.openfabrics.org
> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
>
> To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
More information about the general
mailing list