From: tzachid Date: Tue, 7 Oct 2008 08:07:35 +0000 (+0000) Subject: [ipoib] Limit the number of retries to connect to broadcast group. (mlnx: 3287) X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=fe2f47fddb56367765529b9e6dbbe15ab8b7dd01;p=~shefty%2Frdma-win.git [ipoib] Limit the number of retries to connect to broadcast group. (mlnx: 3287) Part_man.exe – added check for pkey with partial membership. Such a values is not supported in current version. signed off by: slavas@voltaire.com git-svn-id: svn://openib.tc.cornell.edu/gen1@1633 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/tools/part_man/user/part_man.c b/trunk/tools/part_man/user/part_man.c index cf397795..5eda787f 100644 --- a/trunk/tools/part_man/user/part_man.c +++ b/trunk/tools/part_man/user/part_man.c @@ -7,6 +7,7 @@ #include #include "al_dev.h" +#define IS_FULL_MEMBER_PKEY(pkey) (0x8000 & (pkey)) typedef enum { @@ -195,7 +196,8 @@ static int reg_ibbus_pkey_add(const uint16_t *pkeys, uint16_t pkey_num,OUT pkey_ } else { - cnt = strlen(partKey) + sprintf(partKey + strlen(partKey),"%s:",tmp); + sprintf(partKey + strlen(partKey),"%s:",tmp); + cnt = strlen(partKey); } } @@ -231,7 +233,7 @@ static int reg_ibbus_pkey_add(const uint16_t *pkeys, uint16_t pkey_num,OUT pkey_ } else { - printf("No pkey to add\n"); + printf("Required pkeys already exist\n"); retval = 1; } RegCloseKey( reg_handle ); @@ -532,6 +534,12 @@ int prepare_reg_pkey_input(OUT REQUEST_IN *input,char* cmd[],int num) sscanf(cmd[i],"0x%x",&input->u.guid_pkey.pkeys[input->u.guid_pkey.pkey_num]); else sscanf(cmd[i],"%x",&input->u.guid_pkey.pkeys[input->u.guid_pkey.pkey_num]); + + if (! IS_FULL_MEMBER_PKEY(input->u.guid_pkey.pkeys[input->u.guid_pkey.pkey_num])) + { + printf("partial member pkey %s is not suported\n",cmd[i]); + return 0; + } input->u.guid_pkey.pkey_num++; } return 1; diff --git a/trunk/ulp/ipoib/kernel/ipoib_adapter.h b/trunk/ulp/ipoib/kernel/ipoib_adapter.h index a9c022fd..84425e94 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_adapter.h +++ b/trunk/ulp/ipoib/kernel/ipoib_adapter.h @@ -78,6 +78,7 @@ typedef struct _ipoib_params mac_addr_t conf_mac; uint32_t mc_leave_rescan; uint32_t guid_mask; + uint32_t bc_join_retry; } ipoib_params_t; /* * FIELDS diff --git a/trunk/ulp/ipoib/kernel/ipoib_driver.c b/trunk/ulp/ipoib/kernel/ipoib_driver.c index 0b2b40f5..40d5c379 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_driver.c +++ b/trunk/ulp/ipoib/kernel/ipoib_driver.c @@ -162,7 +162,8 @@ IPOIB_REG_ENTRY HCARegTable[] = { {NDIS_STRING_CONST("RecvRatio"), 1, IPOIB_OFFSET(recv_pool_ratio), IPOIB_SIZE(recv_pool_ratio), 1, 1, 10}, {NDIS_STRING_CONST("PayloadMtu"), 1, IPOIB_OFFSET(payload_mtu), IPOIB_SIZE(payload_mtu), 2044, 60, 4092}, {NDIS_STRING_CONST("lso"), 0, IPOIB_OFFSET(lso), IPOIB_SIZE(lso), 0, 0, 1}, - {NDIS_STRING_CONST("MCLeaveRescan"), 1, IPOIB_OFFSET(mc_leave_rescan), IPOIB_SIZE(mc_leave_rescan), 260, 1, 3600} + {NDIS_STRING_CONST("MCLeaveRescan"), 1, IPOIB_OFFSET(mc_leave_rescan), IPOIB_SIZE(mc_leave_rescan), 260, 1, 3600}, + {NDIS_STRING_CONST("BCJoinRetry"), 1, IPOIB_OFFSET(bc_join_retry), IPOIB_SIZE(bc_join_retry), 50, 0, 1000} }; diff --git a/trunk/ulp/ipoib/kernel/ipoib_port.c b/trunk/ulp/ipoib/kernel/ipoib_port.c index e3be853c..ac978c16 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_port.c +++ b/trunk/ulp/ipoib/kernel/ipoib_port.c @@ -5681,7 +5681,16 @@ __bcast_cb( CL_ASSERT( p_port->p_adapter->state == IB_PNP_PORT_ADD || p_port->p_adapter->state == IB_PNP_PORT_DOWN || p_port->p_adapter->state == IB_PNP_PORT_INIT ); - status = __port_get_bcast( p_port ); + if(++p_port->bc_join_retry_cnt < p_port->p_adapter->params.bc_join_retry) + { + status = __port_get_bcast( p_port ); + } + else + { + NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter, + EVENT_IPOIB_BCAST_JOIN, 1, p_mcast_rec->status ); + p_port->bc_join_retry_cnt = 0; + } } else { @@ -5701,7 +5710,7 @@ __bcast_cb( return; } cl_obj_unlock( &p_port->obj ); - + p_port->bc_join_retry_cnt = 0; status = __endpt_mgr_add_bcast( p_port, p_mcast_rec ); if( status != IB_SUCCESS ) { diff --git a/trunk/ulp/ipoib/kernel/ipoib_port.h b/trunk/ulp/ipoib/kernel/ipoib_port.h index 4c8d6a22..46b446aa 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_port.h +++ b/trunk/ulp/ipoib/kernel/ipoib_port.h @@ -516,6 +516,7 @@ typedef struct _ipoib_port uint16_t pkey_index; KDPC gc_dpc; KTIMER gc_timer; + uint32_t bc_join_retry_cnt; ipoib_hdr_t hdr[1]; /* Must be last! */ } ipoib_port_t; diff --git a/trunk/ulp/ipoib/kernel/netipoib.inx b/trunk/ulp/ipoib/kernel/netipoib.inx index 3539f7a4..f288f2a6 100644 --- a/trunk/ulp/ipoib/kernel/netipoib.inx +++ b/trunk/ulp/ipoib/kernel/netipoib.inx @@ -157,6 +157,14 @@ HKR, Ndi\Params\guid_mask, Optional, 0, "0" HKR, Ndi\Params\guid_mask, Min, 0, "0" HKR, Ndi\Params\guid_mask, Max, 0, "252" +HKR, Ndi\Params\BCJoinRetry, ParamDesc, 0, "Number of retries connecting to bc" +HKR, Ndi\Params\BCJoinRetry, Type, 0, "dword" +HKR, Ndi\Params\BCJoinRetry, Default, 0, "50" +HKR, Ndi\Params\BCJoinRetry, Optional, 0, "0" +HKR, Ndi\Params\BCJoinRetry, Min, 0, "0" +HKR, Ndi\Params\BCJoinRetry, Max, 0, "1000" + + [IpoibService] DisplayName = %IpoibServiceDispName% ServiceType = 1 ;%SERVICE_KERNEL_DRIVER%