IB/mthca: Fix mthca_write_mtt() on HCAs with hidden memory
authorRoland Dreier <rolandd@cisco.com>
Tue, 24 Apr 2007 23:31:04 +0000 (16:31 -0700)
committerRoland Dreier <rolandd@cisco.com>
Tue, 24 Apr 2007 23:31:04 +0000 (16:31 -0700)
commit532c3b581725e2c6480a20c845fff920690286f1
tree158f1b729d77e5f94a99ac456c71e34029d3f82b
parent3f114853d4f7c1746389f26e1d500887294da8fd
IB/mthca: Fix mthca_write_mtt() on HCAs with hidden memory

Commit b2875d4c ("IB/mthca: Always fill MTTs from CPU") causes a crash
in mthca_write_mtt() with non-memfree HCAs that have their memory
hidden (that is, have only two PCI BARs instead of having a third BAR
that allows access to the RAM attached to the HCA) on 64-bit
architectures.  This is because the commit just before, c20e20ab
("IB/mthca: Merge MR and FMR space on 64-bit systems") makes
dev->mr_table.fmr_mtt_buddy equal to &dev->mr_table.mtt_buddy and
hence mthca_write_mtt() tries to write directly into the HCA's MTT
table.  However, since that table is in the HCA's memory, this is
impossible without the PCI BAR that gives access to that memory.

This causes a crash because mthca_tavor_write_mtt_seg() basically
tries to dereference some offset of a NULL pointer.  Fix this by
adding a test of MTHCA_FLAG_FMR in mthca_write_mtt() so that we always
use the WRITE_MTT firmware command rather than writing directly if
FMRs are not enabled.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/mthca/mthca_mr.c