components/open-fabrics/libibverbs/solaris_compatibility.c
author pkidd <patrick.kidd@oracle.com>
Tue, 21 Feb 2017 09:42:20 -0800
branchs11u3-sru
changeset 7677 9b4f5d1632d7
parent 6322 c8b38df3868d
permissions -rw-r--r--
Added tag 0.175.3.18.0.2.0, S11.3SRU18.2 for changeset 89cc78d134da
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
/*
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
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
#if HAVE_CONFIG_H
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    33
#include <config.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    34
#endif /* HAVE_CONFIG_H */
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
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    37
 * OFED Solaris wrapper
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    38
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    39
#if defined(__SVR4) && defined(__sun)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    40
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    41
#include <stdarg.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    42
#include <fcntl.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    43
#include <unistd.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    44
#include <sys/types.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    45
#include <sys/processor.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    46
#include <stdio.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    47
#include <stdlib.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    48
#include <strings.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    49
#include <sys/param.h>
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
    50
#include <sys/ib/clients/of/sol_uverbs/sol_uverbs_ioctl.h>
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
    51
#include <sys/ib/clients/of/sol_umad/sol_umad_ioctl.h>
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    52
#include <alloca.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    53
#include "../include/infiniband/arch.h"
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    54
#include "../include/infiniband/verbs.h"
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
    55
#include "../include/infiniband/kern-abi.h"
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
    56
#include "../include/infiniband/driver.h"
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    57
#include <errno.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    58
#include <pthread.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    59
#include <kstat.h>
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    60
2760
d8617e86d47d 17199356 The ibv_devinfo command cannot print the board_id of CX-3 IB-HCA (userland)
Chris Juhasz <chris.juhasz@oracle.com>
parents: 851
diff changeset
    61
#define	min(a, b)	((a) < (b) ? (a) : (b))
d8617e86d47d 17199356 The ibv_devinfo command cannot print the board_id of CX-3 IB-HCA (userland)
Chris Juhasz <chris.juhasz@oracle.com>
parents: 851
diff changeset
    62
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    63
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    64
 * duplicate ABI definitions for HCAs as the HCA abi headers are not
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    65
 * installed in proto.
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
    66
 */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    67
#define	RDMA_USER_CM_MIN_ABI_VERSION	3 /* rdma_cma_abi.h */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    68
#define	RDMA_USER_CM_MAX_ABI_VERSION	4 /* rdma_cma_abi.h */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    69
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
    70
/*
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
    71
 * Some useful definitions.
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
    72
 */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    73
#define	HW_DRIVER_MAX_NAME_LEN			20
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    74
#define	UVERBS_KERNEL_SYSFS_NAME_BASE		"uverbs"
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    75
#define	UMAD_KERNEL_SYSFS_NAME_BASE		"umad"
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    76
#define	IB_HCA_DEVPATH_PREFIX			"/dev/infiniband/hca"
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    77
#define	IB_OFS_DEVPATH_PREFIX			"/dev/infiniband/ofs"
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
    78
#define	IB_HCA_DEVPATH_SZ			64
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
    79
#define	MAX_OFS_DEVPATH_LEN			64
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    80
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
    81
#define	MAX_HCAS				(64*16)
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
    82
#define	MAX_PORTS				(MAX_HCAS*2)
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
    83
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    84
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    85
 * sol_uverbs_drv_status is the status of what libibverbs knows
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    86
 * about the status of sol_uverbs driver.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    87
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    88
#define	SOL_UVERBS_DRV_STATUS_UNKNOWN	0x0
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    89
#define	SOL_UVERBS_DRV_STATUS_LOADED	0x1
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    90
#define	SOL_UVERBS_DRV_STATUS_UNLOADED	0x02
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
static kstat_ctl_t	*kc = NULL;	/* libkstat cookie */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    93
static int sol_uverbs_drv_status = SOL_UVERBS_DRV_STATUS_UNKNOWN;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    94
static int sol_uverbs_minor_dev = -1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    95
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
    96
/*
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
    97
 * Override verbs abi version.
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
    98
 * If the build system doesn't have the intended
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
    99
 * header file then override with the intended abi version.
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   100
 * These changes can be deleted once the build system has
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   101
 * the correct header file.
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   102
 */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   103
#if	(IB_USER_VERBS_SOLARIS_ABI_VERSION == 2)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   104
#undef	IB_USER_VERBS_SOLARIS_ABI_VERSION
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   105
#define	IB_USER_VERBS_SOLARIS_ABI_VERSION	4
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   106
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   107
#define	UVERBS_PSID_STR_SZ		32
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   108
#define	UVERBS_IBDEV_NAME_SZ		64
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   109
#define	UVERBS_HCA_DRIVER_NAME_SZ	40
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   110
#define	UVERBS_DEVID_STR_SZ		16
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   111
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   112
typedef struct sol_uverbs_hca_info_v4_s {
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   113
	char		uverbs_hca_psid_string[UVERBS_PSID_STR_SZ];
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   114
	uint8_t		uverbs_hca_pad1[8];
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   115
	char		uverbs_hca_ibdev_name[UVERBS_IBDEV_NAME_SZ];
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   116
	char		uverbs_hca_driver_name[UVERBS_HCA_DRIVER_NAME_SZ];
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   117
	uint32_t	uverbs_hca_driver_instance;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   118
	uint32_t	uverbs_hca_vendorid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   119
	uint16_t	uverbs_hca_deviceid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   120
	uint16_t	uverbs_hca_devidx;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   121
	int32_t		uverbs_hca_abi_version;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   122
	uint64_t	uverbs_hca_fw_ver;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   123
	uint64_t	uverbs_hca_node_guid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   124
	uint64_t	uverbs_hca_node_external_guid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   125
	uint64_t	uverbs_hca_sys_image_guid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   126
	uint32_t	uverbs_hca_hw_version;
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   127
	uint8_t		uverbs_hca_pad2[4];
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   128
	char		uverbs_hca_devid_string[UVERBS_DEVID_STR_SZ];
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   129
	uint8_t		uverbs_hca_pad3[24];
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   130
} sol_uverbs_hca_info_v4_t;
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   131
#define	IB_USER_VERBS_V4_IN_V3
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   132
#endif
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   133
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   134
/*
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   135
 * Some useful definitions.
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   136
 */
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   137
#define	SIZEOF_UVERBS_INFO	(sizeof (sol_uverbs_info_t))
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   138
#ifdef	IB_USER_VERBS_V4_IN_V3
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   139
#define	SIZEOF_HCA_INFO		(sizeof (sol_uverbs_hca_info_v4_t))
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   140
#else
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   141
#define	SIZEOF_HCA_INFO		(sizeof (sol_uverbs_hca_info_t))
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   142
#endif
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   143
#define	UVERBS_INFO(x)		((sol_uverbs_info_t *)x)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   144
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   145
/*
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   146
 * check_path() prefixs
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   147
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   148
typedef enum cp_prefix_e {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   149
	CP_SOL_UVERBS		= 1,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   150
	CP_DEVICE		= 2,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   151
	CP_D			= 3,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   152
	CP_GIDS			= 4,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   153
	CP_PKEYS		= 5,
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   154
	CP_PORTS		= 6,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   155
	CP_UMAD			= 7,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   156
	CP_SLASH		= 8,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   157
	CP_SYS			= 9,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   158
	CP_CLASS		= 10,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   159
	CP_INFINIBAND_VERBS	= 11,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   160
	CP_INFINIBAND		= 12,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   161
	CP_INFINIBAND_MAD	= 13,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   162
	CP_MISC			= 14,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   163
	CP_RDMA_CM		= 15
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   164
} cp_prefix_t;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   165
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   166
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   167
 * Some temporary cache code, until things are cleaned up as part of DR
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   168
 * work. This will speed up the sysfs emulation.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   169
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   170
typedef struct ibdev_cache_info_s {
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   171
	boolean_t			ibd_valid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   172
	uint_t				ibd_hw_rev;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   173
	uint_t				ibd_abi_version;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   174
	uint_t				ibd_vendor_id;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   175
	uint_t				ibd_device_id;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   176
	char				ibd_hca_path[IB_HCA_DEVPATH_SZ];
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   177
	char				ibd_node_guid_str[20];
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   178
	char				ibd_node_guid_external_str[20];
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   179
	char				ibd_sys_image_guid[20];
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   180
	char				ibd_fw_ver[16];
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   181
	char				ibd_name[UVERBS_IBDEV_NAME_SZ];
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   182
	char				ibd_boardid_string[UVERBS_PSID_STR_SZ];
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   183
	char				ibd_devid_string[UVERBS_DEVID_STR_SZ];
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   184
} ibdev_cache_info_t;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   185
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   186
/* IB device info cache */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   187
static ibdev_cache_info_t	ibdev_cache[MAX_HCAS];
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   188
static int			uverbs_abi_version = -1;
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
typedef struct umad_cache_info_s {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   191
	uint_t		umc_valid;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   192
	int		umc_port;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   193
	char		umc_ib_dev[16];
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   194
} umad_cache_info_t;
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
   195
