Commit f1badc71 authored by Dennis Dalessandro's avatar Dennis Dalessandro Committed by Doug Ledford
Browse files

IB/rdmavt: Clean up distinction between port number and index



IB core uses 1 relative indexing for ports. All of our data structures
use 0 based indexing. Add an inline function that we can use whenever we
need to validate a legal value and try to convert a port number to a
port index at the entrance into rdmavt.

Try to follow the policy that when we are talking about a port from IB
core point of view we refer to it as a port number. When port is an
index into our arrays refer to it as a port index.

Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Reviewed-by: default avatarHarish Chegondi <harish.chegondi@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent d1b697b6
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -47,12 +47,13 @@

#include <rdma/ib_mad.h>
#include "mad.h"
#include "vt.h"

/**
 * rvt_process_mad - process an incoming MAD packet
 * @ibdev: the infiniband device this packet came in on
 * @mad_flags: MAD flags
 * @port: the port number this packet came in on
 * @port_num: the port number this packet came in on, 1 based from ib core
 * @in_wc: the work completion entry for this packet
 * @in_grh: the global route header for this packet
 * @in_mad: the incoming MAD
@@ -67,7 +68,7 @@
 *
 * This is called by the ib_mad module.
 */
int rvt_process_mad(struct ib_device *ibdev, int mad_flags, u8 port,
int rvt_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
		    const struct ib_wc *in_wc, const struct ib_grh *in_grh,
		    const struct ib_mad_hdr *in, size_t in_mad_size,
		    struct ib_mad_hdr *out, size_t *out_mad_size,
@@ -82,6 +83,9 @@ int rvt_process_mad(struct ib_device *ibdev, int mad_flags, u8 port,
	 *VT-DRIVER-API: ????
	 *
	 */
	if (ibport_num_to_idx(ibdev, port_num) < 0)
		return -EINVAL;

	return IB_MAD_RESULT_FAILURE;
}

+1 −1
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@

#include <rdma/rdma_vt.h>

int rvt_process_mad(struct ib_device *ibdev, int mad_flags, u8 port,
int rvt_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
		    const struct ib_wc *in_wc, const struct ib_grh *in_grh,
		    const struct ib_mad_hdr *in, size_t in_mad_size,
		    struct ib_mad_hdr *out, size_t *out_mad_size,
+11 −6
Original line number Diff line number Diff line
@@ -286,26 +286,31 @@ static inline unsigned mk_qpn(struct rvt_qpn_table *qpt,
	return (map - qpt->map) * RVT_BITS_PER_PAGE + off;
}

/*
 * Allocate the next available QPN or
 * zero/one for QP type IB_QPT_SMI/IB_QPT_GSI.
/**
 * alloc_qpn - Allocate the next available qpn or zero/one for QP type
 *	       IB_QPT_SMI/IB_QPT_GSI
 *@rdi:	rvt device info structure
 *@qpt: queue pair number table pointer
 *@port_num: IB port number, 1 based, comes from core
 *
 * Return: The queue pair number
 */
static int alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
		     enum ib_qp_type type, u8 port, gfp_t gfp)
		     enum ib_qp_type type, u8 port_num, gfp_t gfp)
{
	u32 i, offset, max_scan, qpn;
	struct rvt_qpn_map *map;
	u32 ret;

