- /* Use "prod_idx-1" since ecore_chain_produce() advances the
- * page index before the producer index when getting to
- * "next_page_mask".
+ u32 cur_prod, page_mask, page_cnt, page_diff;
+
+ cur_prod = is_chain_u16(p_chain) ? p_chain->u.chain16.prod_idx
+ : p_chain->u.chain32.prod_idx;
+
+ /* Assume that number of elements in a page is power of 2 */
+ page_mask = ~p_chain->elem_per_page_mask;
+
+ /* Use "cur_prod - 1" and "prod_idx - 1" since producer index
+ * reaches the first element of next page before the page index
+ * is incremented. See ecore_chain_produce().
+ * Index wrap around is not a problem because the difference
+ * between current and given producer indexes is always
+ * positive and lower than the chain's capacity.