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>
This commit is contained in:
committed by
Roland Dreier
parent
7bc531dd88
commit
6ccef1de2c
@@ -1255,9 +1255,14 @@ int mthca_QUERY_ADAPTER(struct mthca_dev *dev,
|
|||||||
if (err)
|
if (err)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
MTHCA_GET(adapter->vendor_id, outbox, QUERY_ADAPTER_VENDOR_ID_OFFSET);
|
if (!mthca_is_memfree(dev)) {
|
||||||
MTHCA_GET(adapter->device_id, outbox, QUERY_ADAPTER_DEVICE_ID_OFFSET);
|
MTHCA_GET(adapter->vendor_id, outbox,
|
||||||
MTHCA_GET(adapter->revision_id, outbox, QUERY_ADAPTER_REVISION_ID_OFFSET);
|
QUERY_ADAPTER_VENDOR_ID_OFFSET);
|
||||||
|
MTHCA_GET(adapter->device_id, outbox,
|
||||||
|
QUERY_ADAPTER_DEVICE_ID_OFFSET);
|
||||||
|
MTHCA_GET(adapter->revision_id, outbox,
|
||||||
|
QUERY_ADAPTER_REVISION_ID_OFFSET);
|
||||||
|
}
|
||||||
MTHCA_GET(adapter->inta_pin, outbox, QUERY_ADAPTER_INTA_PIN_OFFSET);
|
MTHCA_GET(adapter->inta_pin, outbox, QUERY_ADAPTER_INTA_PIN_OFFSET);
|
||||||
|
|
||||||
get_board_id(outbox + QUERY_ADAPTER_VSD_OFFSET / 4,
|
get_board_id(outbox + QUERY_ADAPTER_VSD_OFFSET / 4,
|
||||||
|
@@ -735,7 +735,8 @@ static int mthca_init_hca(struct mthca_dev *mdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mdev->eq_table.inta_pin = adapter.inta_pin;
|
mdev->eq_table.inta_pin = adapter.inta_pin;
|
||||||
mdev->rev_id = adapter.revision_id;
|
if (!mthca_is_memfree(mdev))
|
||||||
|
mdev->rev_id = adapter.revision_id;
|
||||||
memcpy(mdev->board_id, adapter.board_id, sizeof mdev->board_id);
|
memcpy(mdev->board_id, adapter.board_id, sizeof mdev->board_id);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -1256,6 +1256,8 @@ static int mthca_init_node_data(struct mthca_dev *dev)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mthca_is_memfree(dev))
|
||||||
|
dev->rev_id = be32_to_cpup((__be32 *) (out_mad->data + 32));
|
||||||
memcpy(&dev->ib_dev.node_guid, out_mad->data + 12, 8);
|
memcpy(&dev->ib_dev.node_guid, out_mad->data + 12, 8);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
Reference in New Issue
Block a user