components/open-fabrics/libibverbs/solaris_compatibility.c
author boris.chiu@oracle.com
Fri, 17 Jul 2015 12:11:28 -0700
changeset 4661 353f8a998732
parent 2187 391c8a50fa82
child 4835 d5abd56e3fcf
permissions -rw-r--r--
PSARC 2015/310 IBTF and OFUV updates 20735273 libibverbs must support AH interfaces for PSIF 21055860 ib_write_bw/ib_send_bw not sending inline data for non-hermon hcas 20889536 remove some compiler warnings in libibverbs 21351609 Some sol_uverbs <-> libibverbs cmd/resp API structs not 64 bit aligned 20888202 remove Mellanox specific code from libibverbs 20449637 Open Fabrics tools/utilities should be LP64 only 20549008 open-fabrics should move from gcc3 to gcc4 21218536 qperf randomly cores when compiled with gcc 4.8.2
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
/*
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
     2
 * Copyright (c) 2010, 2015, 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"
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
    55
#include "../include/infiniband/kern-abi.h"
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
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
1411
1fedef581c16 17199356 The ibv_devinfo command cannot print the board_id of CX-3 IB-HCA (userland)
Boris Chiu <Boris.Chiu@Oracle.COM>
parents: 851
diff changeset
    61
#define	min(a, b)	((a) < (b) ? (a) : (b))
1fedef581c16 17199356 The ibv_devinfo command cannot print the board_id of CX-3 IB-HCA (userland)
Boris Chiu <Boris.Chiu@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
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
    70
/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
    71
 * Some useful definitions.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
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"
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
    78
#define	IB_HCA_DEVPATH_SZ			64
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
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
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
    81
#define	MAX_HCAS				(64*16)
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
    82
#define	MAX_PORTS				(MAX_HCAS*2)
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
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
/*
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
    97
 * Ugly, evil and rest of the names that qualify for it.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
    98
 * This is a side definition for the uverbs hca_info till the
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
    99
 * new header file can appear in the userland build environment once that
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   100
 * happens this code will go.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   101
 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   102
#if	(IB_USER_VERBS_SOLARIS_ABI_VERSION == 2)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   103
#undef	IB_USER_VERBS_SOLARIS_ABI_VERSION
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   104
#define	IB_USER_VERBS_SOLARIS_ABI_VERSION	3
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   105
#define	__VERBS_COMPAT_MODE	1
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   106
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   107
/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   108
 * Some useful definitions.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   109
 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   110
#define	PSID_STR_SZ		40
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   111
#define	IBDEV_NAME_SZ		64
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   112
#define	HCA_DRIVER_NAME_SZ	40
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   113
#define	DEVID_STR_SZ		40
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   114
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   115
/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   116
 * These are duplicate definitions to help the build complete on userland
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   117
 * build machines till the header files are populated with the new versions.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   118
 * Once the new header file is available in the build system this code will
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   119
 * be removed.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   120
 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   121
typedef struct sol_uverbs_hca_infov3_s {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   122
	char		uverbs_hca_psid_string[PSID_STR_SZ];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   123
	char		uverbs_hca_ibdev_name[IBDEV_NAME_SZ];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   124
	char		uverbs_hca_driver_name[HCA_DRIVER_NAME_SZ];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   125
	uint32_t	uverbs_hca_driver_instance;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   126
	uint32_t	uverbs_hca_vendorid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   127
	uint16_t	uverbs_hca_deviceid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   128
	uint16_t	uverbs_hca_devidx;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   129
	int32_t		uverbs_hca_abi_version;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   130
	uint64_t	uverbs_hca_fw_ver;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   131
	uint64_t	uverbs_hca_node_guid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   132
	uint64_t	uverbs_hca_node_external_guid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   133
	uint64_t	uverbs_hca_sys_image_guid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   134
	uint32_t	uverbs_hca_hw_version;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   135
	uint8_t		uverbs_hca_pad1[4];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   136
	char		uverbs_hca_devid_string[DEVID_STR_SZ];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   137
} sol_uverbs_hca_infov3_t;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   138
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   139
typedef struct sol_uverbs_info_v3_s {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   140
	int32_t			uverbs_abi_version;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   141
	int32_t			uverbs_solaris_abi_version;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   142
	int16_t			uverbs_hca_cnt;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   143
	int8_t			uverbs_pad1[6]; /* Padding for alignment */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   144
	sol_uverbs_hca_infov3_t uverbs_hca_info[];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   145
} sol_uverbs_infov3_t;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   146
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   147
#define	SIZEOF_UVERBS_INFO	(sizeof (sol_uverbs_infov3_t))
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   148
#define	SIZEOF_HCA_INFO		(sizeof (sol_uverbs_hca_infov3_t))
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   149
#define	UVERBS_INFO(x)		((sol_uverbs_infov3_t *)x)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   150
#define	HCA_INFO(x)		((sol_uverbs_hca_infov3_t *)x)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   151
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   152
#else /* (IB_USER_VERBS_SOLARIS_ABI_VERSION == 3) */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   153
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   154
#define	SIZEOF_UVERBS_INFO	(sizeof (sol_uverbs_info_t))
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   155
#define	SIZEOF_HCA_INFO		(sizeof (sol_uverbs_hca_info_t))
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   156
#define	UVERBS_INFO(x)		((sol_uverbs_info_t *)x)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   157
#define	HCA_INFO(x)		((sol_uverbs_hca_info_t *)x)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   158
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   159
#endif /* END */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   160
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   161
/*
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   162
 * check_path() prefixs
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   163
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   164
typedef enum cp_prefix_e {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   165
	CP_SOL_UVERBS		= 1,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   166
	CP_DEVICE		= 2,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   167
	CP_D			= 3,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   168
	CP_GIDS			= 4,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   169
	CP_PKEYS		= 5,
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   170
	CP_PORTS		= 6,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   171
	CP_UMAD			= 7,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   172
	CP_SLASH		= 8,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   173
	CP_SYS			= 9,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   174
	CP_CLASS		= 10,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   175
	CP_INFINIBAND_VERBS	= 11,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   176
	CP_INFINIBAND		= 12,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   177
	CP_INFINIBAND_MAD	= 13,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   178
	CP_MISC			= 14,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   179
	CP_RDMA_CM		= 15
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   180
} cp_prefix_t;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   181
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   182
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   183
 * 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
   184
 * 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
   185
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   186
typedef struct ibdev_cache_info_s {
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   187
	boolean_t			ibd_valid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   188
	uint_t				ibd_hw_rev;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   189
	uint_t				ibd_abi_version;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   190
	uint_t				ibd_vendor_id;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   191
	uint_t				ibd_device_id;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   192
	char				ibd_hca_path[IB_HCA_DEVPATH_SZ];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   193
	char				ibd_node_guid_str[20];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   194
	char				ibd_node_guid_external_str[20];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   195
	char				ibd_sys_image_guid[20];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   196
	char				ibd_fw_ver[16];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   197
	char				ibd_name[IBDEV_NAME_SZ];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   198
	char				ibd_boardid_string[PSID_STR_SZ];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   199
	char				ibd_devid_string[DEVID_STR_SZ];
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   200
} ibdev_cache_info_t;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   201
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   202
/* IB device info cache */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   203
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
   204
