mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Shah, Tanmay" <tanmays@amd.com>
To: Bjorn Andersson <andersson@kernel.org>, <jassisinghbrar@gmail.com>
Cc: <linux-kernel@vger.kernel.org>,
	<linux-remoteproc@vger.kernel.org>, <tanmay.shah@amd.com>,
	<mathieu.poirier@linaro.org>
Subject: Re: [PATCH] mailbox: add API to query available TX queue slots
Date: Mon, 23 Feb 2026 10:06:45 -0600	[thread overview]
Message-ID: <0ee57297-cf34-414f-9f5c-acc3f9b99a92@amd.com> (raw)
In-Reply-To: <jo4kugxook5b6fl7ifh3nuznehotkyqwnrgwq3olank7cvzhmj@hj5ibm3bbsln>



On 2/23/2026 9:29 AM, Bjorn Andersson wrote:
> On Mon, Feb 09, 2026 at 05:44:30PM -0600, jassisinghbrar@gmail.com wrote:
>> From: Jassi Brar <jassisinghbrar@gmail.com>
>>
>> Clients sometimes need to know whether the mailbox TX queue has room
>> before posting a new message.
> 
> This is rather vague, could you be more specific?
> 
>> Rather than exposing internal queue state
>> through a struct field, provide a proper accessor function that returns
>> the number of available slots for a given channel.
>>
>> This lets clients choose to back off when the queue is full instead of
>> hitting the -ENOBUFS error path and the misleading "Try increasing
>> MBOX_TX_QUEUE_LEN" warning.
>>
> 
> In the event that we're using the mailbox framework as a doorbell, I
> presume that the queue is full of duplicate rings already - so backing
> off it perfectly fine.
> 
> But in the case where the client actually uses the interface to convey
> data, what is the expected way for the client to know when to make
> another attempt?
> 

Hi Bjorn,

Thanks for the reviews.
As per my understanding client would have to poll this API and make sure
queue is not full to send the new data.

Polling can happen at regular interval. I think mbox tx client data
structure can set interval time at which rate the next
mbox_send_message() will be called if queue has data. Client can poll
this API at the same interval. minimum time is I think 1ms.

I will let Jassi add more to this understanding.

Thanks,
Tanmay

> Regards,
> Bjorn
> 
>> Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
>> ---
>>  drivers/mailbox/mailbox.c      | 23 +++++++++++++++++++++++
>>  include/linux/mailbox_client.h |  1 +
>>  2 files changed, 24 insertions(+)
>>
>> diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
>> index 2acc6ec229a4..22eb8f3213be 100644
>> --- a/drivers/mailbox/mailbox.c
>> +++ b/drivers/mailbox/mailbox.c
>> @@ -218,6 +218,29 @@ bool mbox_client_peek_data(struct mbox_chan *chan)
>>  }
>>  EXPORT_SYMBOL_GPL(mbox_client_peek_data);
>>  
>> +/**
>> + * mbox_chan_tx_slots_available - Query the number of available TX queue slots.
>> + * @chan: Mailbox channel to query.
>> + *
>> + * Clients may call this to check how many messages can be queued via
>> + * mbox_send_message() before the channel's TX queue is full. This helps
>> + * clients avoid the -ENOBUFS error without needing to increase
>> + * MBOX_TX_QUEUE_LEN.
>> + * This can be called from atomic context.
>> + *
>> + * Return: Number of available slots in the channel's TX queue.
>> + */
>> +unsigned int mbox_chan_tx_slots_available(struct mbox_chan *chan)
>> +{
>> +	unsigned int ret;
>> +
>> +	guard(spinlock_irqsave)(&chan->lock);
>> +	ret = MBOX_TX_QUEUE_LEN - chan->msg_count;
>> +
>> +	return ret;
>> +}
>> +EXPORT_SYMBOL_GPL(mbox_chan_tx_slots_available);
>> +
>>  /**
>>   * mbox_send_message -	For client to submit a message to be
>>   *				sent to the remote.
>> diff --git a/include/linux/mailbox_client.h b/include/linux/mailbox_client.h
>> index c6eea9afb943..e5997120f45c 100644
>> --- a/include/linux/mailbox_client.h
>> +++ b/include/linux/mailbox_client.h
>> @@ -45,6 +45,7 @@ int mbox_send_message(struct mbox_chan *chan, void *mssg);
>>  int mbox_flush(struct mbox_chan *chan, unsigned long timeout);
>>  void mbox_client_txdone(struct mbox_chan *chan, int r); /* atomic */
>>  bool mbox_client_peek_data(struct mbox_chan *chan); /* atomic */
>> +unsigned int mbox_chan_tx_slots_available(struct mbox_chan *chan); /* atomic */
>>  void mbox_free_channel(struct mbox_chan *chan); /* may sleep */
>>  
>>  #endif /* __MAILBOX_CLIENT_H */
>> -- 
>> 2.43.0
>>


  reply	other threads:[~2026-02-23 16:06 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-09 23:44 jassisinghbrar
2026-02-16 18:38 ` Shah, Tanmay
2026-02-23 15:29 ` Bjorn Andersson
2026-02-23 16:06   ` Shah, Tanmay [this message]
2026-02-24  0:35   ` Jassi Brar
2026-02-27  3:53     ` Bjorn Andersson
2026-03-04 15:09       ` Shah, Tanmay
2026-03-29 16:37 ` Jassi Brar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0ee57297-cf34-414f-9f5c-acc3f9b99a92@amd.com \
    --to=tanmays@amd.com \
    --cc=andersson@kernel.org \
    --cc=jassisinghbrar@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=mathieu.poirier@linaro.org \
    --cc=tanmay.shah@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®