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

Commit 4639d60d authored by Tomer Tayar's avatar Tomer Tayar Committed by David S. Miller
Browse files

qed: Fix corner case for chain in-between pages



The amount of chain next pointer elements between the producer
and the consumer indices depends on which pages they currently
point to. The current calculation is based only on their difference,
and it can lead to a number of free elements which is higher by 1
than the actual value.

Signed-off-by: default avatarTomer Tayar <Tomer.Tayar@qlogic.com>
Signed-off-by: default avatarManish Chopra <manish.chopra@qlogic.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4675390a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -111,7 +111,8 @@ static inline u16 qed_chain_get_elem_left(struct qed_chain *p_chain)
	used = ((u32)0x10000u + (u32)(p_chain->prod_idx)) -
		(u32)p_chain->cons_idx;
	if (p_chain->mode == QED_CHAIN_MODE_NEXT_PTR)
		used -= (used / p_chain->elem_per_page);
		used -= p_chain->prod_idx / p_chain->elem_per_page -
			p_chain->cons_idx / p_chain->elem_per_page;

	return p_chain->capacity - used;
}