[ofa-general] [PATCH] infiniband/core: Enable loopback of DR SMP responses from userspace
Hal Rosenstock
hrosenstock at xsigo.com
Wed Oct 10 11:44:13 PDT 2007
On Wed, 2007-10-10 at 11:31 -0700, Sean Hefty wrote:
> Does anyone know what happened with this patch? Steve?
>
> I last remember a couple of minor changes being requested, but that was it.
Yes, we both requested some minor changes and no revised patch was
issued AFAIK. There's also the related mthca router mode patch too which
so far is lacking comment.
-- Hal
> - Sean
>
> > > diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
> > > index 6f42877..9ec910b 100644
> > > --- a/drivers/infiniband/core/mad.c
> > > +++ b/drivers/infiniband/core/mad.c
> > > @@ -701,7 +701,8 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv,
> > > }
> > >
> > > /* Check to post send on QP or process locally */
> > > - if (smi_check_local_smp(smp, device) == IB_SMI_DISCARD)
> > > + if (smi_check_local_smp(smp, device) == IB_SMI_DISCARD &&
> > > + smi_check_local_resp_smp(smp, device) == IB_SMI_DISCARD)
> > > goto out;
> > >
> > > local = kmalloc(sizeof *local, GFP_ATOMIC);
> > > @@ -754,6 +755,7 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv,
> > > if (port_priv) {
> > > mad_priv->mad.mad.mad_hdr.tid =
> > > ((struct ib_mad *)smp)->mad_hdr.tid;
> > > + memcpy(&mad_priv->mad.mad, smp, sizeof(struct ib_mad));
> > > recv_mad_agent = find_mad_agent(port_priv,
> > > &mad_priv->mad.mad);
> > > }
> > > diff --git a/drivers/infiniband/core/smi.h b/drivers/infiniband/core/smi.h
> > > index 1cfc298..d96fc8e 100644
> > > --- a/drivers/infiniband/core/smi.h
> > > +++ b/drivers/infiniband/core/smi.h
> > > @@ -71,4 +71,18 @@ static inline enum smi_action smi_check_local_smp(struct ib_smp *smp,
> > > (smp->hop_ptr == smp->hop_cnt + 1)) ?
> > > IB_SMI_HANDLE : IB_SMI_DISCARD);
> > > }
> > > +
> > > +/*
> > > + * Return 1 if the SMP response should be handled by the local management stack
> > > + */
> > > +static inline enum smi_action smi_check_local_resp_smp(struct ib_smp *smp,
> > > + struct ib_device *device)
> > > +{
> > > + /* C14-13:3 -- We're at the end of the DR segment of path */
> > > + /* C14-13:4 -- Hop Pointer == 0 -> give to SM */
> > > + return ((device->process_mad &&
> > > + ib_get_smp_direction(smp) &&
> > > + !smp->hop_ptr) ? IB_SMI_HANDLE : IB_SMI_DISCARD);
> > > +}
> > > +
> > > #endif /* __SMI_H_ */
> > _______________________________________________
> > general mailing list
> > general at lists.openfabrics.org
> > http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
> >
> > To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
> >
> _______________________________________________
> general mailing list
> general at lists.openfabrics.org
> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
>
> To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
More information about the general
mailing list