qed: rework qed_rdma_bmap_free()
qed_rdma_bmap_free() is mostly an opencoded version of printk("%*pb"). Using %*pb format simplifies the code, and helps to avoid inefficient usage of bitmap_weight(). While here, reorganize logic to avoid calculating bmap weight if check is false. Signed-off-by: Yury Norov <yury.norov@gmail.com>
This commit is contained in:
parent
c8f14e2b73
commit
64b87c1a18
@ -319,44 +319,27 @@ free_rdma_dev:
|
||||
void qed_rdma_bmap_free(struct qed_hwfn *p_hwfn,
|
||||
struct qed_bmap *bmap, bool check)
|
||||
{
|
||||
int weight = bitmap_weight(bmap->bitmap, bmap->max_count);
|
||||
int last_line = bmap->max_count / (64 * 8);
|
||||
int last_item = last_line * 8 +
|
||||
DIV_ROUND_UP(bmap->max_count % (64 * 8), 64);
|
||||
u64 *pmap = (u64 *)bmap->bitmap;
|
||||
int line, item, offset;
|
||||
u8 str_last_line[200] = { 0 };
|
||||
unsigned int bit, weight, nbits;
|
||||
unsigned long *b;
|
||||
|
||||
if (!weight || !check)
|
||||
if (!check)
|
||||
goto end;
|
||||
|
||||
weight = bitmap_weight(bmap->bitmap, bmap->max_count);
|
||||
if (!weight)
|
||||
goto end;
|
||||
|
||||
DP_NOTICE(p_hwfn,
|
||||
"%s bitmap not free - size=%d, weight=%d, 512 bits per line\n",
|
||||
bmap->name, bmap->max_count, weight);
|
||||
|
||||
/* print aligned non-zero lines, if any */
|
||||
for (item = 0, line = 0; line < last_line; line++, item += 8)
|
||||
if (bitmap_weight((unsigned long *)&pmap[item], 64 * 8))
|
||||
DP_NOTICE(p_hwfn,
|
||||
"line 0x%04x: 0x%016llx 0x%016llx 0x%016llx 0x%016llx 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n",
|
||||
line,
|
||||
pmap[item],
|
||||
pmap[item + 1],
|
||||
pmap[item + 2],
|
||||
pmap[item + 3],
|
||||
pmap[item + 4],
|
||||
pmap[item + 5],
|
||||
pmap[item + 6], pmap[item + 7]);
|
||||
for (bit = 0; bit < bmap->max_count; bit += 512) {
|
||||
b = bmap->bitmap + BITS_TO_LONGS(bit);
|
||||
nbits = min(bmap->max_count - bit, 512U);
|
||||
|
||||
/* print last unaligned non-zero line, if any */
|
||||
if ((bmap->max_count % (64 * 8)) &&
|
||||
(bitmap_weight((unsigned long *)&pmap[item],
|
||||
bmap->max_count - item * 64))) {
|
||||
offset = sprintf(str_last_line, "line 0x%04x: ", line);
|
||||
for (; item < last_item; item++)
|
||||
offset += sprintf(str_last_line + offset,
|
||||
"0x%016llx ", pmap[item]);
|
||||
DP_NOTICE(p_hwfn, "%s\n", str_last_line);
|
||||
if (!bitmap_empty(b, nbits))
|
||||
DP_NOTICE(p_hwfn,
|
||||
"line 0x%04x: %*pb\n", bit / 512, nbits, b);
|
||||
}
|
||||
|
||||
end:
|
||||
|
Loading…
Reference in New Issue
Block a user