On 11/15/25 11:38 AM, Jassi Brar wrote:
On Wed, Oct 15, 2025 at 10:27 AM Tanmay Shah <[email protected]> wrote:
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
index 5cd8ae222073..c2e187aa5d22 100644
--- a/drivers/mailbox/mailbox.c
+++ b/drivers/mailbox/mailbox.c
@@ -35,6 +35,7 @@ static int add_to_rbuf(struct mbox_chan *chan, void
*mssg)
          idx = chan->msg_free;
          chan->msg_data[idx] = mssg;
          chan->msg_count++;
+       chan->msg_slot_ro = (MBOX_TX_QUEUE_LEN - chan->msg_count);

          if (idx == MBOX_TX_QUEUE_LEN - 1)
                  chan->msg_free = 0;
@@ -70,6 +71,7 @@ static void msg_submit(struct mbox_chan *chan)
                  if (!err) {
                          chan->active_req = data;
                          chan->msg_count--;
+                       chan->msg_slot_ro = (MBOX_TX_QUEUE_LEN -
chan->msg_count);

No, I had suggested adding this info in client structure.
There is no point in carrying msg_count and msg_slot_ro in mbox_chan.
The client needs this info but can/should not access the chan internals.


Hi Jassi,

If I move msg_slot_ro to mbox_client that means, each channel needs its
own client structure. But it is possible to map single client to
multiple channels.

How about if I rename msg_slot_ro to msg_slot_tx_ro -> that says this
field should be used only for "tx" channel.

Or is it must to map unique client data structure to each channel? If
so, can I update mbox_client structure documentation ?


Hi Jassi,

I looked into this further. Looks like it's not possible to introduce
msg_slot_ro in the client data structure as of today. Because multiple
drivers are sharing same client for "tx" and "rx" both channels.
[references: 1, 2, 3]

so, msg_slot_ro won't be calculated correctly I believe.

I don't see it. Can you please explain how the calculated value could be wrong?


Hi Jassi,

so on my platform I introduced some extra logs:

[   80.827479] mbox chan Rx send message
[ 80.827485] add_to_rbuf: &chan->cl->msg_slot_ro = 00000000ab5fa771, msg slot ro = 19 [ 80.827494] msg_submit: &chan->cl->msg_slot_ro = 00000000ab5fa771, msg slot ro = 20
[   80.833064] mbox chan Tx send message
[ 80.833070] add_to_rbuf: &chan->cl->msg_slot_ro = 00000000ab5fa771, msg slot ro = 19 [ 80.833079] msg_submit: &chan->cl->msg_slot_ro = 00000000ab5fa771, msg slot ro = 20
[   80.837486] mbox chan Rx send message
[ 80.837492] add_to_rbuf: &chan->cl->msg_slot_ro = 00000000ab5fa771, msg slot ro = 19 [ 80.837501] msg_submit: &chan->cl->msg_slot_ro = 00000000ab5fa771, msg slot ro = 20

Tx and Rx both channels are updating same address of msg_slot_ro. If user wants to check msg_slot_ro for Tx channel, then it is possible that it was updated by Rx channel instead. Ideally there should be two copies of msg_slot_ro, one for Tx and one for Rx channel.

This happens because Tx and Rx both channels shares same client data structure.

Same can happen on other platforms as well.

Thanks,
Tanmay

thnx
-jassi


Reply via email to