7005ada68d
SMC code uses the base gid for VLAN traffic. The gids exchanged in the CLC handshake and the gid index used for the QP have to switch from the base gid to the appropriate vlan gid. When searching for a matching IB device port for a certain vlan device, it does not make sense to return an IB device port, which is not enabled for the used vlan_id. Add another check whether a vlan gid exists for a certain IB device port. Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
41 lines
935 B
C
41 lines
935 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Shared Memory Communications over RDMA (SMC-R) and RoCE
|
|
*
|
|
* PNET table queries
|
|
*
|
|
* Copyright IBM Corp. 2016
|
|
*
|
|
* Author(s): Thomas Richter <tmricht@linux.vnet.ibm.com>
|
|
*/
|
|
|
|
#ifndef _SMC_PNET_H
|
|
#define _SMC_PNET_H
|
|
|
|
#if IS_ENABLED(CONFIG_HAVE_PNETID)
|
|
#include <asm/pnet.h>
|
|
#endif
|
|
|
|
struct smc_ib_device;
|
|
struct smcd_dev;
|
|
|
|
static inline int smc_pnetid_by_dev_port(struct device *dev,
|
|
unsigned short port, u8 *pnetid)
|
|
{
|
|
#if IS_ENABLED(CONFIG_HAVE_PNETID)
|
|
return pnet_id_by_dev_port(dev, port, pnetid);
|
|
#else
|
|
return -ENOENT;
|
|
#endif
|
|
}
|
|
|
|
int smc_pnet_init(void) __init;
|
|
void smc_pnet_exit(void);
|
|
int smc_pnet_remove_by_ibdev(struct smc_ib_device *ibdev);
|
|
void smc_pnet_find_roce_resource(struct sock *sk,
|
|
struct smc_ib_device **smcibdev, u8 *ibport,
|
|
unsigned short vlan_id, u8 gid[]);
|
|
void smc_pnet_find_ism_resource(struct sock *sk, struct smcd_dev **smcismdev);
|
|
|
|
#endif
|