mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-20 12:10:01 +07:00
Merge branch 'net-smc-improve-peer-ID-in-CLC-decline'
Hans Wippel says: ==================== net/smc: improve peer ID in CLC decline The following two patches improve the peer ID in CLC decline messages if RoCE devices are present in the host but no suitable device is found for a connection. The first patch reworks the peer ID initialization. The second patch contains the actual changes of the CLC decline messages. Changes v1 -> v2: * make smc_ib_is_valid_local_systemid() static in first patch * changed if in smc_clc_send_decline() to remove curly braces Changes RFC -> v1: * split the patch into two parts * removed zero assignment to global variable (thanks Leon) Thanks to Leon Romanovsky and Karsten Graul for the feedback! ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
06baf4be20
@ -372,7 +372,8 @@ int smc_clc_send_decline(struct smc_sock *smc, u32 peer_diag_info)
|
||||
dclc.hdr.length = htons(sizeof(struct smc_clc_msg_decline));
|
||||
dclc.hdr.version = SMC_CLC_V1;
|
||||
dclc.hdr.flag = (peer_diag_info == SMC_CLC_DECL_SYNCERR) ? 1 : 0;
|
||||
if (smc->conn.lgr && !smc->conn.lgr->is_smcd)
|
||||
if ((!smc->conn.lgr || !smc->conn.lgr->is_smcd) &&
|
||||
smc_ib_is_valid_local_systemid())
|
||||
memcpy(dclc.id_for_peer, local_systemid,
|
||||
sizeof(local_systemid));
|
||||
dclc.peer_diagnosis = htonl(peer_diag_info);
|
||||
|
@ -37,11 +37,7 @@ struct smc_ib_devices smc_ib_devices = { /* smc-registered ib devices */
|
||||
.list = LIST_HEAD_INIT(smc_ib_devices.list),
|
||||
};
|
||||
|
||||
#define SMC_LOCAL_SYSTEMID_RESET "%%%%%%%"
|
||||
|
||||
u8 local_systemid[SMC_SYSTEMID_LEN] = SMC_LOCAL_SYSTEMID_RESET; /* unique system
|
||||
* identifier
|
||||
*/
|
||||
u8 local_systemid[SMC_SYSTEMID_LEN]; /* unique system identifier */
|
||||
|
||||
static int smc_ib_modify_qp_init(struct smc_link *lnk)
|
||||
{
|
||||
@ -168,6 +164,15 @@ static inline void smc_ib_define_local_systemid(struct smc_ib_device *smcibdev,
|
||||
{
|
||||
memcpy(&local_systemid[2], &smcibdev->mac[ibport - 1],
|
||||
sizeof(smcibdev->mac[ibport - 1]));
|
||||
}
|
||||
|
||||
bool smc_ib_is_valid_local_systemid(void)
|
||||
{
|
||||
return !is_zero_ether_addr(&local_systemid[2]);
|
||||
}
|
||||
|
||||
static void smc_ib_init_local_systemid(void)
|
||||
{
|
||||
get_random_bytes(&local_systemid[0], 2);
|
||||
}
|
||||
|
||||
@ -224,8 +229,7 @@ static int smc_ib_remember_port_attr(struct smc_ib_device *smcibdev, u8 ibport)
|
||||
rc = smc_ib_fill_mac(smcibdev, ibport);
|
||||
if (rc)
|
||||
goto out;
|
||||
if (!strncmp(local_systemid, SMC_LOCAL_SYSTEMID_RESET,
|
||||
sizeof(local_systemid)) &&
|
||||
if (!smc_ib_is_valid_local_systemid() &&
|
||||
smc_ib_port_active(smcibdev, ibport))
|
||||
/* create unique system identifier */
|
||||
smc_ib_define_local_systemid(smcibdev, ibport);
|
||||
@ -605,6 +609,7 @@ static struct ib_client smc_ib_client = {
|
||||
|
||||
int __init smc_ib_register_client(void)
|
||||
{
|
||||
smc_ib_init_local_systemid();
|
||||
return ib_register_client(&smc_ib_client);
|
||||
}
|
||||
|
||||
|
@ -84,4 +84,5 @@ void smc_ib_sync_sg_for_device(struct smc_ib_device *smcibdev,
|
||||
enum dma_data_direction data_direction);
|
||||
int smc_ib_determine_gid(struct smc_ib_device *smcibdev, u8 ibport,
|
||||
unsigned short vlan_id, u8 gid[], u8 *sgid_index);
|
||||
bool smc_ib_is_valid_local_systemid(void);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user