[ofa-general] [PATCH V3] infiniband/core: Enable loopback of DR SMP responses from userspace
Hal Rosenstock
hrosenstock at xsigo.com
Tue Oct 16 12:05:21 PDT 2007
On Tue, 2007-10-16 at 14:01 -0500, Steve Welch wrote:
> > -----Original Message-----
> > From: Suresh Shelvapille [mailto:suri at baymicrosystems.com]
> > Steve:
> >
> > This patch looks good on my system, meaning it did not break any of my
> > usual
> > tests (switch related).
> >
> Suri, thanks for testing this.
>
> Hal, I will resubmit the patch to the list to include the detailed
> description as we discussed previously.
Great; thanks. It'd be nice to hear from the iPathers to really nail
this one.
-- Hal
> Thanks,
> Steve
>
> >
> > > -----Original Message-----
> > > From: general-bounces at lists.openfabrics.org [mailto:general-
> > bounces at lists.openfabrics.org] On Behalf
> > > Of swelch at systemfabricworks.com
> > > Sent: Wednesday, October 10, 2007 11:29 PM
> > > To: rdreier at cisco.com; sean.hefty at intel.com;
> > general at lists.openfabrics.org
> > > Subject: [ofa-general] [PATCH V3] infiniband/core: Enable loopback of DR
> > SMP responses from userspace
> > >
> > >
> > >
> > > Sean, Roland,
> > >
> > > This patch [v3] replaces the [v2] patch; it includes those changes but
> > renames
> > > the smi function testing returning SMP requests to the name Hal
> > recommends.
> > >
> > > This patch allows userspace DR SMP responses to be looped back and
> > delivered
> > > to a local mad agent by the management stack.
> > >
> > > Thanks, Steve
> > >
> > > Signed-off-by: Steve Welch <swelch at systemfabricworks.com>
> > > ---
> > > drivers/infiniband/core/mad.c | 6 +++---
> > > drivers/infiniband/core/smi.h | 18 +++++++++++++++++-
> > > 2 files changed, 20 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/drivers/infiniband/core/mad.c
> > b/drivers/infiniband/core/mad.c
> > > index 6f42877..98148d6 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_returning_smp(smp, device) == IB_SMI_DISCARD)
> > > goto out;
> > >
> > > local = kmalloc(sizeof *local, GFP_ATOMIC);
> > > @@ -752,8 +753,7 @@ static int handle_outgoing_dr_smp(struct
> > ib_mad_agent_private *mad_agent_priv,
> > > port_priv = ib_get_mad_port(mad_agent_priv->agent.device,
> > > mad_agent_priv->agent.port_num);
> > > 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..aff96ba 100644
> > > --- a/drivers/infiniband/core/smi.h
> > > +++ b/drivers/infiniband/core/smi.h
> > > @@ -59,7 +59,8 @@ extern enum smi_action smi_handle_dr_smp_send(struct
> > ib_smp *smp,
> > > u8 node_type, int port_num);
> > >
> > > /*
> > > - * Return 1 if the SMP should be handled by the local SMA/SM via
> > process_mad
> > > + * Return IB_SMI_HANDLE if the SMP should be handled by the local
> > SMA/SM
> > > + * via process_mad
> > > */
> > > static inline enum smi_action smi_check_local_smp(struct ib_smp *smp,
> > > struct ib_device *device)
> > > @@ -71,4 +72,19 @@ 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 IB_SMI_HANDLE if the SMP should be handled by the local
> > SMA/SM
> > > + * via process_mad
> > > + */
> > > +static inline enum smi_action smi_check_local_returning_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