mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-15 16:53:54 +08:00
net/smc: introduce smc_pnet_find_alt_roce()
Introduce a new function in smc_pnet.c that searches for an alternate IB device, using an existing link group and a primary IB device. The alternate IB device needs to be active and must have the same PNETID as the link group. Signed-off-by: Karsten Graul <kgraul@linux.ibm.com> Reviewed-by: Ursula Braun <ubraun@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
33d203302d
commit
6c868a3edc
@ -777,7 +777,8 @@ static int smc_pnet_find_ndev_pnetid_by_table(struct net_device *ndev,
|
|||||||
|
|
||||||
/* find a roce device for the given pnetid */
|
/* find a roce device for the given pnetid */
|
||||||
static void _smc_pnet_find_roce_by_pnetid(u8 *pnet_id,
|
static void _smc_pnet_find_roce_by_pnetid(u8 *pnet_id,
|
||||||
struct smc_init_info *ini)
|
struct smc_init_info *ini,
|
||||||
|
struct smc_ib_device *known_dev)
|
||||||
{
|
{
|
||||||
struct smc_ib_device *ibdev;
|
struct smc_ib_device *ibdev;
|
||||||
int i;
|
int i;
|
||||||
@ -785,6 +786,8 @@ static void _smc_pnet_find_roce_by_pnetid(u8 *pnet_id,
|
|||||||
ini->ib_dev = NULL;
|
ini->ib_dev = NULL;
|
||||||
spin_lock(&smc_ib_devices.lock);
|
spin_lock(&smc_ib_devices.lock);
|
||||||
list_for_each_entry(ibdev, &smc_ib_devices.list, list) {
|
list_for_each_entry(ibdev, &smc_ib_devices.list, list) {
|
||||||
|
if (ibdev == known_dev)
|
||||||
|
continue;
|
||||||
for (i = 1; i <= SMC_MAX_PORTS; i++) {
|
for (i = 1; i <= SMC_MAX_PORTS; i++) {
|
||||||
if (!rdma_is_port_valid(ibdev->ibdev, i))
|
if (!rdma_is_port_valid(ibdev->ibdev, i))
|
||||||
continue;
|
continue;
|
||||||
@ -803,6 +806,14 @@ out:
|
|||||||
spin_unlock(&smc_ib_devices.lock);
|
spin_unlock(&smc_ib_devices.lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* find alternate roce device with same pnet_id and vlan_id */
|
||||||
|
void smc_pnet_find_alt_roce(struct smc_link_group *lgr,
|
||||||
|
struct smc_init_info *ini,
|
||||||
|
struct smc_ib_device *known_dev)
|
||||||
|
{
|
||||||
|
_smc_pnet_find_roce_by_pnetid(lgr->pnet_id, ini, known_dev);
|
||||||
|
}
|
||||||
|
|
||||||
/* if handshake network device belongs to a roce device, return its
|
/* if handshake network device belongs to a roce device, return its
|
||||||
* IB device and port
|
* IB device and port
|
||||||
*/
|
*/
|
||||||
@ -857,7 +868,7 @@ static void smc_pnet_find_roce_by_pnetid(struct net_device *ndev,
|
|||||||
smc_pnet_find_rdma_dev(ndev, ini);
|
smc_pnet_find_rdma_dev(ndev, ini);
|
||||||
return; /* pnetid could not be determined */
|
return; /* pnetid could not be determined */
|
||||||
}
|
}
|
||||||
_smc_pnet_find_roce_by_pnetid(ndev_pnetid, ini);
|
_smc_pnet_find_roce_by_pnetid(ndev_pnetid, ini, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void smc_pnet_find_ism_by_pnetid(struct net_device *ndev,
|
static void smc_pnet_find_ism_by_pnetid(struct net_device *ndev,
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
struct smc_ib_device;
|
struct smc_ib_device;
|
||||||
struct smcd_dev;
|
struct smcd_dev;
|
||||||
struct smc_init_info;
|
struct smc_init_info;
|
||||||
|
struct smc_link_group;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct smc_pnettable - SMC PNET table anchor
|
* struct smc_pnettable - SMC PNET table anchor
|
||||||
@ -48,5 +49,7 @@ void smc_pnet_find_roce_resource(struct sock *sk, struct smc_init_info *ini);
|
|||||||
void smc_pnet_find_ism_resource(struct sock *sk, struct smc_init_info *ini);
|
void smc_pnet_find_ism_resource(struct sock *sk, struct smc_init_info *ini);
|
||||||
int smc_pnetid_by_table_ib(struct smc_ib_device *smcibdev, u8 ib_port);
|
int smc_pnetid_by_table_ib(struct smc_ib_device *smcibdev, u8 ib_port);
|
||||||
int smc_pnetid_by_table_smcd(struct smcd_dev *smcd);
|
int smc_pnetid_by_table_smcd(struct smcd_dev *smcd);
|
||||||
|
void smc_pnet_find_alt_roce(struct smc_link_group *lgr,
|
||||||
|
struct smc_init_info *ini,
|
||||||
|
struct smc_ib_device *known_dev);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user