Thread (22 messages) 22 messages, 4 authors, 2025-09-05

Re: [PATCH net-next v10 3/5] net: rnpgbe: Add basic mbx ops support

flat view

From: Yibo Dong <dong100@mucse.com>
Date: 2025-09-04 03:20:26
Also in: linux-doc, linux-hardening, lkml

On Thu, Sep 04, 2025 at 12:24:17AM +0200, Andrew Lunn wrote:
quoted
 struct mucse_mbx_info {
+	struct mucse_mbx_stats stats;
+	u32 timeout;
+	u32 usec_delay;
+	u16 size;
+	u16 fw_req;
+	u16 fw_ack;
+	/* lock for only one use mbx */
+	struct mutex lock;
 	/* fw <--> pf mbx */
 	u32 fw_pf_shm_base;
 	u32 pf2fw_mbox_ctrl;
quoted
+/**
+ * mucse_obtain_mbx_lock_pf - Obtain mailbox lock
+ * @hw: pointer to the HW structure
+ *
+ * This function maybe used in an irq handler.
+ *
+ * Return: 0 if we obtained the mailbox lock or else -EIO
+ **/
+static int mucse_obtain_mbx_lock_pf(struct mucse_hw *hw)
+{
+	struct mucse_mbx_info *mbx = &hw->mbx;
+	int try_cnt = 5000;
+	u32 reg;
+
+	reg = PF2FW_MBOX_CTRL(mbx);
+	while (try_cnt-- > 0) {
+		mbx_ctrl_wr32(mbx, reg, MBOX_PF_HOLD);
+		/* force write back before check */
+		wmb();
+		if (mbx_ctrl_rd32(mbx, reg) & MBOX_PF_HOLD)
+			return 0;
+		udelay(100);
+	}
+	return -EIO;
+}
If there is a function which obtains a lock, there is normally a
function which releases a lock. But i don't see it.
The lock is relased when send MBOX_CTRL_REQ in mucse_write_mbx_pf:

mbx_ctrl_wr32(mbx, ctrl_reg, MBOX_CTRL_REQ);

Set MBOX_PF_HOLD(bit3) to hold the lock, clear bit3 to release, and set
MBOX_CTRL_REQ(bit0) to send the req. req and lock are different bits in
one register. So we send the req along with releasing lock (set bit0 and
clear bit3).
Maybe I should add comment like this?

/* send the req along with releasing the lock */
mbx_ctrl_wr32(mbx, ctrl_reg, MBOX_CTRL_REQ);
quoted
+void mucse_init_mbx_params_pf(struct mucse_hw *hw)
+{
+	struct mucse_mbx_info *mbx = &hw->mbx;
+
+	mbx->usec_delay = 100;
+	mbx->timeout = (4 * USEC_PER_SEC) / mbx->usec_delay;
+	mbx->stats.msgs_tx = 0;
+	mbx->stats.msgs_rx = 0;
+	mbx->stats.reqs = 0;
+	mbx->stats.acks = 0;
+	mbx->size = MUCSE_MAILBOX_BYTES;
+	mutex_init(&mbx->lock);
And this mutex never seems to be used anywhere. What is it supposed to
be protecting?
mbx->lock is used in patch5, to ensure that only one uses mbx.
I will move it to patch5.
    Andrew

---
pw-bot: cr
Thanks for your feedback.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help