diff options
author | Mike Marciniszyn <mike.marciniszyn@qlogic.com> | 2011-01-11 02:42:22 +0100 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2011-01-11 02:42:22 +0100 |
commit | 2a600f14d25fda341b5633c75cc50a7574fc1007 (patch) | |
tree | 02d0af0c74dc1e7ef99d2798d4b5e0a375b4deb8 /drivers/infiniband/hw/qib/qib_verbs.h | |
parent | IB/qib: Change QPN increment (diff) | |
download | linux-2a600f14d25fda341b5633c75cc50a7574fc1007.tar.xz linux-2a600f14d25fda341b5633c75cc50a7574fc1007.zip |
IB/qib: RDMA lkey/rkey validation is inefficient for large MRs
The current code loops during rkey/lkey validiation to isolate the MR
for the RDMA, which is expensive when the current operation is inside
a very large memory region.
This fix optimizes rkey/lkey validation routines for user memory
regions and fast memory regions. The MR entry can be isolated by
shifts/mods instead of looping. The existing loop is preserved for
phys memory regions for now.
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to '')
-rw-r--r-- | drivers/infiniband/hw/qib/qib_verbs.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/qib/qib_verbs.h b/drivers/infiniband/hw/qib/qib_verbs.h index a08ceab510e1..63b22a9a7feb 100644 --- a/drivers/infiniband/hw/qib/qib_verbs.h +++ b/drivers/infiniband/hw/qib/qib_verbs.h @@ -301,6 +301,7 @@ struct qib_mregion { int access_flags; u32 max_segs; /* number of qib_segs in all the arrays */ u32 mapsz; /* size of the map array */ + u8 page_shift; /* 0 - non unform/non powerof2 sizes */ atomic_t refcount; struct qib_segarray *map[0]; /* the segments */ }; |