static umad_cache_info_t	umad_dev_cache[MAX_PORTS];
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   196
static int			umad_abi_version = -1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   197
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   198
pthread_once_t		oneTimeInit = PTHREAD_ONCE_INIT;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   199
static int 		umad_cache_cnt = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   200
static boolean_t	initialized = B_FALSE;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   201
static boolean_t	umad_cache_initialized = B_FALSE;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   202
static boolean_t	ibdev_cache_initialized = B_FALSE;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   203
static pthread_mutex_t	umad_cache_mutex = PTHREAD_MUTEX_INITIALIZER;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   204
static pthread_mutex_t	ibdev_cache_mutex = PTHREAD_MUTEX_INITIALIZER;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   205
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
   206
int sol_ibv_query_gid(struct ibv_context *, uint8_t, int, union ibv_gid *);
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
   207
int sol_ibv_query_pkey(struct ibv_context *, uint8_t, int, uint16_t *);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   208
void __attribute__((constructor))solaris_init(void);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   209
void __attribute__((destructor))solaris_fini(void);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   210
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   211
int sol_ibv_query_device(struct ibv_device *device,
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   212
    struct ibv_device_attr *device_attr);
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   213
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   214
int sol_ibv_query_port(struct ibv_context *, uint8_t, struct ibv_port_attr *);
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   215
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   216
void
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   217
solaris_init(void)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   218
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   219
	while ((kc = kstat_open()) == NULL) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   220
		if (errno == EAGAIN)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   221
			(void) poll(NULL, 0, 200);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   222
		else
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   223
			fprintf(stderr, "cannot open /dev/kstat: %s\n",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   224
			    strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   225
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   226
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   227
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   228
void
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   229
solaris_fini(void)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   230
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   231
	(void) kstat_close(kc);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   232
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   233
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   234
#define	isdigit(c)	((c) >= '0' && (c) <= '9')
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   235
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   236
/*
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   237
 * Given a device name of the form <driver-prefix><instance>,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   238
 * get the device number. Device name is of the form
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   239
 * for example:- mlx4_0, mlx4_2 etc. Function will return the device instance
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   240
 * extracted from the name.
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   241
 * for example:- mlx4_0 will return 0 and mlx4_2 will return 2.
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   242
 */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   243
static int
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   244
get_device_num(const char *device_name)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   245
{
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   246
	const char *temp;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   247
	const char *end;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   248
	const char *start = device_name;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   249
	int len;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   250
	int devnum;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   251
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   252
	if (!start)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   253
		return (-1);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   254
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   255
	len = strlen(device_name);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   256
	end = &device_name[len - 1];
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   257
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   258
	for (temp = end; temp >= start && isdigit(*temp); temp--)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   259
		/* Null body */;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   260
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   261
	/*
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   262
	 * Check if the device number is invalid.
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   263
	 */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   264
	if (temp == end || temp < start)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   265
		return (-1);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   266
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   267
	devnum = atoi(temp + 1);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   268
	if (devnum < 0 || devnum >= MAX_HCAS)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   269
		return (-1);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   270
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   271
	return (devnum);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   272
}
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   273
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   274
/*
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   275
 * For usages where ibdev cache needs to be read based on the IB device
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   276
 * name instead of uverbs device name a simple compare against the cache
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   277
 * entries is used to retrieve the corresponding ibdev cache entry.
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   278
 */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   279
static ibdev_cache_info_t *
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   280
ibdev_cache_read_by_devname(const char *devname)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   281
{
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   282
	int idx;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   283
	ibdev_cache_info_t *cache = NULL;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   284
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   285
	if (!devname)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   286
		return (NULL);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   287
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   288
	for (idx = 0; idx < MAX_HCAS; idx++) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   289
		cache = &ibdev_cache[idx];
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   290
		if (strcmp(cache->ibd_name, devname) == 0)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   291
			break;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   292
	}
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   293
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   294
	/*
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   295
	 * If we failed to find an entry return NULL.
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   296
	 */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   297
	if (idx == MAX_HCAS)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   298
		cache = NULL;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   299
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   300
	return (cache);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   301
}
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   302
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   303
/*
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   304
 * Helper function to update the ibdev cache entries with the values obtained
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   305
 * from the uverbs HCA info ioctl.
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   306
 */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   307
