On Feb 19, 2024, at 9:02 PM, Wathsala Wathawana Vithanage wrote: Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding. -----Original Message----- From: Wathsala Wathawana Vithanage > Sent: Monday, February 19, 2024 4:17 PM To: Andrew Boyer >; dev@dpdk.org Cc: Neel Patel >; nd >; Honnappa Nagarahalli >; nd > Subject: RE: [PATCH 2/3] net/ionic: remove duplicate barriers Hi Andrew, I think that this barrier may have been added to ensure any writes to q- hw_index and q->head_idx complete before ionic_q_flush computes val. Dependency chains can also prevent reordering if that's the case this barrier is not required. However, I have the following concern. diff --git a/drivers/net/ionic/ionic_main.c b/drivers/net/ionic/ionic_main.c index 1f24f64a33..814bb3b8f4 100644 --- a/drivers/net/ionic/ionic_main.c +++ b/drivers/net/ionic/ionic_main.c @@ -223,7 +223,6 @@ ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx) q->head_idx = Q_NEXT_TO_POST(q, 1); /* Ring doorbell */ - rte_wmb(); ionic_q_flush(q); err_out: Ionic_q_flush(q) uses q->hw_index and q->head_idx to compute the value of val which it writes to the address stored in q->db. I can see that q->head_idx is updated before the removed rte_wmb(), therefore it's safe to assume that " q- head_idx = Q_NEXT_TO_POST(q, 1)" and "val = IONIC_DBELL_QID(q- hw_index) | q->head_idx" will maintain the program order due to that dependency. But I don't know if there exists a dependency chain over q- hw_index. If not, then that may have been the motive behind this barrier. Since q->hw_index is also updated in the same CPU ionic_q_flush will always see the correct value, consequently val should be always correct. It's safe to remove this barrier. Thank you for the careful review. We agree with this analysis. -Andrew