static int			uverbs_abi_version = -1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   205
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   206
typedef struct umad_cache_info_s {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   207
	uint_t		umc_valid;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   208
	int		umc_port;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   209
	char		umc_ib_dev[16];
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   210
} umad_cache_info_t;
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
   211
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
   212
static int			umad_abi_version = -1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   213
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   214
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
   215
static int 		umad_cache_cnt = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   216
static boolean_t	initialized = B_FALSE;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   217
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
   218
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
   219
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
   220
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
   221
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
   222
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
   223
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
   224
void __attribute__((constructor))solaris_init(void);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   225
void __attribute__((destructor))solaris_fini(void);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   226
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   227
int sol_ibv_query_device(struct ibv_device *device,
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   228
    struct ibv_device_attr *device_attr);
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   229
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   230
int sol_ibv_query_port(struct ibv_context *, uint8_t, struct ibv_port_attr *);
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   231
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   232
void
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   233
solaris_init(void)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   234
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   235
	while ((kc = kstat_open()) == NULL) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   236
		if (errno == EAGAIN)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   237
			(void) poll(NULL, 0, 200);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   238
		else
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   239
			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
   240
			    strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   241
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   242
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   243
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   244
void
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   245
solaris_fini(void)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   246
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   247
	(void) kstat_close(kc);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   248
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   249
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   250
#define	isdigit(c)	((c) >= '0' && (c) <= '9')
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   251
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   252
/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   253
 * Given a device name of the form <driver-prefix><instance>,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   254
 * get the device number. Device name is of the form
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   255
 * for example:- mlx4_0, mlx4_2 etc. Function will return the device instance
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   256
 * extracted from the name.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   257
 * for example:- mlx4_0 will return 0 and mlx4_2 will return 2.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   258
 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   259
static int
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   260
get_device_num(const char *device_name)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   261
{
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   262
	const char *temp;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   263
	const char *end;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   264
	const char *start = device_name;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   265
	int len;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   266
	int devnum;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   267
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   268
	if (!start)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   269
		return (-1);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   270
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   271
	len = strlen(device_name);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   272
	end = &device_name[len - 1];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   273
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   274
	for (temp = end; temp >= start && isdigit(*temp); temp--)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   275
		/* Null body */;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   276
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   277
	/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   278
	 * Check if the device number is invalid.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   279
	 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   280
	if (temp == end || temp < start)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   281
		return (-1);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   282
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   283
	devnum = atoi(temp + 1);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   284
	if (devnum < 0 || devnum >= MAX_HCAS)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   285
		return (-1);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   286
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   287
	return (devnum);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   288
}
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   289
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   290
/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   291
 * For usages where ibdev cache needs to be read based on the IB device
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   292
 * name instead of uverbs device name a simple compare against the cache
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   293
 * entries is used to retrieve the corresponding ibdev cache entry.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   294
 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   295
static ibdev_cache_info_t *
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   296
ibdev_cache_read_by_devname(const char *devname)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   297
{
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   298
	int idx;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   299
	ibdev_cache_info_t *cache = NULL;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   300
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   301
	if (!devname)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   302
		return (NULL);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   303
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   304
	for (idx = 0; idx < MAX_HCAS; idx++) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   305
		cache = &ibdev_cache[idx];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   306
		if (strcmp(cache->ibd_name, devname) == 0)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   307
			break;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   308
	}
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   309
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   310
	/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   311
	 * If we failed to find an entry return NULL.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   312
	 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   313
	if (idx == MAX_HCAS)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   314
		cache = NULL;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   315
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   316
	return (cache);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   317
}
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   318
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   319
/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   320
 * Helper function to update the ibdev cache entries with the values obtained
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   321
 * from the uverbs HCA info ioctl.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   322
 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   323
