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:
parent
9511724da9
commit
8c08d50d4f
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user