On Thu, Jun 25, 2015 at 5:45 PM, Or Gerlitz <[email protected]> wrote: > For IB links, reading HCA flow counters through iboe_process_mad() should > be used when mlx4_ib_process_mad() is invoked only for VFs PMA queries and > exactly nothing else. > > Fixes: 7193a141eb74 ('IB/mlx4: Set VF to read from QP counters') > Reported-by: Linus Torvalds <[email protected]> > Signed-off-by: Or Gerlitz <[email protected]> > --- > > Hi Doug, Dave > > Doug, I've rebased the patch on top of Ira's fix [1], also you would need to > merge the mlx4 (7193a141eb74 etc) changes that went-in through net-next for > the patch to apply -- simply fetch from the latest upstream tree, they're > there.
Doug, we still have few concerns re the original patch... please wait few days with this one till we are sure it's the right fix. Or. > > Dave, to make it clear, the fix will go through the IB subsystem, as it > depends on other changes on that area. > > thanks, > > Or. > > [1] https://patchwork.kernel.org/patch/6671931/ > > drivers/infiniband/hw/mlx4/mad.c | 29 +++++++++++++++++++---------- > 1 file changed, 19 insertions(+), 10 deletions(-) > > diff --git a/drivers/infiniband/hw/mlx4/mad.c > b/drivers/infiniband/hw/mlx4/mad.c > index 9a810e3..68b3dfa 100644 > --- a/drivers/infiniband/hw/mlx4/mad.c > +++ b/drivers/infiniband/hw/mlx4/mad.c > @@ -860,22 +860,31 @@ int mlx4_ib_process_mad(struct ib_device *ibdev, int > mad_flags, u8 port_num, > struct mlx4_ib_dev *dev = to_mdev(ibdev); > const struct ib_mad *in_mad = (const struct ib_mad *)in; > struct ib_mad *out_mad = (struct ib_mad *)out; > + enum rdma_link_layer link = rdma_port_get_link_layer(ibdev, port_num); > > if (WARN_ON_ONCE(in_mad_size != sizeof(*in_mad) || > *out_mad_size != sizeof(*out_mad))) > return IB_MAD_RESULT_FAILURE; > > - switch (rdma_port_get_link_layer(ibdev, port_num)) { > - case IB_LINK_LAYER_INFINIBAND: > - if (!mlx4_is_slave(dev->dev)) > - return ib_process_mad(ibdev, mad_flags, port_num, > in_wc, > - in_grh, in_mad, out_mad); > - case IB_LINK_LAYER_ETHERNET: > - return iboe_process_mad(ibdev, mad_flags, port_num, in_wc, > - in_grh, in_mad, out_mad); > - default: > - return -EINVAL; > + /* iboe_process_mad() which uses the HCA flow-counters to implement > IB PMA > + * queries, should be called only by VFs and for that specific purpose > + */ > + if (link == IB_LINK_LAYER_INFINIBAND) { > + if (mlx4_is_slave(dev->dev) && > + in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_PERF_MGMT && > + in_mad->mad_hdr.attr_id == IB_PMA_PORT_COUNTERS) > + return iboe_process_mad(ibdev, mad_flags, port_num, > in_wc, > + in_grh, in_mad, out_mad); > + > + return ib_process_mad(ibdev, mad_flags, port_num, in_wc, > + in_grh, in_mad, out_mad); > } > + > + if (link == IB_LINK_LAYER_ETHERNET) > + return iboe_process_mad(ibdev, mad_flags, port_num, in_wc, > + in_grh, in_mad, out_mad); > + > + return -EINVAL; > } > > static void send_handler(struct ib_mad_agent *agent, > -- > 2.3.7 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-rdma" in > the body of a message to [email protected] > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
