Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c08d50d authored by Joachim Fenkes's avatar Joachim Fenkes Committed by Roland Dreier
Browse files

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: default avatarJoachim Fenkes <fenkes@de.ibm.com>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 9511724d
Loading
Loading
Loading
Loading
+4 −11
Original line number Diff line number Diff line
@@ -72,17 +72,9 @@ enum ehca_mr_pgsize {

static u32 ehca_encode_hwpage_size(u32 pgsize)
{
	u32 idx = 0;
	pgsize >>= 12;
	/*
	 * map mr page size into hw code:
	 * 0, 1, 2, 3 for 4K, 64K, 1M, 64M
	 */
	while (!(pgsize & 1)) {
		idx++;
		pgsize >>= 4;
	}
	return idx;
	int log = ilog2(pgsize);
	WARN_ON(log < 12 || log > 24 || log & 3);
	return (log - 12) / 4;
}

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 */
	memset(&pginfo, 0, sizeof(pginfo));
	pginfo.hwpage_size = hw_pgsize;
	/*
	 * pginfo.num_hwpages==0, ie register_rpages() will not be called
	 * but deferred to map_phys_fmr()