	if (rdi->driver_f.alloc_qpn)
		return rdi->driver_f.alloc_qpn(rdi, qpt, type, port,
		return rdi->driver_f.alloc_qpn(rdi, qpt, type, port_num,
					       GFP_KERNEL);

	if (type == IB_QPT_SMI || type == IB_QPT_GSI) {
		unsigned n;

		ret = type == IB_QPT_GSI;
		n = 1 << (ret + 2 * (port - 1));
		n = 1 << (ret + 2 * (port_num - 1));
		spin_lock(&qpt->lock);
		if (qpt->flags & n)
			ret = -EINVAL;
+22 −14
Original line number Diff line number Diff line
@@ -120,14 +120,17 @@ static int rvt_modify_device(struct ib_device *device,
/**
 * rvt_query_port: Passes the query port call to the driver
 * @ibdev: Verbs IB dev
 * @port: port number
 * @port_num: port number, 1 based from ib core
 * @props: structure to hold returned properties
 *
 * Returns 0 on success
 */
static int rvt_query_port(struct ib_device *ibdev, u8 port,
static int rvt_query_port(struct ib_device *ibdev, u8 port_num,
			  struct ib_port_attr *props)
{
	if (ibport_num_to_idx(ibdev, port_num) < 0)
		return -EINVAL;

	/*
	 * VT-DRIVER-API: query_port_state()
	 * driver returns pretty much everything in ib_port_attr
@@ -138,13 +141,13 @@ static int rvt_query_port(struct ib_device *ibdev, u8 port,
/**
 * rvt_modify_port
 * @ibdev: Verbs IB dev
 * @port: Port number
 * @port_num: Port number, 1 based from ib core
 * @port_modify_mask: How to change the port
 * @props: Structure to fill in
 *
 * Returns 0 on success
 */
static int rvt_modify_port(struct ib_device *ibdev, u8 port,
static int rvt_modify_port(struct ib_device *ibdev, u8 port_num,
			   int port_modify_mask, struct ib_port_modify *props)
{
	/*
@@ -160,18 +163,21 @@ static int rvt_modify_port(struct ib_device *ibdev, u8 port,
	 * TBD: send_trap() and post_mad_send() need examined to see where they
	 * fit in.
	 */
	if (ibport_num_to_idx(ibdev, port_num) < 0)
		return -EINVAL;

	return -EOPNOTSUPP;
}

/**
 * rvt_query_pkey - Return a pkey from the table at a given index
 * @ibdev: Verbs IB dev
 * @port: Port number
 * @port_num: Port number, 1 based from ib core
 * @intex: Index into pkey table
 *
 * Returns 0 on failure pkey otherwise
 */
static int rvt_query_pkey(struct ib_device *ibdev, u8 port, u16 index,
static int rvt_query_pkey(struct ib_device *ibdev, u8 port_num, u16 index,
			  u16 *pkey)
{
	/*
@@ -183,11 +189,11 @@ static int rvt_query_pkey(struct ib_device *ibdev, u8 port, u16 index,
	struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
	int port_index;

	if (index >= rvt_get_npkeys(rdi))
	port_index = ibport_num_to_idx(ibdev, port_num);
	if (port_index < 0)
		return -EINVAL;

	port_index = port - 1; /* IB ports start at 1 our array at 0 */
	if ((port_index < 0) || (port_index >= rdi->dparms.nports))
	if (index >= rvt_get_npkeys(rdi))
		return -EINVAL;

	*pkey = rvt_get_pkey(rdi, port_index, index);
@@ -197,13 +203,13 @@ static int rvt_query_pkey(struct ib_device *ibdev, u8 port, u16 index,
/**
 * rvt_query_gid - Return a gid from the table
 * @ibdev: Verbs IB dev
 * @port: Port number
 * @port_num: Port number, 1 based from ib core
 * @index: = Index in table
 * @gid: Gid to return
 *
 * Returns 0 on success
 */
static int rvt_query_gid(struct ib_device *ibdev, u8 port,
static int rvt_query_gid(struct ib_device *ibdev, u8 port_num,
			 int index, union ib_gid *gid)
{
	/*
@@ -211,6 +217,8 @@ static int rvt_query_gid(struct ib_device *ibdev, u8 port,
	 * to craft the return value. This will work similar to how query_pkey()
	 * is being done.
	 */
	if (ibport_num_to_idx(ibdev, port_num) < 0)
		return -EINVAL;

	return -EOPNOTSUPP;
}
@@ -455,11 +463,11 @@ EXPORT_SYMBOL(rvt_unregister_device);
 * They persist until the driver goes away.
 */
int rvt_init_port(struct rvt_dev_info *rdi, struct rvt_ibport *port,
		  int portnum, u16 *pkey_table)
		  int port_index, u16 *pkey_table)
{

	rdi->ports[portnum] = port;
	rdi->ports[portnum]->pkey_table = pkey_table;
	rdi->ports[port_index] = port;
	rdi->ports[port_index]->pkey_table = pkey_table;

	return 0;
}
+12 −0
Original line number Diff line number Diff line
@@ -88,4 +88,16 @@
#define __rvt_pr_err(pdev, name, fmt, ...) \
	dev_err(&pdev->dev, "%s: " fmt, name, ##__VA_ARGS__)

static inline int ibport_num_to_idx(struct ib_device *ibdev, u8 port_num)
{
	struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
	int port_index;

	port_index = port_num - 1; /* IB ports start at 1 our arrays at 0 */
	if ((port_index < 0) || (port_index >= rdi->dparms.nports))
		return -EINVAL;

	return port_index;
}

#endif          /* DEF_RDMAVT_H */
Loading