static int
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   324
ibdev_cache_init()
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   325
{
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   326
	ibdev_cache_info_t		*info;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   327
	int				fd, i, hca_cnt;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   328
	char				uverbs_devpath[MAX_OFS_DEVPATH_LEN];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   329
#ifdef	__VERBS_COMPAT_MODE
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   330
	sol_uverbs_infov3_t		*uverbs_infop;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   331
	sol_uverbs_hca_infov3_t		*hca_infop;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   332
#else
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   333
	sol_uverbs_info_t		*uverbs_infop;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   334
	sol_uverbs_hca_info_t		*hca_infop;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   335
#endif /* END __VERBS_COMPAT_MODE */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   336
	char 				*buf;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   337
	size_t				bufsize;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   338
	uint16_t			major, minor, sub_minor;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   339
	uint64_t			raw_fw_ver;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   340
	uint64_t			guid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   341
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   342
	snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s%d",
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   343
	    IB_OFS_DEVPATH_PREFIX, UVERBS_KERNEL_SYSFS_NAME_BASE,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   344
	    sol_uverbs_minor_dev);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   345
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   346
	/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   347
	 * using the first sol_uverbs minor node that can be opened to get
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   348
	 * all the HCA information
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   349
	 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   350
	if ((fd = open(uverbs_devpath, O_RDWR)) < 0) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   351
		fprintf(stderr, "sol_uverbs failed to open: %s\n",
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   352
		    strerror(errno));
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   353
		return (-1);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   354
	}
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   355
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   356
	bufsize = SIZEOF_UVERBS_INFO + (MAX_HCAS * SIZEOF_HCA_INFO);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   357
	buf = malloc(bufsize);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   358
	if (!buf) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   359
		fprintf(stderr, "ibdev_cache_update() failed to alloc\n");
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   360
		close(fd);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   361
		return (-1);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   362
	}
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   363
	memset(buf, 0, bufsize);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   364
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   365
	uverbs_infop = UVERBS_INFO(buf);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   366
	uverbs_infop->uverbs_hca_cnt = MAX_HCAS;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   367
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   368
	if (ioctl(fd, UVERBS_IOCTL_GET_HCA_INFO, uverbs_infop) != 0) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   369
		fprintf(stderr, "sol_uverbs ioctl failed: %s\n",
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   370
		    strerror(errno));
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   371
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   372
		goto error_exit1;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   373
	}
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   374
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   375
	if (uverbs_infop->uverbs_solaris_abi_version !=
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   376
	    IB_USER_VERBS_SOLARIS_ABI_VERSION) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   377
		fprintf(stderr, "sol_uverbs solaris_abi_version !="
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   378
		    "IB_USER_VERBS_SOLARIS_ABI_VERSION : %d\n",
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   379
		    uverbs_infop->uverbs_solaris_abi_version);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   380
		goto error_exit1;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   381
	}
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   382
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   383
	hca_cnt = uverbs_infop->uverbs_hca_cnt;	/* hca count returned */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   384
	hca_infop = uverbs_infop->uverbs_hca_info;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   385
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   386
	if (hca_cnt > MAX_HCAS) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   387
		fprintf(stderr, "Number of HCAs returned exceeds max\n");
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   388
		goto error_exit1;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   389
	}
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   390
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   391
	if (uverbs_abi_version == -1)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   392
		uverbs_abi_version = uverbs_infop->uverbs_abi_version;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   393
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   394
	for (i = 0; i < hca_cnt; i++, hca_infop++) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   395
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   396
		/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   397
		 * Update the cache.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   398
		 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   399
		info = &ibdev_cache[hca_infop->uverbs_hca_devidx];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   400
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   401
		(void) strncpy(info->ibd_name,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   402
		    hca_infop->uverbs_hca_ibdev_name, IBDEV_NAME_SZ);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   403
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   404
		guid = hca_infop->uverbs_hca_node_guid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   405
		sprintf(info->ibd_node_guid_str, "%04x:%04x:%04x:%04x",
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   406
		    (unsigned)(guid >> 48) & 0xffff,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   407
		    (unsigned)(guid >> 32) & 0xffff,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   408
		    (unsigned)(guid >> 16) & 0xffff,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   409
		    (unsigned)(guid >>  0) & 0xffff);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   410
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   411
		guid = hca_infop->uverbs_hca_node_external_guid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   412
		sprintf(info->ibd_node_guid_external_str, "%04x:%04x:%04x:%04x",
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   413
		    (unsigned)(guid >> 48) & 0xffff,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   414
		    (unsigned)(guid >> 32) & 0xffff,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   415
		    (unsigned)(guid >> 16) & 0xffff,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   416
		    (unsigned)(guid >>  0) & 0xffff);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   417
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   418
		guid = hca_infop->uverbs_hca_sys_image_guid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   419
		sprintf(info->ibd_sys_image_guid, "%04x:%04x:%04x:%04x",
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   420
		    (unsigned)(guid >> 48) & 0xffff,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   421
		    (unsigned)(guid >> 32) & 0xffff,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   422
		    (unsigned)(guid >> 16) & 0xffff,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   423
		    (unsigned)(guid >>  0) & 0xffff);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   424
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   425
		raw_fw_ver = hca_infop->uverbs_hca_fw_ver;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   426
		major	   = (raw_fw_ver >> 32) & 0xffff;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   427
		minor	   = (raw_fw_ver >> 16) & 0xffff;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   428
		sub_minor  = raw_fw_ver & 0xffff;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   429
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   430
		snprintf(info->ibd_fw_ver, sizeof (info->ibd_fw_ver),
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   431
		    "%d.%d.%03d", major, minor, sub_minor);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   432
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   433
		info->ibd_hw_rev	= hca_infop->uverbs_hca_hw_version;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   434
		info->ibd_vendor_id	= hca_infop->uverbs_hca_vendorid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   435
		info->ibd_device_id	= hca_infop->uverbs_hca_deviceid;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   436
		info->ibd_abi_version	= hca_infop->uverbs_hca_abi_version;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   437
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   438
		snprintf(info->ibd_hca_path, sizeof (info->ibd_hca_path),
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   439
		    "%s/%s%d", IB_HCA_DEVPATH_PREFIX,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   440
		    hca_infop->uverbs_hca_driver_name,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   441
		    hca_infop->uverbs_hca_driver_instance);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   442
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   443
		strncpy(info->ibd_boardid_string,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   444
		    hca_infop->uverbs_hca_psid_string, PSID_STR_SZ);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   445
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   446
		strncpy(info->ibd_devid_string,
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   447
		    hca_infop->uverbs_hca_devid_string, DEVID_STR_SZ);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   448
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   449
		info->ibd_valid = B_TRUE;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   450
	}
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   451
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   452
	free(buf);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   453
	close(fd);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   454
	return (0);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   455
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   456
error_exit1:
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   457
	free(buf);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   458
	close(fd);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   459
	return (-1);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   460
}
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   461
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   462
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   463
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
   464
{
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
   465
	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
   466
		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
   467
		return (1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   468
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   469
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   470
	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
   471
	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
   472
	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
   473
	umad_cache_cnt++;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   474
	return (0);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   475
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   476
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   477
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   478
umad_cache_init()
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   479
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   480
	int				i, fd, minor;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   481
	int				save_errno = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   482
	int				port_cnt, bufsize;
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   483
	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
   484
	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
   485
	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
   486
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
   487
	for (minor = 0; minor < MAX_PORTS; minor++) {
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   488
		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
   489
		    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
   490
		    minor);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   491
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   492
		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
   493
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   494
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   495
		if ((! save_errno) && (errno != ENOENT))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   496
			save_errno = errno;
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
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
   499
	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
   500
		if (! save_errno)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   501
			save_errno = errno;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   502
		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
   503
		    strerror(save_errno));
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   504
		return (-1);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   505
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   506
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
   507
	bufsize = sizeof (sol_umad_ioctl_info_t) +
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
   508
	    (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
   509
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   510
	buf = malloc(bufsize);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   511
	memset(buf, 0, bufsize);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   512
	umad_infop = (sol_umad_ioctl_info_t *)buf;
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
   513
	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
   514
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   515
	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
   516
		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
   517
		    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
   518
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   519
		goto error_exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   520
	}
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
	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
   523
	    IB_USER_MAD_SOLARIS_ABI_VERSION) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   524
		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
   525
		    "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
   526
		    umad_infop->umad_solaris_abi_version);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   527
		goto error_exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   528
	}
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
	 * 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
   532
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   533
	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
   534
	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
   535
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   536
	if (umad_abi_version == -1)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   537
		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
   538
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   539
	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
   540
		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
   541
		    port_infop->umad_port_num,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   542
		    port_infop->umad_port_ibdev_name)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   543
			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
   544
			    port_infop->umad_port_idx);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   545
			goto error_exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   546
		}
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
	free(buf);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   550
	close(fd);
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   551
	return (0);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   552
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   553
error_exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   554
	free(buf);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   555
	close(fd);
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   556
	return (-1);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   557
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   558
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   559
void
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   560
initialize(void)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   561
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   562
	int		fd, minor;
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   563
	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
   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
	 * 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
   567
	 * 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
   568
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   569
	for (minor = 0; minor < MAX_HCAS; minor++) {
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   570
		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
   571
		    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
   572
		    minor);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   573
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   574
		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
   575
			continue;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   576
		} else {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   577
			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
   578
			sol_uverbs_minor_dev = minor;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   579
			close(fd);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   580
			break;
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
	/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   585
	 * 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
   586
	 * 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
   587
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   588
	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
   589
		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
   590
		return;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   591
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   592
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   593
	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
   594
	memset(&umad_dev_cache, 0,
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
   595
	    (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
   596
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   597
	initialized = B_TRUE;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   598
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   599
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   600
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   601
 * Some sysfs emulation software
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   602
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   603
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   604
/*
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   605
 * Extract the HCA dev name from the path and remove it from the path.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   606
 * Given a path extract the HCA dev name of the form <dev-prefix><dev-instance>
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   607
 * During parsing the device instance number is validated to make sure it is
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   608
 * within MAX_HCAS limit, the routine also skips over the duplicate slashes.
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   609
 */
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   610
static int
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   611
check_path_for_hca(char *path, char *device_name)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   612
{
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   613
	int pos = 0;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   614
	int len;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   615
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   616
	while ((path[pos] != '/') || (path[pos] == '\0'))
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   617
		pos++;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   618
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   619
	if (path[pos] != '/')
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   620
		return (0);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   621
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   622
	strncpy(device_name, path, (pos + 1));
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   623
	device_name[pos] = '\0';
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   624
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   625
	if (get_device_num(device_name) < 0)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   626
		return (0);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   627
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   628
	while (path[pos] == '/')
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   629
		pos++;
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   630
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   631
	len = strlen(path);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   632
	memmove(path, &path[pos], (len - pos) + 1);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   633
	return (1);
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   634
}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   635
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   636
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   637
 * 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
   638
 * 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
   639
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   640
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   641
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
   642
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   643
	int	ret, pos = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   644
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   645
	switch (prefix) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   646
		case CP_SOL_UVERBS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   647
			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
   648
			    &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   649
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   650
		case CP_DEVICE:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   651
			ret = sscanf(path, "device%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   652
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   653
		case CP_D:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   654
			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
   655
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   656
		case CP_GIDS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   657
			ret = sscanf(path, "gids%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   658
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   659
		case CP_PKEYS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   660
			ret = sscanf(path, "pkeys%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   661
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   662
		case CP_PORTS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   663
			ret = sscanf(path, "ports%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   664
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   665
		case CP_UMAD:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   666
			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
   667
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   668
		case CP_SLASH:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   669
			ret = sscanf(path, "%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   670
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   671
		case CP_SYS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   672
			ret = sscanf(path, "sys%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   673
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   674
		case CP_CLASS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   675
			ret = sscanf(path, "class%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   676
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   677
		case CP_INFINIBAND_VERBS:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   678
			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
   679
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   680
		case CP_INFINIBAND:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   681
			ret = sscanf(path, "infiniband%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   682
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   683
		case CP_INFINIBAND_MAD:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   684
			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
   685
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   686
		case CP_MISC:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   687
			ret = sscanf(path, "misc%n/", &pos);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   688
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   689
		case CP_RDMA_CM:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   690
			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
   691
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   692
		default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   693
			/* Unkown prefix */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   694
			return (0);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   695
	}
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 (path[pos] == '/') {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   698
		/* Some requests have several consecutive slashes. */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   699
		while (path[pos] == '/')
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   700
			pos ++;
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
		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
   703
		return (1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   704
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   705
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   706
	return (0);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   707
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   708
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   709
static ibdev_cache_info_t *
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   710
get_device_info(const char *devname)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   711
{
636
da28b1dc61e7 PSARC 2011/291 EOL Tavor IB HCA driver
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 369
diff changeset
   712
	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
   713
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   714
	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
   715
		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
   716
		    strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   717
		return (NULL);
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
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   720
	if (ibdev_cache_initialized == B_FALSE) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   721
		if (ibdev_cache_init() != 0) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   722
			(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
   723
			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
   724
			return (NULL);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   725
		}
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   726
		ibdev_cache_initialized = B_TRUE;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   727
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   728
	(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
   729
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   730
	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
   731
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   732
	return (info);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   733
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   734
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   735
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   736
 * 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
   737
 * 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
   738
 * 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
   739
 * 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
   740
 * 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
   741
 * 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
   742
 * memory on successful completion.
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
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   745
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
   746
    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
   747
    uint16_t **pkey_table)
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
	struct ibv_device 	**root_dev_list, **dev_list = NULL;
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   750
	struct ibv_context	ctx;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   751
	union ibv_gid 		*gids = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   752
	uint16_t		*pkeys = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   753
	int 			i, num_dev, rv, ret = 1;
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   754
	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
   755
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   756
	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
   757
	if (!dev_list) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   758
		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
   759
		goto error_exit1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   760
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   761
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   762
	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
   763
		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
   764
			break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   765
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   766
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   767
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   768
	if (i == num_dev) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   769
		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
   770
		goto error_exit2;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   771
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   772
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   773
	snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s",
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   774
	    IB_OFS_DEVPATH_PREFIX, (*dev_list)->dev_name);
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   775
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   776
	ctx.device = *dev_list;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   777
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   778
	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
   779
		goto error_exit2;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   780
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   781
	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
   782
		fprintf(stderr, "failed to query dev %p, port %d\n",
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   783
		    &ctx, port_num);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   784
		goto error_exit3;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   785
	}
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
	if (gid_table) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   788
		*gid_table = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   789
		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
   790
		if (!gids)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   791
			goto error_exit3;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   792
		/*
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
   793
		 * 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
   794
		 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   795
		port_num |= 0x80;
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   796
		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
   797
		    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
   798
		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
   799
			goto error_exit4;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   800
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   801
		*gid_table = gids;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   802
		gids = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   803
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   804
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   805
	if (pkey_table) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   806
		*pkey_table = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   807
		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
   808
		if (!pkeys)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   809
			goto error_exit4;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   810
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
   811
		/*
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
   812
		 * 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
   813
		 */
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   814
		port_num |= 0x80;
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   815
		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
   816
		    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
   817
		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
   818
			goto error_exit5;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   819
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   820
		*pkey_table = pkeys;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   821
		pkeys = NULL;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   822
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   823
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   824
	ret = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   825
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
	 * clean up and Return
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
error_exit5:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   830
	if (pkeys)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   831
		free(pkeys);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   832
error_exit4:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   833
	if (gids)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   834
		free(gids);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   835
error_exit3:
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   836
	if (ctx.cmd_fd > 0)
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
   837
		close(ctx.cmd_fd);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   838
error_exit2:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   839
	if (root_dev_list)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   840
		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
   841
error_exit1:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   842
	return (ret);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   843
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   844
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   845
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   846
 * 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
   847
 * 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
   848
 * into the users address space.
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   849
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   850
int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   851
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
   852
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   853
	int			fd;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   854
#ifndef _LP64
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   855
	int			tmpfd;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   856
#endif
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   857
	int			indx;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   858
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   859
	/*
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
   860
	 * Map the user verbs device (uverbs) to the associated
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   861
	 * hca device. ibdev_cache is indexed by uverbs device minor number
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   862
	 * 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
   863
	 */
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   864
	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
   865
	    NULL, 0);
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   866
	if (indx >= MAX_HCAS) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   867
		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
   868
		goto err_dev;
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
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   871
	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
   872
		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
   873
		goto err_dev;
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
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   876
	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
   877
	if (fd < 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   878
		goto err_dev;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   879
	}
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
#ifndef _LP64
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
	 * 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
   884
	 * 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
   885
	 * Note: not needed for LP64
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   886
	 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   887
	tmpfd = fcntl(fd, F_DUPFD, 256);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   888
	if (tmpfd >=  0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   889
		(void) close(fd);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   890
		fd = tmpfd;
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
#endif  /* _LP64 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   893
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   894
	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
   895
		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
   896
		goto err_close;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   897
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   898
	return (fd);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   899
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   900
err_close:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   901
	close(fd);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   902
err_dev:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   903
	return (-1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   904
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   905
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   906
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   907
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
   908
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   909
	unsigned int		device_num;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   910
	int 			len = -1;
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   911
	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
   912
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   913
	if (pthread_mutex_lock(&ibdev_cache_mutex) != 0) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   914
		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
   915
		    strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   916
		goto exit;
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
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   919
	if (ibdev_cache_initialized == B_FALSE) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   920
		if (ibdev_cache_init() == 0)
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   921
			ibdev_cache_initialized = B_TRUE;
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
   922
		else {
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   923
			(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
   924
#ifdef	DEBUG
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   925
			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
   926
			    strerror(errno));
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
   927
#endif
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   928
			goto exit;
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
   929
		}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   930
	}
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   931
	(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
   932
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   933
	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
   934
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   935
		if (device_num >= MAX_HCAS) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   936
			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
   937
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   938
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   939
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   940
		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
   941
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   942
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   943
		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
   944
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   945
		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
   946
			/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   947
			 * 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
   948
			 * in /sys/devices/pci...../....
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
			if (strcmp(path, "vendor") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   951
				len = 1 + sprintf(buf, "0x%x",
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   952
				    info_p->ibd_vendor_id);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   953
			} else if (strcmp(path, "device") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   954
				len = 1 + sprintf(buf, "0x%x",
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   955
				    info_p->ibd_device_id);
369
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
		} else if (strcmp(path, "ibdev") == 0) {
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   958
			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
   959
		} else if (strcmp(path, "abi_version") == 0) {
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
   960
			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
   961
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   962
	} 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
   963
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   964
		if (uverbs_abi_version == -1) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   965
			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
   966
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   967
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   968
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   969
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
   970
		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
   971
	} else {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   972
		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
   973
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   974
exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   975
	return (len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   976
}
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
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   979
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
   980
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   981
	int 			len = -1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   982
	unsigned int		port_num;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   983
	unsigned int		gid_num;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   984
	union ibv_gid		*gids;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   985
	uint64_t		subnet_prefix;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   986
	uint64_t		interface_id;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   987
	uint16_t		*pkeys;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   988
	unsigned int		pkey_num;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   989
	struct ibv_port_attr	port_attr;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   990
	float			rate;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   991
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   992
	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
   993
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   994
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   995
	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
   996
		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
   997
				goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   998
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
   999
		gid_num = atoi(path);
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 (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
  1002
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1003
			subnet_prefix =
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1004
			    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
  1005
			interface_id =
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1006
			    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
  1007
			len = 1 + sprintf(buf,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1008
			    "%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
  1009
			    (unsigned)(subnet_prefix >>  48) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1010
			    (unsigned)(subnet_prefix >>  32) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1011
			    (unsigned)(subnet_prefix >>  16) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1012
			    (unsigned)(subnet_prefix >>   0) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1013
			    (unsigned)(interface_id  >>  48) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1014
			    (unsigned)(interface_id  >>  32) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1015
			    (unsigned)(interface_id  >>  16) & 0xffff,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1016
			    (unsigned)(interface_id  >>   0) & 0xffff);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1017
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1018
		if (gids)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1019
			free(gids);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1020
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1021
	} 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
  1022
		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
  1023
				goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1024
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1025
		pkey_num = atoi(path);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1026
		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
  1027
			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
  1028
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1029
		if (pkeys)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1030
			free(pkeys);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1031
	} else {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1032
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1033
		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
  1034
				goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1035
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1036
		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
  1037
			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
  1038
		} 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
  1039
			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
  1040
		} 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
  1041
			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
  1042
		} else if (strcmp(path, "lid") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1043
			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
  1044
		} else if (strcmp(path, "state") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1045
			switch (port_attr.state) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1046
				case IBV_PORT_NOP:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1047
					len = 1 + sprintf(buf, "%d: NOP",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1048
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1049
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1050
				case IBV_PORT_DOWN:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1051
					len = 1 + sprintf(buf, "%d: DOWN",
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
				case IBV_PORT_INIT:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1055
					len = 1 + sprintf(buf, "%d: INIT",
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
				case IBV_PORT_ARMED:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1059
					len = 1 + sprintf(buf, "%d: ARMED",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1060
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1061
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1062
				case IBV_PORT_ACTIVE:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1063
					len = 1 + sprintf(buf, "%d: ACTIVE",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1064
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1065
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1066
				case IBV_PORT_ACTIVE_DEFER:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1067
					len = 1 + sprintf(buf,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1068
					    "%d: ACTIVE_DEFER",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1069
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1070
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1071
				default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1072
					len = 1 + sprintf(buf, "%d: INVALID",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1073
					    port_attr.state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1074
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1075
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1076
		} 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
  1077
			switch (port_attr.phys_state) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1078
				case 1:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1079
					len = 1 + sprintf(buf, "%d: Sleep",
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 2:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1083
					len = 1 + sprintf(buf, "%d: Polling",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1084
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1085
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1086
				case 3:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1087
					len = 1 + sprintf(buf, "%d: Disabled",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1088
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1089
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1090
				case 4:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1091
					len = 1 + sprintf(buf,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1092
					    "%d: PortConfigurationTraining",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1093
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1094
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1095
				case 5:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1096
					len = 1 + sprintf(buf, "%d: LinkUp",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1097
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1098
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1099
				case 6:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1100
					len = 1 + sprintf(buf,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1101
					    "%d: LinkErrorRecovery",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1102
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1103
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1104
				case 7:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1105
					len = 1 + sprintf(buf,
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1106
					    "%d: Phy Test",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1107
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1108
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1109
				default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1110
					len = 1 + sprintf(buf, "%d: <unknown>",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1111
					    port_attr.phys_state);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1112
					break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1113
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1114
		} else if (strcmp(path, "rate") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1115
			/* rate = speed * width */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1116
			switch (port_attr.active_speed) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1117
			case 1:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1118
				rate = 2.5;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1119
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1120
			case 2:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1121
				rate = 5;
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 4:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1124
				rate = 10;
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
			default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1127
				rate = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1128
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1129
			switch (port_attr.active_width) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1130
			case 1:
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
			case 2:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1133
				rate = 4 * rate;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1134
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1135
			case 4:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1136
				rate = 8 * rate;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1137
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1138
			case 8:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1139
				rate = 12 * rate;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1140
				break;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1141
			default:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1142
				rate = 0;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1143
			}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1144
			len = 1 + sprintf(buf, "%f", rate);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1145
		} 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
  1146
			len = 1 + sprintf(buf, "0x%08x",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1147
			    port_attr.port_cap_flags);
1749
6a6f92e9feaf 18247164 SUNBT7167127 Some OFED tools print errors with a connect-x VPI card (userland)
Boris Chiu <boris.chiu@oracle.com>
parents: 1564
diff changeset
  1148
		} else if (strcmp(path, "link_layer") == 0) {
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1149
			switch (port_attr.link_layer) {
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1150
				case IBV_LINK_LAYER_UNSPECIFIED:
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1151
				case IBV_LINK_LAYER_INFINIBAND:
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1152
					len = 1 + sprintf(buf, "%s", "IB");
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1153
					break;
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1154
				case IBV_LINK_LAYER_ETHERNET:
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1155
					len =
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1156
					    1 + sprintf(buf, "%s", "Ethernet");
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1157
					break;
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1158
				default:
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1159
					len = 1 + sprintf(buf, "%s", "Unknown");
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1160
			}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1161
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1162
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1163
exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1164
	return (len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1165
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1166
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1167
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1168
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
  1169
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1170
	int			len = -1;
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1171
	char			dev_name[MAXNAMELEN];
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1172
	ibdev_cache_info_t	*info;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1173
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1174
	memset(dev_name, 0, MAXNAMELEN);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1175
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1176
	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
  1177
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1178
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1179
	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
  1180
		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
  1181
	} 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
  1182
		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
  1183
	} else {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1184
		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
  1185
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1186
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1187
		if (strcmp(path, "node_guid") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1188
			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
  1189
		} 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
  1190
			len = 1 + sprintf(buf, "%s",
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1191
			    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
  1192
		} 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
  1193
			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
  1194
		} 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
  1195
			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
  1196
		} 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
  1197
			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
  1198
		} else if (strcmp(path, "hca_type") == 0) {
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1199
			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
  1200
		} else if (strcmp(path, "board_id") == 0) {
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1201
			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
  1202
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1203
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1204
exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1205
	return (len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1206
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1207
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1208
static int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1209
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
  1210
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1211
	int		len = -1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1212
	unsigned int	dev_num;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1213
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1214
	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
  1215
		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
  1216
		    strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1217
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1218
	}
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1219
	if (umad_cache_initialized == B_FALSE) {
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1220
		if (umad_cache_init() == 0)
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1221
			umad_cache_initialized = B_TRUE;
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1222
		else {
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1223
			(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
  1224
#ifdef	DEBUG
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1225
			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
  1226
			    strerror(errno));
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1227
#endif
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1228
			goto exit;
851
5d9119e2b7e1 PSARC/2012/200 OFUV SR-IOV support
Alex Chiu <Alex.Chiu@Oracle.COM>
parents: 715
diff changeset
  1229
		}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1230
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1231
	(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
  1232
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1233
	if (check_path(path, CP_UMAD, &dev_num)) {
1793
b253729db1c0 18117487 saquery -m -t 50000 failed with multiple VFs created
Boris Chiu <boris.chiu@oracle.com>
parents: 1749
diff changeset
  1234
		if (dev_num >= MAX_PORTS) {
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1235
			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
  1236
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1237
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1238
		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
  1239
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1240
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1241
		if (strcmp(path, "ibdev") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1242
			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
  1243
			    size) + 1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1244
		} else if (strcmp(path, "port") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1245
			len = 1 + sprintf(buf, "%d",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1246
			    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
  1247
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1248
	} 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
  1249
		if (umad_abi_version == -1) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1250
			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
  1251
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1252
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1253
		len =
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1254
		    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
  1255
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1256
exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1257
	return (len);
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
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1260
/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1261
 * 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
  1262
 */
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1263
int
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1264
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
  1265
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1266
	int 			len = -1;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1267
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1268
	if (!initialized) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1269
		if (pthread_once(&oneTimeInit, initialize)) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1270
			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
  1271
			    strerror(errno));
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1272
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1273
		}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1274
		if (!initialized)
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1275
			/*
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1276
			 * There was a problem in initialize()
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
			goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1279
	}
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_SLASH, NULL))
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1282
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1283
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1284
	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
  1285
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1286
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1287
	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
  1288
		goto exit;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1289
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1290
	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
  1291
		len = infiniband_verbs(path, buf, size);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1292
	} 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
  1293
		len = infiniband(path, buf, size);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1294
	} 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
  1295
		len = infiniband_mad(path, buf, size);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1296
	} 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
  1297
		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
  1298
			if (strcmp(path, "abi_version") == 0) {
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1299
				len = 1 + sprintf(buf, "%d",
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1300
				    RDMA_USER_CM_MAX_ABI_VERSION);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1301
			}
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
	}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1304
exit:
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1305
	return (len);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1306
}
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1307
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1308
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1309
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
  1310
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
  1311
{
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1312
	kstat_t		*ksp;
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1313
	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
  1314
	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
  1315
	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
  1316
eed3ed08f692 6926434 ib_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
	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
  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
	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
  1320
		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
  1321
eed3ed08f692 6926434 ib_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
	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
  1323
		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
  1324
eed3ed08f692 6926434 ib_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
	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
  1326
	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
  1327
eed3ed08f692 6926434 ib_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
	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
  1329
		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
  1330
			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
  1331
				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
  1332
			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
  1333
				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
  1334
		}
eed3ed08f692 6926434 ib_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
eed3ed08f692 6926434 ib_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 ((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
  1337
			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
  1338
				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
  1339
			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
  1340
				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
  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
eed3ed08f692 6926434 ib_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
		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
  1344
		    == 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
  1345
			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
  1346
				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
  1347
			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
  1348
				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
  1349
		}
eed3ed08f692 6926434 ib_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
eed3ed08f692 6926434 ib_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
		(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
  1352
		    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
  1353
eed3ed08f692 6926434 ib_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
		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
  1355
		    == 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
  1356
			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
  1357
				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
  1358
			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
  1359
				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
  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
		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
  1363
		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
  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
	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
  1366
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
  1367
	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
  1368
	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
  1369
}
eed3ed08f692 6926434 ib_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
eed3ed08f692 6926434 ib_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
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
  1372
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
  1373
{
eed3ed08f692 6926434 ib_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
	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
  1375
	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
  1376
	kstat_named_t	*knp;
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1377
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1378
	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
  1379
	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
  1380
eed3ed08f692 6926434 ib_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
	/* 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
  1382
	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
  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
		 * 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
  1385
		 * 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
  1386
		 */
eed3ed08f692 6926434 ib_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
		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
  1388
			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
  1389
				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
  1390
			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
  1391
				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
  1392
		}
eed3ed08f692 6926434 ib_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
eed3ed08f692 6926434 ib_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 (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
  1395
			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
  1396
				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
  1397
			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
  1398
				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
  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
eed3ed08f692 6926434 ib_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
		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
  1402
		    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
  1403
			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
  1404
				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
  1405
			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
  1406
				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
  1407
		}
eed3ed08f692 6926434 ib_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_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
  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_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
  1413
			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
  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_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
  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_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
  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_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
  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_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
  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_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
  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
		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
  1439
		    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
  1440
			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
  1441
				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
  1442
			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
  1443
				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
  1444
		}
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
  1445
		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
  1446
	}
eed3ed08f692 6926434 ib_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
	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
  1448
}
eed3ed08f692 6926434 ib_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
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
  1450
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
  1451
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
  1452
    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
  1453
{
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1454
	int			count, start;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1455
	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
  1456
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1457
	/*
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
  1458
	 * 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
  1459
	 */
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
  1460
	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
  1461
	    ((port_num & 0x80) && (index == 0)))
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1462
		return (-1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1463
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
  1464
	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
  1465
		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
  1466
		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
  1467
	} 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
  1468
		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
  1469
		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
  1470
	}
eed3ed08f692 6926434 ib_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
eed3ed08f692 6926434 ib_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
	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
  1473
	    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
  1474
	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
  1475
		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
  1476
	}
eed3ed08f692 6926434 ib_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
eed3ed08f692 6926434 ib_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
	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
  1479
	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
  1480
	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
  1481
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1482
	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
  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, "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
  1485
		    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
  1486
#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
  1487
		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
  1488
	}
eed3ed08f692 6926434 ib_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
	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
  1491
	    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
  1492
#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
  1493
		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
  1494
		    "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
  1495
		    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
  1496
#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
  1497
		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
  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
	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
  1500
	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
  1501
	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
  1502
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
  1503
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
  1504
	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
  1505
	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
  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
eed3ed08f692 6926434 ib_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
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
  1509
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
  1510
    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
  1511
{
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1512
	int			count, start;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1513
	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
  1514
eed3ed08f692 6926434 ib_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
	 * 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
  1517
	 */
eed3ed08f692 6926434 ib_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
	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
  1519
	    ((port_num & 0x80) && (index == 0)))
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1520
		return (-1);
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1521
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1522
	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
  1523
		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
  1524
eed3ed08f692 6926434 ib_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
	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
  1526
		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
  1527
		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
  1528
	} 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
  1529
		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
  1530
		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
  1531
	}
eed3ed08f692 6926434 ib_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
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
  1533
	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
  1534
	    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
  1535
	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
  1536
		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
  1537
	}
eed3ed08f692 6926434 ib_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
eed3ed08f692 6926434 ib_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
	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
  1540
	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
  1541
	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
  1542
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1543
	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
  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, "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
  1546
		    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
  1547
#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
  1548
		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
  1549
	}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1550
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
  1551
	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
  1552
	    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
  1553
#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
  1554
		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
  1555
		    "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
  1556
		    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
  1557
#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
  1558
		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
  1559
	}
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
  1560
	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
  1561
	free(uverbs_pkeyp);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1562
	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
  1563
eed3ed08f692 6926434 ib_read_bw, ib_read_lat: OFED utilities sometimes hang when using "-e" (event) flag
Boris Chiu <Boris.Chiu@oracle.COM>
parents: 636
diff changeset
  1564
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
  1565
	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
  1566
	return (-1);
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1567
}
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1568
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1569
int
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1570
sol_ibv_query_device(struct ibv_device *device, struct ibv_device_attr *attr)
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1571
{
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1572
	struct ibv_query_device cmd;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1573
	struct ibv_context	context;
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1574
	char			uverbs_devpath[MAX_OFS_DEVPATH_LEN];
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1575
	int			ret;
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1576
	uint64_t		raw_fw_ver;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1577
	unsigned		major, minor, sub_minor;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1578
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1579
	context.device = device;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1580
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1581
	if (!device || !attr)
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1582
		return (-1);
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1583
4661
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1584
	snprintf(uverbs_devpath, MAX_OFS_DEVPATH_LEN, "%s/%s",
353f8a998732 PSARC 2015/310 IBTF and OFUV updates
boris.chiu@oracle.com
parents: 2187
diff changeset
  1585
	    IB_OFS_DEVPATH_PREFIX, device->dev_name);
1887
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1586
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1587
	if ((context.cmd_fd = open(uverbs_devpath, O_RDWR)) <  0)
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1588
		return (-1);
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1589
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1590
	ret = ibv_cmd_query_device(&context, attr, &raw_fw_ver, &cmd,
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1591
	    sizeof (cmd));
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1592
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1593
	if (ret)
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1594
		return (ret);
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1595
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1596
	major	  = (raw_fw_ver >> 32) & 0xffff;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1597
	minor	  = (raw_fw_ver >> 16) & 0xffff;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1598
	sub_minor = raw_fw_ver & 0xffff;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1599
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1600
	snprintf(attr->fw_ver, sizeof (attr->fw_ver),
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1601
	    "%d.%d.%03d", major, minor, sub_minor);
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1602
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1603
	close(context.cmd_fd);
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1604
	return (0);
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1605
}
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1606
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1607
int
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1608
sol_ibv_query_port(struct ibv_context *context, uint8_t port,
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1609
    struct ibv_port_attr *attr)
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1610
{
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1611
	struct	ibv_query_port cmd;
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1612
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1613
	return (ibv_cmd_query_port(context, port, attr, &cmd, sizeof (cmd)));
dc9ed1510572 18382333 libibverbs ibv_cmd_get_context() fails when mcxnex driver UAR space is exhausted
Boris Chiu <boris.chiu@oracle.com>
parents: 1793
diff changeset
  1614
}
369
cc8c00719da9 PSARC 2011/165 OFUV update of existing components
Boris Chiu <Boris.Chiu@Sun.COM>
parents:
diff changeset
  1615
#endif