]> git.openfabrics.org - ~emulex/compat-rdma.git/commitdiff
linux-next-cherry-picks: IB/mlx4: pass SMP vendor-specific attribute MADs to firmware
authorVladimir Sokolovsky <vlad@mellanox.com>
Tue, 5 Jun 2012 14:14:55 +0000 (17:14 +0300)
committerVladimir Sokolovsky <vlad@mellanox.com>
Tue, 5 Jun 2012 14:16:35 +0000 (17:16 +0300)
Original patch:
From a6f7feae6d19e84253918d88b04153af09d3a243 Mon Sep 17 00:00:00 2001
From: Jack Morgenstein <jackm@mellanox.com>
Date: Thu, 26 Jan 2012 16:41:33 +0200
Subject: [PATCH] IB/mlx4: pass SMP vendor-specific attribute MADs to firmware

Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
linux-next-cherry-picks/11-IB-mlx4-pass-SMP-vendor-specific-attribute-MADs-to-f.patch [new file with mode: 0644]

diff --git a/linux-next-cherry-picks/11-IB-mlx4-pass-SMP-vendor-specific-attribute-MADs-to-f.patch b/linux-next-cherry-picks/11-IB-mlx4-pass-SMP-vendor-specific-attribute-MADs-to-f.patch
new file mode 100644 (file)
index 0000000..b804a33
--- /dev/null
@@ -0,0 +1,87 @@
+From a6f7feae6d19e84253918d88b04153af09d3a243 Mon Sep 17 00:00:00 2001
+From: Jack Morgenstein <jackm@mellanox.com>
+Date: Thu, 26 Jan 2012 16:41:33 +0200
+Subject: [PATCH] IB/mlx4: pass SMP vendor-specific attribute MADs to firmware
+
+In the current code, vendor-specific MADs (e.g with the FDR-10
+attribute) are silently dropped by the driver, resulting in timeouts
+at the sending side and inability to query/configure the relevant
+feature.  However, the ConnectX firmware is able to handle such MADs.
+For unsupported attributes, the firmware returns a GET_RESPONSE MAD
+containing an error status.
+
+For example, for a FDR-10 node with LID 11:
+
+    # ibstat mlx4_0 1
+
+    CA: 'mlx4_0'
+    Port 1:
+    State: Active
+    Physical state: LinkUp
+    Rate: 40 (FDR10)
+    Base lid: 11
+    LMC: 0
+    SM lid: 24
+    Capability mask: 0x02514868
+    Port GUID: 0x0002c903002e65d1
+    Link layer: InfiniBand
+
+Extended Port Query (EPI) vendor mad timeouts before the patch:
+
+    # smpquery MEPI 11 -d
+
+    ibwarn: [4196] smp_query_via: attr 0xff90 mod 0x0 route Lid 11
+    ibwarn: [4196] _do_madrpc: retry 1 (timeout 1000 ms)
+    ibwarn: [4196] _do_madrpc: retry 2 (timeout 1000 ms)
+    ibwarn: [4196] _do_madrpc: timeout after 3 retries, 3000 ms
+    ibwarn: [4196] mad_rpc: _do_madrpc failed; dport (Lid 11)
+    smpquery: iberror: [pid 4196] main: failed: operation EPI: ext port info query failed
+
+EPI query works OK with the patch:
+
+    # smpquery MEPI 11 -d
+
+    ibwarn: [6548] smp_query_via: attr 0xff90 mod 0x0 route Lid 11
+    ibwarn: [6548] mad_rpc: data offs 64 sz 64
+    mad data
+    0000 0000 0000 0001 0000 0001 0000 0001
+    0000 0000 0000 0000 0000 0000 0000 0000
+    0000 0000 0000 0000 0000 0000 0000 0000
+    0000 0000 0000 0000 0000 0000 0000 0000
+    # Ext Port info: Lid 11 port 0
+    StateChangeEnable:...............0x00
+    LinkSpeedSupported:..............0x01
+    LinkSpeedEnabled:................0x01
+    LinkSpeedActive:.................0x01
+
+Signed-off-by: Jack Morgenstein <jackm@mellanox.com>
+Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
+Acked-by: Ira Weiny <weiny2@llnl.gov>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Roland Dreier <roland@purestorage.com>
+---
+ drivers/infiniband/hw/mlx4/mad.c |    7 ++-----
+ 1 files changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
+index 95c94d8..259b067 100644
+--- a/drivers/infiniband/hw/mlx4/mad.c
++++ b/drivers/infiniband/hw/mlx4/mad.c
+@@ -257,12 +257,9 @@ static int ib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
+                       return IB_MAD_RESULT_SUCCESS;
+               /*
+-               * Don't process SMInfo queries or vendor-specific
+-               * MADs -- the SMA can't handle them.
++               * Don't process SMInfo queries -- the SMA can't handle them.
+                */
+-              if (in_mad->mad_hdr.attr_id == IB_SMP_ATTR_SM_INFO ||
+-                  ((in_mad->mad_hdr.attr_id & IB_SMP_ATTR_VENDOR_MASK) ==
+-                   IB_SMP_ATTR_VENDOR_MASK))
++              if (in_mad->mad_hdr.attr_id == IB_SMP_ATTR_SM_INFO)
+                       return IB_MAD_RESULT_SUCCESS;
+       } else if (in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_PERF_MGMT ||
+                  in_mad->mad_hdr.mgmt_class == MLX4_IB_VENDOR_CLASS1   ||
+-- 
+1.7.0.4
+