IB/mthca: Don't read reserved fields in mthca_QUERY_ADAPTER()

For memfree devices, the firmware QUERY_ADAPTER command does not
return vendor_id, device_id, and revision_id; do not return these
fields in the QUERY_ADAPTER function for memfree devices.

Instead, for memfree devices, initialize the rev_id field of the mthca
device via init_node_data (MAD IFC query), as is done in the
query_device verb implementation.

Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>

authored by Jack Morgenstein and committed by Roland Dreier 6ccef1de 7bc531dd

+12 -4
+8 -3
drivers/infiniband/hw/mthca/mthca_cmd.c
··· 1255 1255 if (err) 1256 1256 goto out; 1257 1257 1258 - MTHCA_GET(adapter->vendor_id, outbox, QUERY_ADAPTER_VENDOR_ID_OFFSET); 1259 - MTHCA_GET(adapter->device_id, outbox, QUERY_ADAPTER_DEVICE_ID_OFFSET); 1260 - MTHCA_GET(adapter->revision_id, outbox, QUERY_ADAPTER_REVISION_ID_OFFSET); 1258 + if (!mthca_is_memfree(dev)) { 1259 + MTHCA_GET(adapter->vendor_id, outbox, 1260 + QUERY_ADAPTER_VENDOR_ID_OFFSET); 1261 + MTHCA_GET(adapter->device_id, outbox, 1262 + QUERY_ADAPTER_DEVICE_ID_OFFSET); 1263 + MTHCA_GET(adapter->revision_id, outbox, 1264 + QUERY_ADAPTER_REVISION_ID_OFFSET); 1265 + } 1261 1266 MTHCA_GET(adapter->inta_pin, outbox, QUERY_ADAPTER_INTA_PIN_OFFSET); 1262 1267 1263 1268 get_board_id(outbox + QUERY_ADAPTER_VSD_OFFSET / 4,
+2 -1
drivers/infiniband/hw/mthca/mthca_main.c
··· 735 735 } 736 736 737 737 mdev->eq_table.inta_pin = adapter.inta_pin; 738 - mdev->rev_id = adapter.revision_id; 738 + if (!mthca_is_memfree(mdev)) 739 + mdev->rev_id = adapter.revision_id; 739 740 memcpy(mdev->board_id, adapter.board_id, sizeof mdev->board_id); 740 741 741 742 return 0;
+2
drivers/infiniband/hw/mthca/mthca_provider.c
··· 1256 1256 goto out; 1257 1257 } 1258 1258 1259 + if (mthca_is_memfree(dev)) 1260 + dev->rev_id = be32_to_cpup((__be32 *) (out_mad->data + 32)); 1259 1261 memcpy(&dev->ib_dev.node_guid, out_mad->data + 12, 8); 1260 1262 1261 1263 out: