qcacmn: Fix delay req queue not update to date issue
Delay write of SRNG regs may happen on different CPUs. Sometimes wmb may not sufficient to protect the update in sequence. Change is aimed to buy more time for the update of different CPUs. Change-Id: I4149decf5a29ea213aa38abd2bef062f25d7858d CRs-Fixed: 3591457
Цей коміт міститься в:
@@ -835,6 +835,20 @@ static void hal_reg_write_work(void *arg)
|
||||
if (!q_elem->valid)
|
||||
break;
|
||||
|
||||
qdf_rmb();
|
||||
/* buy some more time to make sure all fields
|
||||
* in q_elem is updated per different CPUs, in
|
||||
* case wmb/rmb is not taken effect
|
||||
*/
|
||||
if (qdf_unlikely(!q_elem->srng ||
|
||||
(qdf_atomic_read(&q_elem->ring_id) !=
|
||||
q_elem->srng->ring_id))) {
|
||||
hal_err_rl("q_elem fields not up to date %d %d",
|
||||
q_elem->srng->ring_id,
|
||||
qdf_atomic_read(&q_elem->ring_id));
|
||||
qdf_assert_always(0);
|
||||
}
|
||||
|
||||
q_elem->dequeue_time = qdf_get_log_timestamp();
|
||||
ring_id = q_elem->srng->ring_id;
|
||||
addr = q_elem->addr;
|
||||
@@ -934,6 +948,7 @@ static void hal_reg_write_enqueue(struct hal_soc *hal_soc,
|
||||
|
||||
q_elem->srng = srng;
|
||||
q_elem->addr = addr;
|
||||
qdf_atomic_set(&q_elem->ring_id, srng->ring_id);
|
||||
q_elem->enqueue_val = value;
|
||||
q_elem->enqueue_time = qdf_get_log_timestamp();
|
||||
|
||||
|
Посилання в новій задачі
Заблокувати користувача