[openib-general] [PATCH] agent: Fix agent_mad_send PCI mapping and gather address and length
Roland Dreier
roland at topspin.com
Tue Nov 9 15:54:07 PST 2004
OK, I think I understand the problem, but I'm not sure what the
correct solution is. When a DR SMP arrives at a CA from the SM,
hop_cnt == hop_ptr == number of hops in the directed route, and
somehow they are not updated correctly by the time the response
reaches handle_outgoing_smp().
I can't follow the code well enough to understand why all DR SMPs have
to go through both smi_handle_dr_smp_recv() and
smi_handle_dr_smp_send() but the patch below seems to correct things
for me (ports go to ACTIVE on all my systems). (handle_outgoing_smp()
already calls smi_handle_dr_smp_recv() so it seems the response was
getting passed to smi_handle_dr_smp_recv() twice).
- R.
Index: mad.c
===================================================================
--- mad.c (revision 1186)
+++ mad.c (working copy)
@@ -1144,16 +1144,6 @@
&response->mad.mad);
if (ret & IB_MAD_RESULT_SUCCESS) {
if (ret & IB_MAD_RESULT_REPLY) {
- if (response->mad.mad.mad_hdr.mgmt_class ==
- IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) {
- if (!smi_handle_dr_smp_recv(
- (struct ib_smp *)&response->mad.mad,
- port_priv->device->node_type,
- port_priv->port_num,
- port_priv->device->phys_port_cnt)) {
- goto out;
- }
- }
/* Send response */
grh = (void *)recv->header.recv_buf.mad -
sizeof(struct ib_grh);
More information about the general
mailing list