2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-03 19:24:02 +08:00

IB/ehca: Fix ehca_encode_hwpage_size() and alloc_fmr()

Simplify ehca_encode_hwpage_size(), fixing an infinite loop for pgsize == 0
in the process. Fix the bug in alloc_fmr() that triggered the loop.

Signed-off-by: Joachim Fenkes <fenkes@de.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
Joachim Fenkes 2007-10-16 17:26:54 +02:00 committed by Roland Dreier
parent 9511724da9
commit 8c08d50d4f

View File

@ -72,17 +72,9 @@ enum ehca_mr_pgsize {
static u32 ehca_encode_hwpage_size(u32 pgsize) static u32 ehca_encode_hwpage_size(u32 pgsize)
{ {
u32 idx = 0; int log = ilog2(pgsize);
pgsize >>= 12; WARN_ON(log < 12 || log > 24 || log & 3);
/* return (log - 12) / 4;
* map mr page size into hw code:
* 0, 1, 2, 3 for 4K, 64K, 1M, 64M
*/
while (!(pgsize & 1)) {
idx++;
pgsize >>= 4;
}
return idx;
} }
static u64 ehca_get_max_hwpage_size(struct ehca_shca *shca) static u64 ehca_get_max_hwpage_size(struct ehca_shca *shca)
@ -826,6 +818,7 @@ struct ib_fmr *ehca_alloc_fmr(struct ib_pd *pd,
/* register MR on HCA */ /* register MR on HCA */
memset(&pginfo, 0, sizeof(pginfo)); memset(&pginfo, 0, sizeof(pginfo));
pginfo.hwpage_size = hw_pgsize;
/* /*
* pginfo.num_hwpages==0, ie register_rpages() will not be called * pginfo.num_hwpages==0, ie register_rpages() will not be called
* but deferred to map_phys_fmr() * but deferred to map_phys_fmr()