components/open-fabrics/infiniband-diags/solaris_set_nodedesc.c
author Laszlo Peter <laszlo.peter@oracle.com>
Thu, 08 Sep 2016 17:49:01 -0700
changeset 6869 63619dbf968d
parent 6497 b3f7d76b49a2
child 7484 721e1a98a5a6
permissions -rw-r--r--
24611050 warning from prep-patch.mk when running gmake clobber for neutron merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     1
/*
5708
49b43e37ce26 PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 1793
diff changeset
     2
 * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     3
 *
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     4
 * This software is available to you under a choice of one of two
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     5
 * licenses.  You may choose to be licensed under the terms of the GNU
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     6
 * General Public License (GPL) Version 2, available from the file
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     7
 * COPYING in the main directory of this source tree, or the
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     8
 * OpenIB.org BSD license below:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
     9
 *
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    10
 *     Redistribution and use in source and binary forms, with or
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    11
 *     without modification, are permitted provided that the following
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    12
 *     conditions are met:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    13
 *
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    14
 *      - Redistributions of source code must retain the above
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    15
 *        copyright notice, this list of conditions and the following
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    16
 *        disclaimer.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    17
 *
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    18
 *      - Redistributions in binary form must reproduce the above
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    19
 *        copyright notice, this list of conditions and the following
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    20
 *        disclaimer in the documentation and/or other materials
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    21
 *        provided with the distribution.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    22
 *
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    23
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    24
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    25
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    26
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    27
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    28
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    29
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    30
 * SOFTWARE.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    31
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    32
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    33
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    34
 * OFED Solaris wrapper
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    35
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    36
#if defined(__SVR4) && defined(__sun)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    37
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    38
#include <stdio.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    39
#include <stdlib.h>
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    40
#include <errno.h>
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    41
#include <unistd.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    42
#include <sys/types.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    43
#include <sys/stat.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    44
#include <fcntl.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    45
#include <ctype.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    46
#include <string.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    47
#include <strings.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    48
#include <getopt.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    49
#include <sys/utsname.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    50
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    51
#include <infiniband/verbs.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    52
#include <infiniband/arch.h>
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 715
diff changeset
    53
#include <infiniband/umad.h>
5708
49b43e37ce26 PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 1793
diff changeset
    54
#include "ibdiag_common.h"
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    55
#include <sys/ib/clients/of/sol_uverbs/sol_uverbs_ioctl.h>
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    56
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    57
#define	NODEDESC_READ			0x80000000
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    58
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    59
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    60
char *argv0 = "solaris_set_nodedesc";
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    61
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    62
static struct nodedesc_read_info_s {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    63
	boolean_t	info_valid;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    64
	uint64_t	guid;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    65
	char		nd_string[64];
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    66
	boolean_t	ofuv_name_valid;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    67
	char		ofuv_name[64];
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    68
} nd_read_info_arr[MAX_HCAS];
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    69
int	nd_read_info_cnt = 0;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    70
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    71
static int
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    72
read_nodedesc_ioctl(struct ibv_context *context,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    73
    sol_uverbs_nodedesc_t *nodedesc);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    74
static int
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    75
write_nodedesc_ioctl(struct ibv_context *context,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    76
    sol_uverbs_nodedesc_t *nodedesc);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    77
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    78
static void
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    79
print_read_info()
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    80
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    81
	int	j;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    82
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    83
	for (j = 0; j < nd_read_info_cnt; j++) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    84
		if (nd_read_info_arr[j].info_valid == B_FALSE ||
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    85
		    nd_read_info_arr[j].ofuv_name_valid == B_FALSE)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    86
			continue;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    87
		printf("%s: %-16s\n",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    88
		    nd_read_info_arr[j].ofuv_name,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    89
		    nd_read_info_arr[j].nd_string);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    90
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    91
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    92
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    93
static void
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    94
update_read_info_hwnames(struct ibv_device **dev_list, int num_devices)
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    95
{
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
    96
	int		i;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    97
	uint64_t	dev_guid;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    98
	char		*dev_name;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    99
	size_t		dev_name_len;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   100
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   101
	for (i = 0; dev_list[i] != 0 && i < num_devices; ++i) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   102
		int	j;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   103
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   104
		dev_guid = (uint64_t)ntohll(
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   105
		    ibv_get_device_guid(dev_list[i]));
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   106
		dev_name = (char *)ibv_get_device_name(dev_list[i]);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   107
		dev_name_len = strlen(dev_name) + 1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   108
		for (j = 0; j < nd_read_info_cnt; j++) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   109
			if (nd_read_info_arr[j].info_valid == B_TRUE &&
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   110
			    nd_read_info_arr[j].guid == dev_guid) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   111
				memcpy(nd_read_info_arr[j].ofuv_name,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   112
				    dev_name, dev_name_len);
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   113
				nd_read_info_arr[j].ofuv_name_valid =
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   114
				    B_TRUE;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   115
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   116
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   117
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   118
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   119
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   120
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   121
static void
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   122
add_read_info_arr(char *nd_str, uint64_t guid)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   123
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   124
	size_t	nd_len;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   125
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   126
	nd_len = strlen(nd_str) + 1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   127
	nd_read_info_arr[nd_read_info_cnt].info_valid = B_TRUE;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   128
	nd_read_info_arr[nd_read_info_cnt].guid = guid;
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   129
	memcpy(nd_read_info_arr[nd_read_info_cnt].nd_string,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   130
	    nd_str, nd_len);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   131
	nd_read_info_cnt++;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   132
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   133
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   134
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   135
static void
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   136
do_driver_read_ioctl(struct ibv_device *device)
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   137
{
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   138
	int			rc;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   139
	uint64_t		hca_guid;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   140
	struct ibv_context	*context;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   141
	sol_uverbs_nodedesc_t	*nodedescp;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   142
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   143
	/* Get the context for the device */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   144
	context = ibv_open_device(device);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   145
	if (!context) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   146
		IBEXIT("Unable to open the device.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   147
		/* NOTREACHED */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   148
	}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   149
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   150
	if (context->device != device) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   151
		IBEXIT("Device not set.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   152
		/* NOTREACHED */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   153
	}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   154
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   155
	/* Allocate the memory for node descriptor */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   156
	nodedescp = (sol_uverbs_nodedesc_t *)malloc(
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   157
	    sizeof (sol_uverbs_nodedesc_t));
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   158
	if (nodedescp == NULL) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   159
		IBEXIT("Memory allocation failed.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   160
		/* NOTREACHED */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   161
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   162
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   163
	nodedescp->uverbs_solaris_abi_version =
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   164
	    IB_USER_VERBS_SOLARIS_ABI_VERSION;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   165
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   166
	/* Get the guid for the device */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   167
	hca_guid = (uint64_t)ntohll(ibv_get_device_guid(device));
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   168
	if (!hca_guid) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   169
		IBEXIT("ibv_get_device_guid failed.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   170
		/* NOTREACHED */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   171
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   172
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   173
	/* Read node descriptor */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   174
	rc = read_nodedesc_ioctl(context, nodedescp);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   175
	if (rc != 0) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   176
		IBEXIT("Failed to read node descriptor.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   177
		/* NOTREACHED */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   178
	}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   179
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   180
	add_read_info_arr((char *)nodedescp->node_desc_str,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   181
	    hca_guid);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   182
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   183
read_nodedesc_exit_1:
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   184
	/* release the allocated memory */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   185
	free(nodedescp);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   186
read_nodedesc_exit_2:
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   187
	/* Close the device */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   188
	ibv_close_device(context);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   189
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   190
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   191
static int
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   192
do_driver_update_ioctl(struct ibv_device *device, char *node_desc,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   193
    char *hca_desc, uint32_t update_flag)
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   194
{
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   195
	int			rc;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   196
	struct ibv_context	*context;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   197
	sol_uverbs_nodedesc_t	*nodedescp;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   198
	char			*desc_str;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   199
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   200
	desc_str = (node_desc ? node_desc : hca_desc);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   201
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   202
	/* Get context for the device */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   203
	context = ibv_open_device(device);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   204
	if (!context) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   205
		IBEXIT("Unable to open the device.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   206
		/* NOTREACHED */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   207
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   208
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   209
	if (context->device != device) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   210
		IBEXIT("Device not set.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   211
		/* NOTREACHED */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   212
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   213
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   214
	/* Allocate the memory for node descriptor */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   215
	nodedescp = (sol_uverbs_nodedesc_t *)malloc(
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   216
	    sizeof (sol_uverbs_nodedesc_t));
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   217
	if (nodedescp == NULL) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   218
		IBEXIT("Memory allocation failed.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   219
		/* NOTREACHED */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   220
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   221
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   222
	strncpy(nodedescp->node_desc_str, desc_str, 64);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   223
	nodedescp->node_desc_update_flag = update_flag;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   224
	nodedescp->uverbs_solaris_abi_version =
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   225
	    IB_USER_VERBS_SOLARIS_ABI_VERSION;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   226
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   227
	rc = write_nodedesc_ioctl(context, nodedescp);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   228
	if (rc != 0)
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   229
		IBEXIT("Failed to set node descriptor.\n");
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   230
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   231
	free(nodedescp);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   232
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   233
write_nodedesc_exit:
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   234
	ibv_close_device(context);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   235
	return (rc);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   236
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   237
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   238
static void
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   239
read_nodedesc(struct ibv_device **device_list, int num_devices)
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   240
{
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   241
	int i;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   242
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   243
	for (i = 0; device_list[i] != 0 && i < num_devices; i++)
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   244
		do_driver_read_ioctl(device_list[i]);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   245
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   246
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   247
static int
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   248
update_nodedesc(struct ibv_device **device_list, int num_devices,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   249
    char *cmn_nodedesc, char *hca_nodedesc, uint64_t guid,
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   250
    uint32_t update_flag)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   251
{
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   252
	int		i, rc = -1;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   253
	uint64_t	dev_guid;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   254
	boolean_t	matched = B_FALSE;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   255
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   256
	if (cmn_nodedesc && hca_nodedesc == NULL) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   257
		for (i = 0; i < num_devices; i++) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   258
			rc = do_driver_update_ioctl(device_list[i],
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   259
			    cmn_nodedesc, hca_nodedesc, update_flag);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   260
			if (rc != 0)
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   261
				continue;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   262
			else
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   263
				break;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   264
		}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   265
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   266
		if (rc != 0 && i == num_devices)
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   267
			IBEXIT("Failed to set the node descriptor.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   268
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   269
		return (rc);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   270
	}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   271
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   272
	if (hca_nodedesc && guid) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   273
		for (i = 0; i < num_devices; i++) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   274
			dev_guid = (uint64_t)ntohll(ibv_get_device_guid(
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   275
			    device_list[i]));
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   276
			if (!dev_guid) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   277
				continue;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   278
			}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   279
			if (dev_guid == guid) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   280
				matched = B_TRUE;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   281
				rc = do_driver_update_ioctl(device_list[i],
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   282
				    cmn_nodedesc, hca_nodedesc, update_flag);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   283
				break;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   284
			} else {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   285
				continue;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   286
			}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   287
		}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   288
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   289
		if (matched == B_FALSE) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   290
			IBEXIT("No guid matched.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   291
			/* NOTREACHED */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   292
		}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   293
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   294
		if (rc != 0) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   295
			IBEXIT("Failed to set the node descriptor.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   296
			/* NOTREACHED */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   297
		}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   298
	}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   299
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   300
	return (rc);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   301
}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   302
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   303
static int
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   304
read_nodedesc_ioctl(struct ibv_context *context,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   305
    sol_uverbs_nodedesc_t *nodedesc)
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   306
{
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   307
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   308
	int	ret;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   309
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   310
	/*
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   311
	 * Use ioctl call to sol_uverbs module.
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   312
	 */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   313
	if (!context || !nodedesc) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   314
		return (-1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   315
	}
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   316
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   317
	ret = ioctl(context->cmd_fd, UVERBS_IOCTL_GET_NODEDESC, nodedesc);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   318
	if (ret != 0) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   319
		if (ret == EINVAL)
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   320
			IBEXIT("ABI version check failed.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   321
		else
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   322
			IBEXIT("UVERBS_IOCTL_GET_NODEDESC ioctl failed.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   323
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   324
		/* NOTREACHED */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   325
	}
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   326
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   327
	return (0);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   328
}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   329
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   330
static int
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   331
write_nodedesc_ioctl(struct ibv_context *context,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   332
    sol_uverbs_nodedesc_t *nodedesc)
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   333
{
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   334
	int	ret;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   335
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   336
	/*
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   337
	 * Use ioctl call to sol_uverbs module.
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   338
	 */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   339
	if (!context || !nodedesc)
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   340
		return (-1);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   341
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   342
	ret = ioctl(context->cmd_fd, UVERBS_IOCTL_SET_NODEDESC, nodedesc);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   343
	if (ret != 0) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   344
		if (ret == EINVAL)
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   345
			IBEXIT("ABI version check failed.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   346
		else
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   347
			IBEXIT("UVERBS_IOCTL_SET_NODEDESC ioctl failed.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   348
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   349
		/* NOTREACHED */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   350
	}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   351
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   352
	return (0);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   353
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   354
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   355
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   356
static void
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   357
usage(void)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   358
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   359
	char *basename;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   360
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   361
	if (!(basename = strrchr(argv0, '/')))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   362
		basename = argv0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   363
	else
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   364
		basename++;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   365
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   366
	fprintf(stderr, "Usage: %s \n", basename);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   367
	fprintf(stderr, "\t\t %s [-N(ode_Descriptor) CmnString]\n",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   368
	    basename);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   369
	fprintf(stderr, "\t\t %s [-H(CA_Description) HCAString "
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   370
	    "-G(UID) HCA_GUID]\n", basename);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   371
	fprintf(stderr, "\t\t %s [-H(CA_Description) HCAString "
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   372
	    "-G(UID) HCA_GUID -N(ode_Descriptor) CmnString]\n",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   373
	    basename);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   374
	fprintf(stderr, "\t\t %s [-v]\n", basename);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   375
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   376
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   377
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   378
 * Return the Node descriptor string by concatinating
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   379
 * many substrings. The first substring is "optarg" and
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   380
 * the index of the last sub-string is "optind".
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   381
 *
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   382
 * For common nodedescription, add a space at the end,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   383
 * if there is none.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   384
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   385
static char *
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   386
nodedesc_substr_cat(char **argv, int argc, boolean_t space_at_end)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   387
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   388
	int	i, start_opt, end_opt;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   389
	char	*nodedesc_str;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   390
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   391
	/* Get the index for first sub-string. */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   392
	for (start_opt = 0, i = optind; i; i--) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   393
		if (argv[i] == NULL)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   394
			continue;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   395
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   396
		if (strcmp(argv[i], optarg) == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   397
			start_opt = i;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   398
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   399
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   400
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   401
	if (start_opt == 0)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   402
		return (NULL);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   403
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   404
	/* Get the index for last sub-string */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   405
	for (end_opt = 0, i = optind; i <= argc; i++) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   406
		if (i == argc || argv[i][0] == '-') {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   407
			end_opt = i - 1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   408
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   409
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   410
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   411
	if (end_opt == 0)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   412
		return (NULL);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   413
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   414
	nodedesc_str = malloc(64);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   415
	strncpy(nodedesc_str, optarg, 64);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   416
	start_opt++;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   417
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   418
	/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   419
	 * strcat a space string and then strcat the
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   420
	 * next sub-string.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   421
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   422
	for (i = start_opt; i <= end_opt; i++) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   423
		strncat(nodedesc_str, " ", 64);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   424
		strncat(nodedesc_str, argv[i], 64);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   425
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   426
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   427
	/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   428
	 * Add a space at the end, if the caller has set
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   429
	 * space_at_end and the nodedesc string doesn't
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   430
	 * contain a space at the end.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   431
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   432
	if (space_at_end == B_TRUE &&
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   433
	    nodedesc_str[strlen(nodedesc_str)] != ' ')
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   434
		strncat(nodedesc_str, " ", 64);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   435
	return (nodedesc_str);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   436
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   437
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   438
int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   439
main(int argc, char **argv)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   440
{
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   441
	int			rc;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   442
	char			*nodedesc = NULL;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   443
	char			*hcadesc = NULL;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   444
	uint32_t		update_flag = 0;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   445
	struct utsname		uts_name;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   446
	uint64_t		hca_guid;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   447
	boolean_t		guid_inited = B_FALSE;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   448
	extern int 		ibdebug;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   449
	char			nodename[64];
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   450
	struct ibv_device	**device_list = NULL;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   451
	int			num_devices = 0;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   452
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   453
	static char const str_opts[] = "N:H:G:vd";
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   454
	static const struct option long_opts[] = {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   455
		{ "Node_Descriptor", 1, 0, 'N'},
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   456
		{ "HCA_Description", 1, 0, 'H'},
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   457
		{ "GUID", 1, 0, 'G'},
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   458
		{ "verbose", 0, 0, 'v'},
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   459
		{ "debug", 0, 0, 'd'},
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   460
		{ }
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   461
	};
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   462
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   463
	argv0 = argv[0];
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   464
	while (1) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   465
		int ch = getopt_long(argc, argv, str_opts,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   466
		    long_opts, NULL);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   467
		if (ch == -1)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   468
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   469
		switch (ch) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   470
		case 'N':
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   471
			nodedesc = nodedesc_substr_cat(argv, argc, B_TRUE);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   472
			if (!nodedesc) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   473
				usage();
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   474
				rc = -1;
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   475
				goto free_and_ret_2;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   476
			}
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   477
			update_flag |= UVERBS_NODEDESC_UPDATE_STRING;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   478
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   479
		case 'H':
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   480
			hcadesc = nodedesc_substr_cat(argv, argc, B_FALSE);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   481
			if (!hcadesc) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   482
				usage();
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   483
				rc = -1;
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   484
				goto free_and_ret_2;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   485
			}
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   486
			update_flag |= UVERBS_NODEDESC_UPDATE_HCA_STRING;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   487
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   488
		case 'G':
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   489
			guid_inited = B_TRUE;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   490
			hca_guid = (uint64_t)strtoull(optarg, 0, 0);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   491
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   492
		case 'v' :
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   493
			update_flag |= NODEDESC_READ;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   494
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   495
		case 'd':
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   496
			ibdebug++;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   497
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   498
		default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   499
			usage();
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   500
			rc = -1;
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   501
			goto free_and_ret_2;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   502
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   503
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   504
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   505
	if (update_flag & NODEDESC_READ) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   506
		if (nodedesc || hcadesc || guid_inited == B_TRUE) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   507
			usage();
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   508
			rc = -1;
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   509
			goto free_and_ret_2;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   510
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   511
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   512
		device_list = ibv_get_device_list(&num_devices);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   513
		if (!device_list) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   514
			IBEXIT("ibv_get_device_list failed.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   515
			/* NOTREACHED */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   516
		}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   517
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   518
		read_nodedesc(device_list, num_devices);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   519
		update_read_info_hwnames(device_list, num_devices);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   520
		print_read_info();
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   521
		rc = 0;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   522
		goto free_and_ret_1;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   523
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   524
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   525
	if (hcadesc && guid_inited == B_FALSE) {
5708
49b43e37ce26 PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 1793
diff changeset
   526
		IBEXIT("No GUID specified for HCA Node descriptor");
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   527
		/* NOTREACHED */
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   528
	}
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   529
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   530
	device_list = ibv_get_device_list(&num_devices);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   531
	if (!device_list) {
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   532
		IBEXIT("ibv_get_device_list failed.\n");
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   533
		/* NOTREACHED */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   534
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   535
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   536
	if (nodedesc) {
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   537
		rc = update_nodedesc(device_list, num_devices,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   538
		    nodedesc, NULL, 0, UVERBS_NODEDESC_UPDATE_STRING);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   539
		if (rc) {
5708
49b43e37ce26 PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 1793
diff changeset
   540
			IBEXIT("write common node descriptor "
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   541
			    "failed");
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   542
			/* NOTREACHED */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   543
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   544
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   545
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   546
	if (hcadesc) {
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   547
		rc = update_nodedesc(device_list, num_devices,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   548
		    NULL, hcadesc, hca_guid,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   549
		    UVERBS_NODEDESC_UPDATE_HCA_STRING);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   550
		if (rc) {
5708
49b43e37ce26 PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 1793
diff changeset
   551
			IBEXIT("update_hca_noddesc failed");
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   552
			/* NOTREACHED */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   553
		}
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   554
		rc = 0;
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   555
		goto free_and_ret_1;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   556
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   557
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   558
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   559
	if (nodedesc == NULL) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   560
		if (uname(&uts_name) < 0) {
5708
49b43e37ce26 PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 1793
diff changeset
   561
			IBEXIT("Node descriptor unspecified"
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   562
			    "& uts_name failed");
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   563
			/* NOTREACHED */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   564
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   565
715
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   566
		/*
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   567
		 * The common nodedesc string can have max 64 chars.
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   568
		 * We can accomodate 63 chars from uname and alike
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   569
		 * option -N, we append a space to the nodename.
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   570
		 */
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   571
		(void) strncpy(nodename, uts_name.nodename, 63);
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   572
		if (nodename[strlen(nodename)] != ' ')
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   573
			(void) strncat(nodename, " ", 1);
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   574
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   575
		rc = update_nodedesc(device_list, num_devices,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   576
		    nodename, NULL, 0,
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   577
		    UVERBS_NODEDESC_UPDATE_STRING);
715
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   578
		if (rc) {
5708
49b43e37ce26 PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 1793
diff changeset
   579
			IBEXIT("write common node descriptor failed");
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   580
			/* NOTREACHED */
715
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   581
		}
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   582
	}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   583
5712
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   584
free_and_ret_1:
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   585
	ibv_free_device_list(device_list);
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   586
0c8757992b95 PSARC/2016/182 IB HCA driver interface and other updates
Sizhang Xiao <sizhang.xiao@oracle.com>
parents: 5708
diff changeset
   587
free_and_ret_2:
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   588
	if (nodedesc)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   589
		free(nodedesc);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   590
	if (hcadesc)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   591
		free(hcadesc);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   592
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   593
	return (rc);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   594
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   595
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   596
#endif