static int
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   308
ibdev_cache_init()
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   309
{
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   310
	ibdev_cache_info_t		*info;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   311
	int				fd, i, hca_cnt;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   312
	char				uverbs_devpath[MAX_OFS_DEVPATH_LEN];
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   313
	sol_uverbs_info_t		*uverbs_infop;
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   314
#ifdef	IB_USER_VERBS_V4_IN_V3
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   315
	sol_uverbs_hca_info_v4_t	*hca_infop;
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   316
#else
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   317
	sol_uverbs_hca_info_t		*hca_infop;
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   318
#endif
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   319
	char 				*buf;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   320
	size_t				bufsize;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   321
	uint16_t			major, minor, sub_minor;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   322
	uint64_t			raw_fw_ver;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   323
	uint64_t			guid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   324
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   325
	snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s%d",
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   326
	    IB_OFS_DEVPATH_PREFIX, UVERBS_KERNEL_SYSFS_NAME_BASE,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   327
	    sol_uverbs_minor_dev);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   328
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   329
	/*
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   330
	 * using the first sol_uverbs minor node that can be opened to get
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   331
	 * all the HCA information
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   332
	 */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   333
	if ((fd = open(uverbs_devpath, O_RDWR)) < 0) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   334
		fprintf(stderr, "sol_uverbs failed to open: %s\n",
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   335
		    strerror(errno));
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   336
		return (-1);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   337
	}
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   338
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   339
	bufsize = SIZEOF_UVERBS_INFO + (MAX_HCAS * SIZEOF_HCA_INFO);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   340
	buf = malloc(bufsize);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   341
	if (!buf) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   342
		fprintf(stderr, "ibdev_cache_update() failed to alloc\n");
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   343
		close(fd);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   344
		return (-1);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   345
	}
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   346
	memset(buf, 0, bufsize);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   347
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   348
	uverbs_infop = UVERBS_INFO(buf);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   349
	uverbs_infop->uverbs_hca_cnt = MAX_HCAS;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   350
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   351
	if (ioctl(fd, UVERBS_IOCTL_GET_HCA_INFO, uverbs_infop) != 0) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   352
		fprintf(stderr, "sol_uverbs ioctl failed: %s\n",
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   353
		    strerror(errno));
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   354
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   355
		goto error_exit1;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   356
	}
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   357
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   358
	if (uverbs_infop->uverbs_solaris_abi_version !=
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   359
	    IB_USER_VERBS_SOLARIS_ABI_VERSION) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   360
		fprintf(stderr, "sol_uverbs solaris_abi_version !="
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   361
		    "IB_USER_VERBS_SOLARIS_ABI_VERSION : %d\n",
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   362
		    uverbs_infop->uverbs_solaris_abi_version);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   363
		goto error_exit1;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   364
	}
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   365
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   366
	hca_cnt = uverbs_infop->uverbs_hca_cnt;	/* hca count returned */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   367
	hca_infop = uverbs_infop->uverbs_hca_info;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   368
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   369
	if (hca_cnt > MAX_HCAS) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   370
		fprintf(stderr, "Number of HCAs returned exceeds max\n");
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   371
		goto error_exit1;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   372
	}
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   373
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   374
	if (uverbs_abi_version == -1)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   375
		uverbs_abi_version = uverbs_infop->uverbs_abi_version;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   376
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   377
	for (i = 0; i < hca_cnt; i++, hca_infop++) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   378
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   379
		/*
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   380
		 * Update the cache.
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   381
		 */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   382
		info = &ibdev_cache[hca_infop->uverbs_hca_devidx];
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   383
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   384
		(void) strncpy(info->ibd_name,
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   385
		    hca_infop->uverbs_hca_ibdev_name, UVERBS_IBDEV_NAME_SZ);
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   386
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   387
		guid = hca_infop->uverbs_hca_node_guid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   388
		sprintf(info->ibd_node_guid_str, "%04x:%04x:%04x:%04x",
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   389
		    (unsigned)(guid >> 48) & 0xffff,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   390
		    (unsigned)(guid >> 32) & 0xffff,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   391
		    (unsigned)(guid >> 16) & 0xffff,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   392
		    (unsigned)(guid >>  0) & 0xffff);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   393
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   394
		guid = hca_infop->uverbs_hca_node_external_guid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   395
		sprintf(info->ibd_node_guid_external_str, "%04x:%04x:%04x:%04x",
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   396
		    (unsigned)(guid >> 48) & 0xffff,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   397
		    (unsigned)(guid >> 32) & 0xffff,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   398
		    (unsigned)(guid >> 16) & 0xffff,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   399
		    (unsigned)(guid >>  0) & 0xffff);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   400
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   401
		guid = hca_infop->uverbs_hca_sys_image_guid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   402
		sprintf(info->ibd_sys_image_guid, "%04x:%04x:%04x:%04x",
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   403
		    (unsigned)(guid >> 48) & 0xffff,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   404
		    (unsigned)(guid >> 32) & 0xffff,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   405
		    (unsigned)(guid >> 16) & 0xffff,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   406
		    (unsigned)(guid >>  0) & 0xffff);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   407
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   408
		raw_fw_ver = hca_infop->uverbs_hca_fw_ver;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   409
		major	   = (raw_fw_ver >> 32) & 0xffff;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   410
		minor	   = (raw_fw_ver >> 16) & 0xffff;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   411
		sub_minor  = raw_fw_ver & 0xffff;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   412
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   413
		snprintf(info->ibd_fw_ver, sizeof (info->ibd_fw_ver),
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   414
		    "%d.%d.%03d", major, minor, sub_minor);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   415
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   416
		info->ibd_hw_rev	= hca_infop->uverbs_hca_hw_version;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   417
		info->ibd_vendor_id	= hca_infop->uverbs_hca_vendorid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   418
		info->ibd_device_id	= hca_infop->uverbs_hca_deviceid;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   419
		info->ibd_abi_version	= hca_infop->uverbs_hca_abi_version;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   420
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   421
		snprintf(info->ibd_hca_path, sizeof (info->ibd_hca_path),
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   422
		    "%s/%s%d", IB_HCA_DEVPATH_PREFIX,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   423
		    hca_infop->uverbs_hca_driver_name,
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   424
		    hca_infop->uverbs_hca_driver_instance);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   425
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   426
		strncpy(info->ibd_boardid_string,
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   427
		    hca_infop->uverbs_hca_psid_string, UVERBS_PSID_STR_SZ);
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   428
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   429
		strncpy(info->ibd_devid_string,
6322
c8b38df3868d PSARC/2016/109 Solaris OFED (OFUV) Version 3.18 and other updates
boris.chiu@oracle.com
parents: 4996
diff changeset
   430
		    hca_infop->uverbs_hca_devid_string, UVERBS_DEVID_STR_SZ);
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   431
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   432
		info->ibd_valid = B_TRUE;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   433
	}
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   434
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   435
	free(buf);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   436
	close(fd);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   437
	return (0);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   438
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   439
error_exit1:
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   440
	free(buf);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   441
	close(fd);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   442
	return (-1);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   443
}
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   444
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   445
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   446
umad_cache_add(uint_t dev_num, int port, char *ibdev)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   447
{
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
   448
	if ((dev_num >= MAX_PORTS) || (umad_cache_cnt >= MAX_PORTS)) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   449
		fprintf(stderr, "dev %d: exceeds umad cache size\n", dev_num);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   450
		return (1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   451
	}
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
	umad_dev_cache[dev_num].umc_port = port;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   454
	strcpy(umad_dev_cache[dev_num].umc_ib_dev, ibdev);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   455
	umad_dev_cache[dev_num].umc_valid = 1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   456
	umad_cache_cnt++;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   457
	return (0);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   458
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   459
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   460
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   461
umad_cache_init()
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
	int				i, fd, minor;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   464
	int				save_errno = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   465
	int				port_cnt, bufsize;
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   466
	char				umad_devpath[MAX_OFS_DEVPATH_LEN], *buf;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   467
	sol_umad_ioctl_info_t		*umad_infop;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   468
	sol_umad_ioctl_port_info_t	*port_infop;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   469
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
   470
	for (minor = 0; minor < MAX_PORTS; minor++) {
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   471
		snprintf(umad_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s%d",
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   472
		    IB_OFS_DEVPATH_PREFIX, UMAD_KERNEL_SYSFS_NAME_BASE,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   473
		    minor);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   474
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   475
		if ((fd = open(umad_devpath, O_RDWR)) > 0)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   476
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   477
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   478
		if ((! save_errno) && (errno != ENOENT))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   479
			save_errno = errno;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   480
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   481
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
   482
	if ((minor == MAX_PORTS) && (fd < 0)) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   483
		if (! save_errno)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   484
			save_errno = errno;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   485
		fprintf(stderr, "failed to open sol_umad: %s\n",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   486
		    strerror(save_errno));
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   487
		return (-1);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   488
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   489
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
   490
	bufsize = sizeof (sol_umad_ioctl_info_t) +
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
   491
	    (sizeof (sol_umad_ioctl_port_info_t) * MAX_PORTS);
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
   492
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   493
	buf = malloc(bufsize);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   494
	memset(buf, 0, bufsize);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   495
	umad_infop = (sol_umad_ioctl_info_t *)buf;
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
   496
	umad_infop->umad_port_cnt = MAX_PORTS;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   497
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   498
	if (ioctl(fd, IB_USER_MAD_GET_PORT_INFO, umad_infop) != 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   499
		fprintf(stderr, "sol_umad ioctl failed: %s\n",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   500
		    strerror(errno));
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
   501
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   502
		goto error_exit;
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 (umad_infop->umad_solaris_abi_version !=
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   506
	    IB_USER_MAD_SOLARIS_ABI_VERSION) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   507
		fprintf(stderr, "sol_umad solaris_abi_version !="
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   508
		    "IB_USER_MAD_SOLARIS_ABI_VERSION : %d\n",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   509
		    umad_infop->umad_solaris_abi_version);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   510
		goto error_exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   511
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   512
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   513
	/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   514
	 * set port_cnt to the number of total ports for all HCAs returned
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   515
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   516
	port_cnt = umad_infop->umad_port_cnt;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   517
	port_infop = umad_infop->umad_port_info;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   518
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   519
	if (umad_abi_version == -1)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   520
		umad_abi_version = umad_infop->umad_abi_version;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   521
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   522
	for (i = 0; i < port_cnt; i++, port_infop++) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   523
		if (umad_cache_add(port_infop->umad_port_idx,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   524
		    port_infop->umad_port_num,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   525
		    port_infop->umad_port_ibdev_name)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   526
			fprintf(stderr, "failed to add dev %d to umad cache",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   527
			    port_infop->umad_port_idx);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   528
			goto error_exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   529
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   530
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   531
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   532
	free(buf);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   533
	close(fd);
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   534
	return (0);
369
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
error_exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   537
	free(buf);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   538
	close(fd);
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   539
	return (-1);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   540
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   541
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   542
void
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   543
initialize(void)
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
	int		fd, minor;
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   546
	char		uverbs_devpath[MAX_OFS_DEVPATH_LEN];
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   547
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   548
	/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   549
	 * find the first sol_uverbs minor node that can be opened successfully
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   550
	 * and set sol_uverbs_mino_dev to that minor no.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   551
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   552
	for (minor = 0; minor < MAX_HCAS; minor++) {
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   553
		snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s%d",
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   554
		    IB_OFS_DEVPATH_PREFIX, UVERBS_KERNEL_SYSFS_NAME_BASE,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   555
		    minor);
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
		if ((fd = open(uverbs_devpath, O_RDWR)) < 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   558
			continue;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   559
		} else {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   560
			sol_uverbs_drv_status = SOL_UVERBS_DRV_STATUS_LOADED;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   561
			sol_uverbs_minor_dev = minor;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   562
			close(fd);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   563
			break;
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
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   566
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   567
	/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   568
	 * All minor nodes failed to open, so set sol_uverbs_drv_status to
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   569
	 * SOL_UVERBS_DRV_STATUS_UNLOADED to reflect that
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   570
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   571
	if (minor == MAX_HCAS && sol_uverbs_minor_dev == -1) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   572
		sol_uverbs_drv_status = SOL_UVERBS_DRV_STATUS_UNLOADED;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   573
		return;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   574
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   575
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   576
	memset(&ibdev_cache, 0, (sizeof (ibdev_cache_info_t) * MAX_HCAS));
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   577
	memset(&umad_dev_cache, 0,
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
   578
	    (sizeof (umad_cache_info_t) * MAX_PORTS));
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   579
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   580
	initialized = B_TRUE;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   581
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   582
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   583
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   584
 * Some sysfs emulation software
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   585
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   586
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   587
/*
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   588
 * Extract the HCA dev name from the path and remove it from the path.
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   589
 * Given a path extract the HCA dev name of the form <dev-prefix><dev-instance>
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   590
 * During parsing the device instance number is validated to make sure it is
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   591
 * within MAX_HCAS limit, the routine also skips over the duplicate slashes.
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   592
 */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   593
static int
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   594
check_path_for_hca(char *path, char *device_name)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   595
{
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   596
	int pos = 0;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   597
	int len;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   598
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   599
	while ((path[pos] != '/') || (path[pos] == '\0'))
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   600
		pos++;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   601
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   602
	if (path[pos] != '/')
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   603
		return (0);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   604
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   605
	strncpy(device_name, path, (pos + 1));
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   606
	device_name[pos] = '\0';
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   607
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   608
	if (get_device_num(device_name) < 0)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   609
		return (0);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   610
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   611
	while (path[pos] == '/')
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   612
		pos++;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   613
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   614
	len = strlen(path);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   615
	memmove(path, &path[pos], (len - pos) + 1);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   616
	return (1);
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   617
}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   618
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   619
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   620
 * Check whether a path starts with prefix, and if it does, remove it
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   621
 * from the string. The prefix can also contain one %d scan argument.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   622
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   623
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   624
check_path(char *path, cp_prefix_t prefix, unsigned int *arg)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   625
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   626
	int	ret, pos = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   627
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   628
	switch (prefix) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   629
		case CP_SOL_UVERBS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   630
			ret = sscanf(path, "uverbs%d%n/", arg,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   631
			    &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   632
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   633
		case CP_DEVICE:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   634
			ret = sscanf(path, "device%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   635
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   636
		case CP_D:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   637
			ret = sscanf(path, "%d%n/", arg, &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   638
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   639
		case CP_GIDS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   640
			ret = sscanf(path, "gids%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   641
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   642
		case CP_PKEYS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   643
			ret = sscanf(path, "pkeys%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   644
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   645
		case CP_PORTS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   646
			ret = sscanf(path, "ports%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   647
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   648
		case CP_UMAD:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   649
			ret = sscanf(path, "umad%d%n/", arg, &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   650
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   651
		case CP_SLASH:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   652
			ret = sscanf(path, "%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   653
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   654
		case CP_SYS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   655
			ret = sscanf(path, "sys%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   656
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   657
		case CP_CLASS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   658
			ret = sscanf(path, "class%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   659
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   660
		case CP_INFINIBAND_VERBS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   661
			ret = sscanf(path, "infiniband_verbs%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   662
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   663
		case CP_INFINIBAND:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   664
			ret = sscanf(path, "infiniband%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   665
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   666
		case CP_INFINIBAND_MAD:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   667
			ret = sscanf(path, "infiniband_mad%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   668
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   669
		case CP_MISC:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   670
			ret = sscanf(path, "misc%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   671
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   672
		case CP_RDMA_CM:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   673
			ret = sscanf(path, "rdma_cm%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   674
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   675
		default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   676
			/* Unkown prefix */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   677
			return (0);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   678
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   679
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   680
	if (path[pos] == '/') {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   681
		/* Some requests have several consecutive slashes. */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   682
		while (path[pos] == '/')
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   683
			pos ++;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   684
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   685
		memmove(path, &path[pos], strlen(path)-pos+1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   686
		return (1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   687
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   688
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   689
	return (0);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   690
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   691
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   692
static ibdev_cache_info_t *
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   693
get_device_info(const char *devname)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   694
{
636
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   695
	ibdev_cache_info_t 	*info = NULL;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   696
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   697
	if (pthread_mutex_lock(&ibdev_cache_mutex) != 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   698
		fprintf(stderr, "failed: to acquire ibdev_cache_mutex %s\n",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   699
		    strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   700
		return (NULL);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   701
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   702
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   703
	if (ibdev_cache_initialized == B_FALSE) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   704
		if (ibdev_cache_init() != 0) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   705
			(void) pthread_mutex_unlock(&ibdev_cache_mutex);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   706
			fprintf(stderr, "failed to init ibdev_cache\n");
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   707
			return (NULL);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   708
		}
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   709
		ibdev_cache_initialized = B_TRUE;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   710
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   711
	(void) pthread_mutex_unlock(&ibdev_cache_mutex);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   712
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   713
	info = ibdev_cache_read_by_devname(devname);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   714
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   715
	return (info);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   716
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   717
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   718
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   719
 * Get the IB user verbs port info attributes for the specified device/port.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   720
 * If the address of a gid pointer is passed for "gid_table", the memory
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   721
 * will be allocated and the ports gid table and returned as well. The caller
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   722
 * must free this memory on successful completion.  If the address of a
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   723
 * pkey pointer is passed for "pkey_table", the memory will be allocated
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   724
 * and the ports pkey table returned as well.  The caller must free this
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   725
 * memory on successful completion.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   726
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   727
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   728
get_port_info(const char *devname, uint8_t port_num,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   729
    struct ibv_port_attr *port_attr, union ibv_gid **gid_table,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   730
    uint16_t **pkey_table)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   731
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   732
	struct ibv_device 	**root_dev_list, **dev_list = NULL;
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   733
	struct ibv_context	ctx;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   734
	union ibv_gid 		*gids = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   735
	uint16_t		*pkeys = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   736
	int 			i, num_dev, rv, ret = 1;
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   737
	char			uverbs_devpath[MAX_OFS_DEVPATH_LEN];
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   738
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   739
	root_dev_list = dev_list = ibv_get_device_list(&num_dev);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   740
	if (!dev_list) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   741
		fprintf(stderr, "No HCA devices found\n");
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   742
		goto error_exit1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   743
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   744
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   745
	for (i = 0; i < num_dev; i++, dev_list++) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   746
		if (strcmp(ibv_get_device_name(*dev_list), devname) == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   747
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   748
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   749
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   750
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   751
	if (i == num_dev) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   752
		fprintf(stderr, "failed to find %s\n", devname);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   753
		goto error_exit2;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   754
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   755
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   756
	snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s",
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   757
	    IB_OFS_DEVPATH_PREFIX, (*dev_list)->dev_name);
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   758
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   759
	ctx.device = *dev_list;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   760
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   761
	if ((ctx.cmd_fd = open(uverbs_devpath, O_RDWR)) < 0)
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   762
		goto error_exit2;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   763
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   764
	if (sol_ibv_query_port(&ctx, port_num, port_attr)) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   765
		fprintf(stderr, "failed to query dev %p, port %d\n",
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   766
		    &ctx, port_num);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   767
		goto error_exit3;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   768
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   769
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   770
	if (gid_table) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   771
		*gid_table = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   772
		gids = malloc(sizeof (union ibv_gid) * port_attr->gid_tbl_len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   773
		if (!gids)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   774
			goto error_exit3;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   775
		/*
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
   776
		 * set high bit of port_num to get all gids in one shot.
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   777
		 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   778
		port_num |= 0x80;
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   779
		rv = sol_ibv_query_gid(&ctx, port_num, port_attr->gid_tbl_len,
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
   780
		    gids);
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
   781
		if (rv != 0)
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
   782
			goto error_exit4;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   783
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   784
		*gid_table = gids;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   785
		gids = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   786
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   787
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   788
	if (pkey_table) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   789
		*pkey_table = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   790
		pkeys = malloc(sizeof (uint16_t) * port_attr->pkey_tbl_len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   791
		if (!pkeys)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   792
			goto error_exit4;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   793
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
   794
		/*
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
   795
		 * set high bit of port_num to get all pkeys in one shot.
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
   796
		 */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   797
		port_num |= 0x80;
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   798
		rv = sol_ibv_query_pkey(&ctx, port_num, port_attr->pkey_tbl_len,
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   799
		    pkeys);
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
   800
		if (rv != 0)
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
   801
			goto error_exit5;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   802
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   803
		*pkey_table = pkeys;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   804
		pkeys = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   805
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   806
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   807
	ret = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   808
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   809
	/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   810
	 * clean up and Return
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   811
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   812
error_exit5:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   813
	if (pkeys)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   814
		free(pkeys);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   815
error_exit4:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   816
	if (gids)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   817
		free(gids);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   818
error_exit3:
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   819
	if (ctx.cmd_fd > 0)
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
   820
		close(ctx.cmd_fd);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   821
error_exit2:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   822
	if (root_dev_list)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   823
		ibv_free_device_list(root_dev_list);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   824
error_exit1:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   825
	return (ret);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   826
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   827
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   828
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   829
 * In Solaris environments, the underlying hardware driver is opened to
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   830
 * perform the memory mapping operations of kernel allocated memory
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   831
 * into the users address space.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   832
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   833
int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   834
ibv_open_mmap_driver(char *dev_name)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   835
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   836
	int			fd;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   837
#ifndef _LP64
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   838
	int			tmpfd;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   839
#endif
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   840
	int			indx;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   841
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   842
	/*
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
   843
	 * Map the user verbs device (uverbs) to the associated
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   844
	 * hca device. ibdev_cache is indexed by uverbs device minor number
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   845
	 * so extracting the index here to refer to the ibdev_cache value,
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   846
	 */
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   847
	indx = strtol(dev_name + strlen(UVERBS_KERNEL_SYSFS_NAME_BASE),
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   848
	    NULL, 0);
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   849
	if (indx >= MAX_HCAS) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   850
		fprintf(stderr, "Invalid device %s\n", dev_name);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   851
		goto err_dev;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   852
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   853
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   854
	if (!ibdev_cache[indx].ibd_valid) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   855
		fprintf(stderr, "Invalid Device %s\n", dev_name);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   856
		goto err_dev;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   857
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   858
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   859
	fd = open(ibdev_cache[indx].ibd_hca_path, O_RDWR);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   860
	if (fd < 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   861
		goto err_dev;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   862
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   863
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   864
#ifndef _LP64
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   865
	/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   866
	 * libc can't handle fd's greater than 255,  in order to
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   867
	 * ensure that these values remain available make fd > 255.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   868
	 * Note: not needed for LP64
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   869
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   870
	tmpfd = fcntl(fd, F_DUPFD, 256);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   871
	if (tmpfd >=  0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   872
		(void) close(fd);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   873
		fd = tmpfd;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   874
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   875
#endif  /* _LP64 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   876
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   877
	if (fcntl(fd, F_SETFD, FD_CLOEXEC) < 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   878
		fprintf(stderr, "FD_CLOEXEC failed: %s\n", strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   879
		goto err_close;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   880
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   881
	return (fd);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   882
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   883
err_close:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   884
	close(fd);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   885
err_dev:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   886
	return (-1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   887
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   888
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   889
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   890
infiniband_verbs(char *path, char *buf, size_t size)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   891
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   892
	unsigned int		device_num;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   893
	int 			len = -1;
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   894
	ibdev_cache_info_t	*info_p;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   895
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   896
	if (pthread_mutex_lock(&ibdev_cache_mutex) != 0) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   897
		fprintf(stderr, "failed: to acquire ibdev_cache_mutex %s\n",
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   898
		    strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   899
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   900
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   901
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   902
	if (ibdev_cache_initialized == B_FALSE) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   903
		if (ibdev_cache_init() == 0)
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   904
			ibdev_cache_initialized = B_TRUE;
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
   905
		else {
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   906
			(void) pthread_mutex_unlock(&ibdev_cache_mutex);
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
   907
#ifdef	DEBUG
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   908
			fprintf(stderr, "failed: to init ibdev cache %s\n",
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
   909
			    strerror(errno));
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
   910
#endif
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   911
			goto exit;
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
   912
		}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   913
	}
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   914
	(void) pthread_mutex_unlock(&ibdev_cache_mutex);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   915
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   916
	if (check_path(path, CP_SOL_UVERBS, &device_num)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   917
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   918
		if (device_num >= MAX_HCAS) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   919
			fprintf(stderr, "Invalid path%s\n", path);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   920
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   921
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   922
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   923
		if (!ibdev_cache[device_num].ibd_valid)
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   924
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   925
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   926
		info_p = &ibdev_cache[device_num];
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   927
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   928
		if (check_path(path, CP_DEVICE, NULL)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   929
			/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   930
			 * Under Linux, this is a link to the PCI device entry
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   931
			 * in /sys/devices/pci...../....
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   932
			 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   933
			if (strcmp(path, "vendor") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   934
				len = 1 + sprintf(buf, "0x%x",
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   935
				    info_p->ibd_vendor_id);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   936
			} else if (strcmp(path, "device") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   937
				len = 1 + sprintf(buf, "0x%x",
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   938
				    info_p->ibd_device_id);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   939
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   940
		} else if (strcmp(path, "ibdev") == 0) {
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   941
			len = 1 + sprintf(buf, "%s", info_p->ibd_name);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   942
		} else if (strcmp(path, "abi_version") == 0) {
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
   943
			len = 1 + sprintf(buf, "%d", info_p->ibd_abi_version);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   944
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   945
	} else if (strcmp(path, "abi_version") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   946
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   947
		if (uverbs_abi_version == -1) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   948
			fprintf(stderr, "UVerbs ABI Version invalid\n");
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   949
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   950
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   951
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   952
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
   953
		len = 1 + sprintf(buf, "%d", uverbs_abi_version);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   954
	} else {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   955
		fprintf(stderr, "Unsupported read: %s\n", path);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   956
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   957
exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   958
	return (len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   959
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   960
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   961
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   962
infiniband_ports(char *path, char *buf, size_t size, char *dev_name)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   963
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   964
	int 			len = -1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   965
	unsigned int		port_num;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   966
	unsigned int		gid_num;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   967
	union ibv_gid		*gids;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   968
	uint64_t		subnet_prefix;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   969
	uint64_t		interface_id;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   970
	uint16_t		*pkeys;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   971
	unsigned int		pkey_num;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   972
	struct ibv_port_attr	port_attr;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   973
	float			rate;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   974
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   975
	if (!(check_path(path, CP_D, &port_num)))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   976
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   977
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   978
	if (check_path(path, CP_GIDS, NULL)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   979
		if (get_port_info(dev_name, port_num, &port_attr, &gids, NULL))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   980
				goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   981
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   982
		gid_num = atoi(path);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   983
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   984
		if (gid_num <  port_attr.gid_tbl_len) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   985
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   986
			subnet_prefix =
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   987
			    htonll(gids[gid_num].global.subnet_prefix);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   988
			interface_id =
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   989
			    htonll(gids[gid_num].global.interface_id);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   990
			len = 1 + sprintf(buf,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   991
			    "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   992
			    (unsigned)(subnet_prefix >>  48) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   993
			    (unsigned)(subnet_prefix >>  32) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   994
			    (unsigned)(subnet_prefix >>  16) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   995
			    (unsigned)(subnet_prefix >>   0) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   996
			    (unsigned)(interface_id  >>  48) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   997
			    (unsigned)(interface_id  >>  32) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   998
			    (unsigned)(interface_id  >>  16) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   999
			    (unsigned)(interface_id  >>   0) & 0xffff);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1000
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1001
		if (gids)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1002
			free(gids);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1003
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1004
	} else if (check_path(path, CP_PKEYS, NULL)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1005
		if (get_port_info(dev_name, port_num, &port_attr, NULL, &pkeys))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1006
				goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1007
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1008
		pkey_num = atoi(path);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1009
		if (pkey_num <  port_attr.pkey_tbl_len)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1010
			len = 1 + sprintf(buf, "0x%04x", pkeys[pkey_num]);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1011
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1012
		if (pkeys)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1013
			free(pkeys);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1014
	} else {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1015
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1016
		if (get_port_info(dev_name, port_num, &port_attr, NULL, NULL))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1017
				goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1018
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1019
		if (strcmp(path, "lid_mask_count") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1020
			len = 1 + sprintf(buf, "%d", port_attr.lmc);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1021
		} else if (strcmp(path, "sm_lid") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1022
			len = 1 + sprintf(buf, "0x%x", port_attr.sm_lid);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1023
		} else if (strcmp(path, "sm_sl") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1024
			len = 1 + sprintf(buf, "%d", port_attr.sm_sl);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1025
		} else if (strcmp(path, "lid") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1026
			len = 1 + sprintf(buf, "0x%x", port_attr.lid);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1027
		} else if (strcmp(path, "state") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1028
			switch (port_attr.state) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1029
				case IBV_PORT_NOP:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1030
					len = 1 + sprintf(buf, "%d: NOP",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1031
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1032
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1033
				case IBV_PORT_DOWN:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1034
					len = 1 + sprintf(buf, "%d: DOWN",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1035
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1036
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1037
				case IBV_PORT_INIT:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1038
					len = 1 + sprintf(buf, "%d: INIT",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1039
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1040
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1041
				case IBV_PORT_ARMED:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1042
					len = 1 + sprintf(buf, "%d: ARMED",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1043
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1044
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1045
				case IBV_PORT_ACTIVE:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1046
					len = 1 + sprintf(buf, "%d: ACTIVE",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1047
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1048
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1049
				case IBV_PORT_ACTIVE_DEFER:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1050
					len = 1 + sprintf(buf,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1051
					    "%d: ACTIVE_DEFER",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1052
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1053
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1054
				default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1055
					len = 1 + sprintf(buf, "%d: INVALID",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1056
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1057
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1058
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1059
		} else if (strcmp(path, "phys_state") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1060
			switch (port_attr.phys_state) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1061
				case 1:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1062
					len = 1 + sprintf(buf, "%d: Sleep",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1063
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1064
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1065
				case 2:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1066
					len = 1 + sprintf(buf, "%d: Polling",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1067
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1068
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1069
				case 3:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1070
					len = 1 + sprintf(buf, "%d: Disabled",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1071
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1072
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1073
				case 4:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1074
					len = 1 + sprintf(buf,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1075
					    "%d: PortConfigurationTraining",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1076
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1077
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1078
				case 5:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1079
					len = 1 + sprintf(buf, "%d: LinkUp",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1080
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1081
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1082
				case 6:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1083
					len = 1 + sprintf(buf,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1084
					    "%d: LinkErrorRecovery",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1085
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1086
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1087
				case 7:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1088
					len = 1 + sprintf(buf,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1089
					    "%d: Phy Test",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1090
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1091
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1092
				default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1093
					len = 1 + sprintf(buf, "%d: <unknown>",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1094
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1095
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1096
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1097
		} else if (strcmp(path, "rate") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1098
			/* rate = speed * width */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1099
			switch (port_attr.active_speed) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1100
			case 1:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1101
				rate = 2.5;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1102
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1103
			case 2:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1104
				rate = 5;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1105
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1106
			case 4:
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1107
				/* FALLTHROUGH */
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1108
			case 8:
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1109
				rate = 10;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1110
				break;
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1111
			case 16:
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1112
				rate = 14.0625;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1113
				break;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1114
			case 32:
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1115
				rate = 25.78125;
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1116
				break;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1117
			default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1118
				rate = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1119
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1120
			switch (port_attr.active_width) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1121
			case 1:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1122
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1123
			case 2:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1124
				rate = 4 * rate;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1125
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1126
			case 4:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1127
				rate = 8 * rate;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1128
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1129
			case 8:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1130
				rate = 12 * rate;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1131
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1132
			default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1133
				rate = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1134
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1135
			len = 1 + sprintf(buf, "%f", rate);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1136
		} else if (strcmp(path, "cap_mask") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1137
			len = 1 + sprintf(buf, "0x%08x",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1138
			    port_attr.port_cap_flags);
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1139
		} else if (strcmp(path, "link_layer") == 0) {
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1140
			switch (port_attr.link_layer) {
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1141
				case IBV_LINK_LAYER_UNSPECIFIED:
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1142
				case IBV_LINK_LAYER_INFINIBAND:
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1143
					len = 1 + sprintf(buf, "%s", "IB");
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1144
					break;
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1145
				case IBV_LINK_LAYER_ETHERNET:
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1146
					len =
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1147
					    1 + sprintf(buf, "%s", "Ethernet");
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1148
					break;
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1149
				default:
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1150
					len = 1 + sprintf(buf, "%s", "Unknown");
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1151
			}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1152
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1153
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1154
exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1155
	return (len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1156
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1157
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1158
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1159
infiniband(char *path, char *buf, size_t size)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1160
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1161
	int			len = -1;
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1162
	char			dev_name[MAXNAMELEN];
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1163
	ibdev_cache_info_t	*info;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1164
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1165
	memset(dev_name, 0, MAXNAMELEN);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1166
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1167
	if (!check_path_for_hca(path, dev_name))
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1168
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1169
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1170
	if (check_path(path, CP_PORTS, NULL)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1171
		len = infiniband_ports(path, buf, size, dev_name);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1172
	} else if (strcmp(path, "node_type") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1173
		len = 1 + sprintf(buf, "%d", IBV_NODE_CA);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1174
	} else {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1175
		if (!(info = get_device_info(dev_name)))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1176
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1177
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1178
		if (strcmp(path, "node_guid") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1179
			len = 1 + sprintf(buf, "%s", info->ibd_node_guid_str);
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1180
		} else if (strcmp(path, "node_guid_external") == 0) {
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1181
			len = 1 + sprintf(buf, "%s",
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1182
			    info->ibd_node_guid_external_str);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1183
		} else if (strcmp(path, "sys_image_guid") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1184
			len = 1 + sprintf(buf, "%s", info->ibd_sys_image_guid);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1185
		} else if (strcmp(path, "fw_ver") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1186
			len = 1 + sprintf(buf, "%s", info->ibd_fw_ver);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1187
		} else if (strcmp(path, "hw_rev") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1188
			len = 1 + sprintf(buf, "%d", info->ibd_hw_rev);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1189
		} else if (strcmp(path, "hca_type") == 0) {
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1190
			len = 1 + sprintf(buf, "%s", info->ibd_devid_string);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1191
		} else if (strcmp(path, "board_id") == 0) {
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1192
			len = 1 + sprintf(buf, "%s", info->ibd_boardid_string);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1193
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1194
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1195
exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1196
	return (len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1197
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1198
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1199
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1200
infiniband_mad(char *path, char *buf, size_t size)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1201
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1202
	int		len = -1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1203
	unsigned int	dev_num;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1204
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1205
	if (pthread_mutex_lock(&umad_cache_mutex) != 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1206
		fprintf(stderr, "failed: to acquire umad_cache_mutex %s\n",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1207
		    strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1208
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1209
	}
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1210
	if (umad_cache_initialized == B_FALSE) {
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1211
		if (umad_cache_init() == 0)
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1212
			umad_cache_initialized = B_TRUE;
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1213
		else {
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1214
			(void) pthread_mutex_unlock(&umad_cache_mutex);
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1215
#ifdef	DEBUG
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1216
			fprintf(stderr, "failed: to init umad cache %s\n",
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1217
			    strerror(errno));
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1218
#endif
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1219
			goto exit;
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1220
		}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1221
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1222
	(void) pthread_mutex_unlock(&umad_cache_mutex);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1223
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1224
	if (check_path(path, CP_UMAD, &dev_num)) {
3679
c058dce9610f 18117487 saquery -m -t 50000 failed with multiple VFs created
boris.chiu@oracle.com
parents: 3195
diff changeset
  1225
		if (dev_num >= MAX_PORTS) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1226
			fprintf(stderr, "Invalid Path: %s\n", path);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1227
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1228
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1229
		if (!umad_dev_cache[dev_num].umc_valid) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1230
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1231
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1232
		if (strcmp(path, "ibdev") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1233
			len = strlcpy(buf, umad_dev_cache[dev_num].umc_ib_dev,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1234
			    size) + 1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1235
		} else if (strcmp(path, "port") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1236
			len = 1 + sprintf(buf, "%d",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1237
			    umad_dev_cache[dev_num].umc_port);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1238
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1239
	} else if (strcmp(path, "abi_version") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1240
		if (umad_abi_version == -1) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1241
			fprintf(stderr, "UMAD ABI Version invalid\n");
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1242
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1243
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1244
		len =
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1245
		    1 + sprintf(buf, "%d", umad_abi_version);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1246
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1247
exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1248
	return (len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1249
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1250
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1251
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1252
 * Return -1 on error, or the length of the data (buf) on success.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1253
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1254
int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1255
sol_read_sysfs_file(char *path, char *buf, size_t size)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1256
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1257
	int 			len = -1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1258
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1259
	if (!initialized) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1260
		if (pthread_once(&oneTimeInit, initialize)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1261
			fprintf(stderr, "failed to initialize: %s\n",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1262
			    strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1263
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1264
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1265
		if (!initialized)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1266
			/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1267
			 * There was a problem in initialize()
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1268
			 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1269
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1270
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1271
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1272
	if (!check_path(path, CP_SLASH, NULL))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1273
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1274
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1275
	if (!check_path(path, CP_SYS, NULL))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1276
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1277
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1278
	if (!check_path(path, CP_CLASS, NULL))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1279
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1280
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1281
	if (check_path(path, CP_INFINIBAND_VERBS, NULL)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1282
		len = infiniband_verbs(path, buf, size);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1283
	} else if (check_path(path, CP_INFINIBAND, NULL)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1284
		len = infiniband(path, buf, size);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1285
	} else if (check_path(path, CP_INFINIBAND_MAD, NULL)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1286
		len = infiniband_mad(path, buf, size);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1287
	} else if (check_path(path, CP_MISC, NULL)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1288
		if (check_path(path, CP_RDMA_CM, NULL)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1289
			if (strcmp(path, "abi_version") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1290
				len = 1 + sprintf(buf, "%d",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1291
				    RDMA_USER_CM_MAX_ABI_VERSION);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1292
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1293
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1294
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1295
exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1296
	return (len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1297
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1298
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1299
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1300
int
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
  1301
sol_get_cpu_info(sol_cpu_info_t **info_p)
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1302
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1303
	kstat_t		*ksp;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1304
	kstat_named_t	*knp;
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
  1305
	uint_t		ncpus = 0, i;
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
  1306
	sol_cpu_info_t	*info;
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
  1307
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
  1308
	ncpus = sysconf(_SC_NPROCESSORS_ONLN);
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
  1309
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
  1310
	if (ncpus <= 0)
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
  1311
		return (0);
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
  1312
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
  1313
	if (!(*info_p = malloc(ncpus * sizeof (sol_cpu_info_t))))
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
  1314
		return (-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
  1315
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
  1316
	info = *info_p;
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
  1317
	bzero((void *)info, ncpus * sizeof (sol_cpu_info_t));
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
  1318
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
  1319
	for (i = 0; i < ncpus; i++) {
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
  1320
		if ((ksp = kstat_lookup(kc, "cpu_info", i, NULL)) == NULL) {
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
  1321
			if (i >= ncpus)
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
  1322
				goto err_exit;
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
  1323
			else
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
  1324
				continue;
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
  1325
		}
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
  1326
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
  1327
		if ((kstat_read(kc, ksp, NULL) == -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
  1328
			if (i >= ncpus)
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
  1329
				goto err_exit;
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
  1330
			else
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
  1331
				continue;
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
  1332
		}
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
  1333
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
  1334
		if ((knp = (kstat_named_t *)kstat_data_lookup(ksp, "brand"))
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
  1335
		    == NULL) {
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
  1336
			if (i >= ncpus)
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
  1337
				goto err_exit;
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
  1338
			else
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
  1339
				continue;
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
  1340
		}
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
  1341
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
  1342
		(void) strlcpy(info[i].cpu_name, knp->value.str.addr.ptr,
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
  1343
		    knp->value.str.len);
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
  1344
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
  1345
		if ((knp = (kstat_named_t *)kstat_data_lookup(ksp, "clock_MHz"))
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
  1346
		    == NULL) {
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
  1347
			if (i >= ncpus)
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
  1348
				goto err_exit;
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
  1349
			else
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
  1350
				continue;
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
  1351
		}
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
  1352
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
  1353
		info[i].cpu_mhz = knp->value.ui64;
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
  1354
		info[i].cpu_number = i;
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
  1355
	}
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
  1356
	return (ncpus);
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
  1357
err_exit:
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
  1358
	free(info);
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
  1359
	return (-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
  1360
}
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
  1361
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
  1362
int
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
  1363
sol_get_cpu_stats(sol_cpu_stats_t *stats)
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
  1364
{
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
  1365
	size_t		i, nr_cpus;
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
  1366
	kstat_t		*ksp;
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
  1367
	kstat_named_t	*knp;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1368
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1369
	memset(stats, 0, sizeof (sol_cpu_stats_t));
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
  1370
	nr_cpus = sysconf(_SC_NPROCESSORS_ONLN);
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
  1371
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
  1372
	/* Aggregate the value of all CPUs */
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
  1373
	for (i = 0; i < nr_cpus; i++) {
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
  1374
		/*
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
  1375
		 * In case of some cpu_id doesn't have kstat info.,
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
  1376
		 * skip it and continue if it isn't the last one.
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
  1377
		 */
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
  1378
		if ((ksp = kstat_lookup(kc, "cpu", i, "sys")) == NULL) {
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
  1379
			if (i >= nr_cpus)
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
  1380
				return (-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
  1381
			else
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
  1382
				continue;
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
  1383
		}
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
  1384
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
  1385
		if (kstat_read(kc, ksp, NULL) == -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
  1386
			if (i >= nr_cpus)
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
  1387
				return (-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
  1388
			else
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
  1389
				continue;
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
  1390
		}
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
  1391
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
  1392
		if ((knp = (kstat_named_t *)
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
  1393
		    kstat_data_lookup(ksp, "cpu_ticks_user")) == NULL) {
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
  1394
			if (i >= nr_cpus)
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
  1395
				return (-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
  1396
			else
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
  1397
				continue;
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
  1398
		}
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
  1399
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
  1400
		stats->t_user += knp->value.ui64;
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
  1401
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
  1402
		if ((knp = (kstat_named_t *)
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
  1403
		    kstat_data_lookup(ksp, "cpu_ticks_kernel")) == NULL) {
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
  1404
			if ((knp == NULL) && i >= nr_cpus)
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
  1405
				return (-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
  1406
			else
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
  1407
				continue;
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
  1408
		}
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
  1409
		stats->t_kernel += knp->value.ui64;
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
  1410
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
  1411
		if ((knp = (kstat_named_t *)
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
  1412
		    kstat_data_lookup(ksp, "cpu_ticks_idle")) == NULL) {
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
  1413
			if (i >= nr_cpus)
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
  1414
				return (-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
  1415
			else
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
  1416
				continue;
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
  1417
		}
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
  1418
		stats->t_idle += knp->value.ui64;
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
  1419
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
  1420
		if ((knp = (kstat_named_t *)
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
  1421
		    kstat_data_lookup(ksp, "cpu_ticks_wait")) == NULL) {
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
  1422
			if (i >= nr_cpus)
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
  1423
				return (-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
  1424
			else
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
  1425
				continue;
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
  1426
		}
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
  1427
		stats->t_iowait += knp->value.ui64;
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
  1428
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
  1429
		if ((knp = (kstat_named_t *)
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
  1430
		    kstat_data_lookup(ksp, "cpu_nsec_intr")) == NULL) {
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
  1431
			if (i >= nr_cpus)
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
  1432
				return (-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
  1433
			else
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
  1434
				continue;
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
  1435
		}
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
  1436
		stats->t_intr += knp->value.ui64;	/* This is in NSEC */
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
  1437
	}
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
  1438
	return (0);
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
  1439
}
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
  1440
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
  1441
int
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
  1442
sol_ibv_query_gid(struct ibv_context *context, uint8_t port_num, int index,
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
  1443
    union ibv_gid *gid)
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
  1444
{
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1445
	int			count, start;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1446
	sol_uverbs_gid_t	*uverbs_gidp;
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
  1447
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1448
	/*
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
  1449
	 * Not exported via sysfs, use ioctl.
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1450
	 */
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
  1451
	if (!context || !gid || (index < 0) ||
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
  1452
	    ((port_num & 0x80) && (index == 0)))
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1453
		return (-1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1454
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
  1455
	if (port_num & 0x80) {
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
  1456
		start = 0;
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
  1457
		count = index;
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
  1458
	} else {
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
  1459
		start = index;
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
  1460
		count = 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
  1461
	}
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
  1462
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
  1463
	uverbs_gidp = (sol_uverbs_gid_t *)malloc(count *
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
  1464
	    sizeof (union ibv_gid) + sizeof (sol_uverbs_gid_t));
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
  1465
	if (uverbs_gidp == NULL) {
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
  1466
		return (-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
  1467
	}
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
  1468
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
  1469
	uverbs_gidp->uverbs_port_num = port_num & 0x7F;
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
  1470
	uverbs_gidp->uverbs_gid_cnt = count;
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
  1471
	uverbs_gidp->uverbs_gid_start_index = start;
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
  1472
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1473
	if (ioctl(context->cmd_fd, UVERBS_IOCTL_GET_GIDS, uverbs_gidp) != 0) {
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
  1474
#ifdef	DEBUG
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
  1475
		fprintf(stderr, "UVERBS_IOCTL_GET_GIDS failed: %s\n",
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
  1476
		    strerror(errno));
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
  1477
#endif
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
  1478
		goto gid_error_exit;
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
  1479
	}
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
  1480
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
  1481
	if (uverbs_gidp->uverbs_solaris_abi_version !=
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
  1482
	    IB_USER_VERBS_SOLARIS_ABI_VERSION) {
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
  1483
#ifdef	DEBUG
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
  1484
		fprintf(stderr, "sol_uverbs solaris_abi_version != "
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
  1485
		    "IB_USER_VERBS_SOLARIS_ABI_VERSION : %d\n",
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
  1486
		    uverbs_gidp->uverbs_solaris_abi_version);
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
  1487
#endif
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
  1488
		goto gid_error_exit;
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
  1489
	}
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
  1490
	memcpy(gid, uverbs_gidp->uverbs_gids, sizeof (union ibv_gid) * count);
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
  1491
	free(uverbs_gidp);
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
  1492
	return (0);
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
  1493
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
  1494
gid_error_exit:
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
  1495
	free(uverbs_gidp);
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
  1496
	return (-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
  1497
}
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
  1498
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
  1499
int
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
  1500
sol_ibv_query_pkey(struct ibv_context *context, uint8_t port_num,
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
  1501
    int index, uint16_t *pkey)
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
  1502
{
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1503
	int			count, start;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1504
	sol_uverbs_pkey_t	*uverbs_pkeyp;
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
  1505
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
  1506
	/*
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
  1507
	 * Not exported via sysfs, use ioctl.
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
  1508
	 */
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
  1509
	if (!context || !pkey || (index < 0) ||
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
  1510
	    ((port_num & 0x80) && (index == 0)))
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1511
		return (-1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1512
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1513
	if (context->cmd_fd < 0)
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
  1514
		return (-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
  1515
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
  1516
	if (port_num & 0x80) {
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
  1517
		start = 0;
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
  1518
		count = index;
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
  1519
	} else {
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
  1520
		start = index;
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
  1521
		count = 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
  1522
	}
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
  1523
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
  1524
	uverbs_pkeyp = (sol_uverbs_pkey_t *)malloc(count *
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
  1525
	    sizeof (uint16_t) + sizeof (sol_uverbs_pkey_t));
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
  1526
	if (uverbs_pkeyp == NULL) {
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
  1527
		return (-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
  1528
	}
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
  1529
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
  1530
	uverbs_pkeyp->uverbs_port_num = port_num & 0x7F;
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
  1531
	uverbs_pkeyp->uverbs_pkey_cnt = count;
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
  1532
	uverbs_pkeyp->uverbs_pkey_start_index = start;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1533
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1534
	if (ioctl(context->cmd_fd, UVERBS_IOCTL_GET_PKEYS, uverbs_pkeyp) != 0) {
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
  1535
#ifdef	DEBUG
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
  1536
		fprintf(stderr, "UVERBS_IOCTL_GET_PKEYS failed: %s\n",
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
  1537
		    strerror(errno));
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
  1538
#endif
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
  1539
		goto pkey_error_exit;
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
  1540
	}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1541
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
  1542
	if (uverbs_pkeyp->uverbs_solaris_abi_version !=
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
  1543
	    IB_USER_VERBS_SOLARIS_ABI_VERSION) {
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
  1544
#ifdef	DEBUG
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
  1545
		fprintf(stderr, "sol_uverbs solaris_abi_version != "
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
  1546
		    "IB_USER_VERBS_SOLARIS_ABI_VERSION : %d\n",
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
  1547
		    uverbs_pkeyp->uverbs_solaris_abi_version);
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
  1548
#endif
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
  1549
		goto pkey_error_exit;
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
  1550
	}
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
  1551
	memcpy(pkey, uverbs_pkeyp->uverbs_pkey, sizeof (uint16_t) * count);
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
  1552
	free(uverbs_pkeyp);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1553
	return (0);
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
  1554
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
  1555
pkey_error_exit:
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
  1556
	free(uverbs_pkeyp);
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
  1557
	return (-1);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1558
}
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1559
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1560
int
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1561
sol_ibv_query_device(struct ibv_device *device, struct ibv_device_attr *attr)
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1562
{
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1563
	struct ibv_query_device cmd;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1564
	struct ibv_context	context;
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1565
	char			uverbs_devpath[MAX_OFS_DEVPATH_LEN];
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1566
	int			ret;
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1567
	uint64_t		raw_fw_ver;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1568
	unsigned		major, minor, sub_minor;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1569
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1570
	context.device = device;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1571
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1572
	if (!device || !attr)
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1573
		return (-1);
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1574
4996
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1575
	snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s",
739983ef315c PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 3679
diff changeset
  1576
	    IB_OFS_DEVPATH_PREFIX, device->dev_name);
3195
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1577
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1578
	if ((context.cmd_fd = open(uverbs_devpath, O_RDWR)) <  0)
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1579
		return (-1);
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1580
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1581
	ret = ibv_cmd_query_device(&context, attr, &raw_fw_ver, &cmd,
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1582
	    sizeof (cmd));
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1583
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1584
	if (ret)
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1585
		return (ret);
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1586
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1587
	major	  = (raw_fw_ver >> 32) & 0xffff;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1588
	minor	  = (raw_fw_ver >> 16) & 0xffff;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1589
	sub_minor = raw_fw_ver & 0xffff;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1590
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1591
	snprintf(attr->fw_ver, sizeof (attr->fw_ver),
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1592
	    "%d.%d.%03d", major, minor, sub_minor);
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1593
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1594
	close(context.cmd_fd);
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1595
	return (0);
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1596
}
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1597
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1598
int
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1599
sol_ibv_query_port(struct ibv_context *context, uint8_t port,
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1600
    struct ibv_port_attr *attr)
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1601
{
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1602
	struct	ibv_query_port cmd;
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1603
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1604
	return (ibv_cmd_query_port(context, port, attr, &cmd, sizeof (cmd)));
cf6a5a756b74 15695368 SUNBT7017250 man page from rds-stress has incorect entry for rdma bytes transmi
Boris Chiu <boris.chiu@oracle.com>
parents: 2869
diff changeset
  1605
}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1606
#endif