[ofw] partial pkey
Tzachi Dar
tzachid at mellanox.co.il
Tue Oct 7 01:09:12 PDT 2008
Applied to both trunk and branch in 1633, 1634.
Thanks
Tzachi
________________________________
From: ofw-bounces at lists.openfabrics.org
[mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Slava Strebkov
Sent: Thursday, October 02, 2008 2:05 PM
To: ofw at lists.openfabrics.org
Subject: [ofw] partial pkey
When IPoiB adapter receives bcast callback form SM with status
IB_REMOTE_ERROR, Adapter enters infinite loop. This hangs the host.
Added counter to prevent this hang.
Part_man.exe - added check for pkey with partial membership.
Such a values is not supported in current version.
Index: tools/part_man/user/part_man.c
===================================================================
--- tools/part_man/user/part_man.c (revision 1627)
+++ tools/part_man/user/part_man.c (working copy)
@@ -7,6 +7,7 @@
#include <iba/ib_al.h>
#include "al_dev.h"
+#define IS_FULL_MEMBER_PKEY(pkey) (0x8000 & (pkey))
typedef enum
{
@@ -195,7 +196,8 @@
}
else
{
- cnt = strlen(partKey) +
sprintf(partKey + strlen(partKey),"%s:",tmp);
+ sprintf(partKey +
strlen(partKey),"%s:",tmp);
+ cnt = strlen(partKey);
}
}
@@ -231,7 +233,7 @@
}
else
{
- printf("No pkey to add\n");
+ printf("Required pkeys already exist\n");
retval = 1;
}
RegCloseKey( reg_handle );
@@ -532,6 +534,12 @@
sscanf(cmd[i],"0x%x",&input->u.guid_pkey.pkeys[input->u.guid_pkey.pkey_n
um]);
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;
Index: ulp/ipoib/kernel/ipoib_adapter.h
===================================================================
--- ulp/ipoib/kernel/ipoib_adapter.h (revision 1627)
+++ ulp/ipoib/kernel/ipoib_adapter.h (working copy)
@@ -78,6 +78,7 @@
mac_addr_t conf_mac;
uint32_t mc_leave_rescan;
uint32_t guid_mask;
+ uint32_t bc_join_retry;
} ipoib_params_t;
/*
* FIELDS
Index: ulp/ipoib/kernel/ipoib_driver.c
===================================================================
--- ulp/ipoib/kernel/ipoib_driver.c (revision 1627)
+++ ulp/ipoib/kernel/ipoib_driver.c (working copy)
@@ -162,7 +162,8 @@
{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}
};
Index: ulp/ipoib/kernel/ipoib_port.c
===================================================================
--- ulp/ipoib/kernel/ipoib_port.c (revision 1627)
+++ ulp/ipoib/kernel/ipoib_port.c (working copy)
@@ -5681,7 +5681,16 @@
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 @@
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 )
{
Index: ulp/ipoib/kernel/ipoib_port.h
===================================================================
--- ulp/ipoib/kernel/ipoib_port.h (revision 1627)
+++ ulp/ipoib/kernel/ipoib_port.h (working copy)
@@ -516,6 +516,7 @@
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;
Slava
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20081007/742eb395/attachment.html>
More information about the ofw
mailing list