[ofa-general] Re: [ib-diag] sminfo: add support for WinOF

Sasha Khapyorsky sashak at voltaire.com
Sat Feb 14 07:56:01 PST 2009


On 23:21 Thu 12 Feb     , Sean Hefty wrote:
> Allow sminfo to build and run on both Linux and Windows.  Window
> build files are maintained in the WinOF respository.  These changes
> allow dropping the infiniband-diags into the WinOF build environment.
> 
> Signed-off-by: Sean Hefty <sean.hefty at intel.com>
> ---
> Would there be any objection to including the windows source files (.c and .h)
> in the mgmt tree?

Which files? Basically I prefer to not have unrelated things in my tree,
but let's see specific needs.

> 
>  infiniband-diags/Makefile.am                |    2 +
>  infiniband-diags/include/ibdiag_common.h    |    2 +
>  infiniband-diags/include/linux/ibdiag_osd.h |   43 +++++++++++++++++++++++++++
>  infiniband-diags/src/ibdiag_common.c        |   13 ++++----
>  infiniband-diags/src/sminfo.c               |   15 ++++-----
>  5 files changed, 58 insertions(+), 17 deletions(-)
> 
> diff --git a/infiniband-diags/Makefile.am b/infiniband-diags/Makefile.am
> index f9cc5bd..0d32abd 100644
> --- a/infiniband-diags/Makefile.am
> +++ b/infiniband-diags/Makefile.am
> @@ -1,5 +1,5 @@
>  
> -INCLUDES = -I$(top_builddir)/include/ -I$(srcdir)/include -I$(includedir) -I$(includedir)/infiniband
> +INCLUDES = -I$(top_builddir)/include/ -I$(srcdir)/include -I$(includedir) -I$(includedir)/infiniband -I$(srcdir)/include/linux
>  
>  if DEBUG
>  DBGFLAGS = -ggdb -D_DEBUG_
> diff --git a/infiniband-diags/include/ibdiag_common.h b/infiniband-diags/include/ibdiag_common.h
> index 4783b8e..2dea873 100644
> --- a/infiniband-diags/include/ibdiag_common.h
> +++ b/infiniband-diags/include/ibdiag_common.h
> @@ -52,7 +52,7 @@ extern int ibd_timeout;
>  #undef DEBUG
>  #define	DEBUG	if (ibdebug || ibverbose) IBWARN
>  #define	VERBOSE	if (ibdebug || ibverbose > 1) IBWARN
> -#define IBERROR(fmt, args...)	iberror(__FUNCTION__, fmt, ## args)
> +#define IBERROR(fmt, ...)	iberror(__FUNCTION__, fmt, ## __VA_ARGS__)
>  
>  struct ibdiag_opt {
>  	const char *name;
> diff --git a/infiniband-diags/include/linux/ibdiag_osd.h b/infiniband-diags/include/linux/ibdiag_osd.h
> new file mode 100644
> index 0000000..5c6faa9
> --- /dev/null
> +++ b/infiniband-diags/include/linux/ibdiag_osd.h
> @@ -0,0 +1,43 @@
> +/*
> + * Copyright (c) 2009 Intel Corp, Inc.  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 _IBDIAG_OSD_H_
> +#define _IBDIAG_OSD_H_
> +
> +#include <unistd.h>
> +#include <inttypes.h>
> +#include <config.h>
> +
> +#define CDECL
> +
> +#endif /* _IBDIAG_OSD_H_ */
> diff --git a/infiniband-diags/src/ibdiag_common.c b/infiniband-diags/src/ibdiag_common.c
> index bda1efa..154e00c 100644
> --- a/infiniband-diags/src/ibdiag_common.c
> +++ b/infiniband-diags/src/ibdiag_common.c
> @@ -43,15 +43,14 @@
>  #include <stdlib.h>
>  #include <stdarg.h>
>  #include <sys/types.h>
> -#include <unistd.h>
>  #include <ctype.h>
> -#include <config.h>
>  #include <getopt.h>
>  
>  #include <infiniband/umad.h>
>  #include <infiniband/mad.h>
>  #include <ibdiag_common.h>
>  #include <ibdiag_version.h>
> +#include "ibdiag_osd.h"

Wouldn't it be easier (at least for linux developers :)) instead
of filtering out pretty standard header files to put such files under
winof tree? (Including config.h, this file is generated by autotools,
as far as I could see it is not used in WinOF, so it should be easy to
keep this as "osd" file).

>  
>  int ibdebug;
>  int ibverbose;
> @@ -204,7 +203,7 @@ static const struct ibdiag_opt common_opts[] = {
>  	{ "usage", 'u', 0, NULL, "usage message" },
>  	{ "help", 'h', 0, NULL, "help message" },
>  	{ "version", 'V', 0, NULL, "show version" },
> -	{}
> +	{ 0 }
>  };
>  
>  static void make_opt(struct option *l, const struct ibdiag_opt *o,
> @@ -254,11 +253,11 @@ static struct option *make_long_opts(const char *exclude_str,
>  
>  static void make_str_opts(const struct option *o, char *p, unsigned size)
>  {
> -	int i, n = 0;
> +	unsigned i, n = 0;
>  
>  	for (n = 0; o->name  && n + 2 + o->has_arg < size; o++) {
> -		p[n++] = o->val;
> -		for (i = 0; i < o->has_arg; i++)
> +		p[n++] = (char) o->val;
> +		for (i = 0; i < (unsigned) o->has_arg; i++)
>  			p[n++] = ':';
>  	}
>  	p[n] = '\0';
> @@ -273,7 +272,7 @@ int ibdiag_process_opts(int argc, char * const argv[], void *cxt,
>  	char str_opts[1024];
>  	const struct ibdiag_opt *o;
>  
> -	memset(opts_map, 0, sizeof(opts_map));
> +	memset((void *) opts_map, 0, sizeof(opts_map));

Hmm, why is this casting needed?

>  
>  	prog_name = argv[0];
>  	prog_args = usage_args;
> diff --git a/infiniband-diags/src/sminfo.c b/infiniband-diags/src/sminfo.c
> index e96c782..7767668 100644
> --- a/infiniband-diags/src/sminfo.c
> +++ b/infiniband-diags/src/sminfo.c
> @@ -37,14 +37,13 @@
>  
>  #include <stdio.h>
>  #include <stdlib.h>
> -#include <unistd.h>
> -#include <inttypes.h>
>  #include <getopt.h>
>  
>  #include <infiniband/umad.h>
>  #include <infiniband/mad.h>
>  
>  #include "ibdiag_common.h"
> +#include "ibdiag_osd.h"
>  
>  static uint8_t sminfo[1024];
>  
> @@ -59,10 +58,10 @@ enum {
>  };
>  
>  char *statestr[] = {
> -	[SMINFO_NOTACT] "SMINFO_NOTACT",
> -	[SMINFO_DISCOVER] "SMINFO_DISCOVER",
> -	[SMINFO_STANDBY] "SMINFO_STANDBY",
> -	[SMINFO_MASTER] "SMINFO_MASTER",
> +	"SMINFO_NOTACT",
> +	"SMINFO_DISCOVER",
> +	"SMINFO_STANDBY",
> +	"SMINFO_MASTER",
>  };
>  
>  #define STATESTR(s)	(((unsigned)(s)) < SMINFO_STATE_LAST ? statestr[s] : "???")
> @@ -88,7 +87,7 @@ static int process_opt(void *context, int ch, char *optarg)
>  	return 0;
>  }
>  
> -int main(int argc, char **argv)
> +int CDECL main(int argc, char **argv)

Would compiler flag /Gd do the same without code modification?

(http://msdn.microsoft.com/en-us/library/46t77ak2(VS.71).aspx)

Sasha

>  {
>  	int mgmt_classes[3] = {IB_SMI_CLASS, IB_SMI_DIRECT_CLASS, IB_SA_CLASS};
>  	int mod = 0;
> @@ -100,7 +99,7 @@ int main(int argc, char **argv)
>  		{ "state", 's', 1, "<0-3>", "set SM state"},
>  		{ "priority", 'p', 1, "<0-15>", "set SM priority"},
>  		{ "activity", 'a', 1, NULL, "set activity count"},
> -		{ }
> +		{ 0 }
>  	};
>  	char usage_args[] = "<sm_lid|sm_dr_path> [modifier]";
>  
> 
> 
> 



More information about the general mailing list