From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
To: Elliot Berman <quic_eberman@quicinc.com>,
Bjorn Andersson <quic_bjorande@quicinc.com>,
Jassi Brar <jassisinghbrar@gmail.com>
Cc: Murali Nalajala <quic_mnalajal@quicinc.com>,
Trilok Soni <quic_tsoni@quicinc.com>,
Srivatsa Vaddagiri <quic_svaddagi@quicinc.com>,
Carl van Schaik <quic_cvanscha@quicinc.com>,
Prakruthi Deepak Heragu <quic_pheragu@quicinc.com>,
Andy Gross <agross@kernel.org>,
linux-arm-kernel@lists.infradead.org,
Mark Rutland <mark.rutland@arm.com>,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Sudeep Holla <sudeep.holla@arm.com>,
Marc Zyngier <maz@kernel.org>, Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Jonathan Corbet <corbet@lwn.net>, Will Deacon <will@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Arnd Bergmann <arnd@arndb.de>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
devicetree@vger.kernel.org, linux-doc@vger.kernel.org,
linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 09/13] mailbox: Add Gunyah message queue mailbox
Date: Mon, 17 Oct 2022 11:43:41 +0300 [thread overview]
Message-ID: <a4a8557e-3fe7-356c-9434-01263f6d9771@linaro.org> (raw)
In-Reply-To: <c6c32b15-e32e-4362-00fc-e6710dca2546@quicinc.com>
On 14/10/2022 01:32, Elliot Berman wrote:
>
>
> On 10/12/2022 2:47 PM, Dmitry Baryshkov wrote:
>> On 11/10/2022 03:08, Elliot Berman wrote:
>>> +
>>> +static irqreturn_t gh_msgq_tx_irq_handler(int irq, void *data)
>>> +{
>>> + struct gunyah_msgq *msgq = data;
>>> +
>>> + mbox_chan_txdone(gunyah_msgq_chan(msgq), 0);
>>> +
>>> + return IRQ_HANDLED;
>>> +}
>>> +
>>> +static void gh_msgq_txdone_tasklet(unsigned long data)
>>> +{
>>> + struct gunyah_msgq *msgq = (struct gunyah_msgq *)data;
>>> +
>>> + mbox_chan_txdone(gunyah_msgq_chan(msgq), msgq->last_status);
>>
>> I don't quite get this. Why do you need both an IRQ and a tasklet?
>>
>
> I've now tweaked the code comments now as well to explain a bit better.
>
> Gunyah tells us in the hypercall itself whether the message queue is
> full. Once the the message queue is full, Gunyah will let us know when
> reader starts draining the queue and we can start adding more messages
> via the tx_irq.
>
> One point to note: the last message to be sent into the message queue
> that makes the queue full can be detected. The hypercall reports that
> the message was sent (GH_ERROR_OK) and the "ready" return value is
> false. In its current form, the msgq mailbox driver should never make a
> send hypercall and get GH_ERROR_MSGQUEUE_FULL because the driver
> properly track when the message queue is full.
>
> When mailbox driver reports txdone, the implication is that more
> messages can be sent (not just that the message was transmitted). In
> typical operation, the msgq mailbox driver can immediately report that
> the message was sent and no tx_irq happens because the hypercall returns
> GH_ERROR_OK and ready=true. The mailbox framework doesn't allow txdone
> directly from the send_data callback. To work around that, Jassi
> recommended we use tasklet [1]. In the "atypical" case where message
> queue becomes full, we get GH_ERROR_OK and ready=false. In that case, we
> don't report txdone right away with the tasklet and instead wait for the
> tx_irq to know when more messages can be sent.
Can we please get some sort of this information into the comments in the
source file?
>
> [1]: Tasklet works because send_data is called from mailbox framework
> with interrupts disabled. Once interrupts are re-enabled, the txdone is
> allowed to happen which is also when tasklet runs.
>
>>> +
>>> + /**
>>> + * EAGAIN: message didn't send.
>>> + * ret = 1: message sent, but now the message queue is full and
>>> we can't send any more msgs.
>>> + * Either way, don't report that this message is done.
>>> + */
>>> + if (ret == -EAGAIN || ret == 1)
>>> + return ret;
>>
>> '1' doesn't seem to be a valid return code for _send_data.
>>
>> Also it would be logical to return any error here, not just -EAGAIN.
>>
>
>
> If I return error to mailbox framework, then the message is stuck:
> clients don't know that there was some underlying transport failure. It
> would be retried if the client sends another message, but there is no
> guarantee that either retrying later would work (what would have
> changed?) nor that client would send another message to trigger retry.
> If the message is malformed or message queue not correctly set up,
> client would never know. Client should be told that the message wasn't
> sent.
I see. msg_submit() doesn't propagate the error.
>
>
>>> +int gunyah_msgq_init(struct device *parent, struct gunyah_msgq
>>> *msgq, struct mbox_client *cl,
>>> + struct gunyah_resource *tx_ghrsc, struct
>>> gunyah_resource *rx_ghrsc)
>>
>> Are the message queues allocated/created dynamically or statically? If
>> the later is true, please use devm_request(_threaded)_irq and
>> devm_kzalloc.
>>
>
> With the exception of resource manager, message queues are created
> dynamically.
>
> P.S. Thanks for all the other suggestions in this and the other patches,
> I've applied them.
>
> Thanks,
> Elliot
--
With best wishes
Dmitry
next prev parent reply other threads:[~2022-10-17 8:43 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-11 0:08 [PATCH v5 00/13] Drivers for gunyah hypervisor Elliot Berman
2022-10-11 0:08 ` [PATCH v5 01/13] docs: gunyah: Introduce Gunyah Hypervisor Elliot Berman
2022-10-11 9:36 ` Bagas Sanjaya
2022-10-11 0:08 ` [PATCH v5 02/13] dt-bindings: Add binding for gunyah hypervisor Elliot Berman
2022-10-12 15:56 ` Rob Herring
2022-10-13 23:58 ` Elliot Berman
2022-10-26 21:16 ` Rob Herring
2022-10-27 16:17 ` Elliot Berman
2022-10-27 19:55 ` Krzysztof Kozlowski
2022-11-01 3:19 ` Elliot Berman
2022-11-02 18:47 ` Krzysztof Kozlowski
2022-10-11 0:08 ` [PATCH v5 03/13] gunyah: Common types and error codes for Gunyah hypercalls Elliot Berman
2022-10-11 7:21 ` Greg Kroah-Hartman
2022-10-11 18:21 ` Elliot Berman
2022-10-11 18:48 ` Greg Kroah-Hartman
2022-10-11 18:50 ` Trilok Soni
2022-10-11 19:01 ` Greg Kroah-Hartman
2022-10-11 0:08 ` [PATCH v5 04/13] arm64: smccc: Include alternative-macros.h Elliot Berman
2022-10-11 7:22 ` Greg Kroah-Hartman
2022-10-11 22:45 ` Elliot Berman
2022-10-11 0:08 ` [PATCH v5 05/13] virt: gunyah: Add hypercalls to identify Gunyah Elliot Berman
2022-10-11 6:22 ` [PATCH v5 5/13] " Jiri Slaby
2022-10-12 21:31 ` [PATCH v5 05/13] " Dmitry Baryshkov
2022-10-11 0:08 ` [PATCH v5 06/13] virt: gunyah: Identify hypervisor version Elliot Berman
2022-10-11 6:13 ` Greg Kroah-Hartman
2022-10-13 23:00 ` Elliot Berman
2022-10-14 7:36 ` Greg Kroah-Hartman
2022-10-12 22:45 ` kernel test robot
2022-10-11 0:08 ` [PATCH v5 07/13] mailbox: Allow direct registration to a channel Elliot Berman
2022-10-11 0:08 ` [PATCH v5 08/13] virt: gunyah: msgq: Add hypercalls to send and receive messages Elliot Berman
2022-10-11 0:08 ` [PATCH v5 09/13] mailbox: Add Gunyah message queue mailbox Elliot Berman
2022-10-12 21:47 ` Dmitry Baryshkov
2022-10-13 22:32 ` Elliot Berman
2022-10-17 8:43 ` Dmitry Baryshkov [this message]
2022-10-11 0:08 ` [PATCH v5 10/13] gunyah: rsc_mgr: Add resource manager RPC core Elliot Berman
2022-10-12 22:52 ` Dmitry Baryshkov
2022-10-13 22:32 ` Elliot Berman
2022-10-17 8:37 ` Dmitry Baryshkov
2022-10-11 0:08 ` [PATCH v5 11/13] gunyah: rsc_mgr: Add RPC for console services Elliot Berman
2022-10-11 0:08 ` [PATCH v5 12/13] gunyah: rsc_mgr: Add subdevices bus Elliot Berman
2022-10-11 0:08 ` [PATCH v5 13/13] tty: gunyah: Add tty console driver for RM Console Services Elliot Berman
2022-10-11 6:02 ` Jiri Slaby
2022-10-11 11:09 ` Arnd Bergmann
2022-10-11 22:04 ` Elliot Berman
2022-10-12 6:55 ` Greg Kroah-Hartman
2022-10-13 20:54 ` Elliot Berman
2022-10-14 7:38 ` Greg Kroah-Hartman
2022-10-11 18:22 ` Elliot Berman
2022-10-11 22:04 ` Elliot Berman
2022-10-11 17:55 ` kernel test robot
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=a4a8557e-3fe7-356c-9434-01263f6d9771@linaro.org \
--to=dmitry.baryshkov@linaro.org \
--cc=agross@kernel.org \
--cc=arnd@arndb.de \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=jassisinghbrar@gmail.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=quic_bjorande@quicinc.com \
--cc=quic_cvanscha@quicinc.com \
--cc=quic_eberman@quicinc.com \
--cc=quic_mnalajal@quicinc.com \
--cc=quic_pheragu@quicinc.com \
--cc=quic_svaddagi@quicinc.com \
--cc=quic_tsoni@quicinc.com \
--cc=robh+dt@kernel.org \
--cc=sudeep.holla@arm.com \
--cc=will@kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).