[PATCH 04/24] drm/bridge/sii8620: add continuations to messages
Archit Taneja
architt at codeaurora.org
Tue Jan 24 07:57:32 UTC 2017
On 01/23/2017 04:03 PM, Andrzej Hajda wrote:
> On 23.01.2017 09:31, Archit Taneja wrote:
>>
>> On 01/20/2017 01:08 PM, Andrzej Hajda wrote:
>>> Due to asynchronous nature of MHL flow of execution is dispersed. Logical
>>> continuation of some actions happens after response of peer, i.e in interrupt
>>> handler. To simplify coding continuation mechanism has been added - it is now
>>> possible to provide continuation callback, which will be called after peer
>>> responds to given action.
>> Could you wrap this to 75 chars?
>
> OK
>
>>
>>> Signed-off-by: Andrzej Hajda <a.hajda at samsung.com>
>>> ---
>>> drivers/gpu/drm/bridge/sil-sii8620.c | 20 ++++++++++++++++++++
>>> 1 file changed, 20 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/bridge/sil-sii8620.c b/drivers/gpu/drm/bridge/sil-sii8620.c
>>> index 75867c0..cde0074 100644
>>> --- a/drivers/gpu/drm/bridge/sil-sii8620.c
>>> +++ b/drivers/gpu/drm/bridge/sil-sii8620.c
>>> @@ -78,12 +78,15 @@ struct sii8620_mt_msg;
>>> typedef void (*sii8620_mt_msg_cb)(struct sii8620 *ctx,
>>> struct sii8620_mt_msg *msg);
>>>
>>> +typedef void (*sii8620_cb)(struct sii8620 *ctx, int ret);
>>> +
>>> struct sii8620_mt_msg {
>>> struct list_head node;
>>> u8 reg[4];
>>> u8 ret;
>>> sii8620_mt_msg_cb send;
>>> sii8620_mt_msg_cb recv;
>>> + sii8620_cb continuation;
>>> };
>>>
>>> static const u8 sii8620_i2c_page[] = {
>>> @@ -258,6 +261,8 @@ static void sii8620_mt_work(struct sii8620 *ctx)
>>> node);
>>> if (msg->recv)
>>> msg->recv(ctx, msg);
>>> + if (msg->continuation)
>>> + msg->continuation(ctx, msg->ret);
>> I was wondering if instead of executing the continuation via a callback,
>> would it make sense to insert them as a new message instead?
>>
>> I don't have the complete context of this, so feel free to ignore the suggestion
>> if doesn't make sense.
>
> My assumption was that continuation should be tied to the message it was
> attached to - ie it should be called after response for the message and
> it should be called with the result of the response.
> If we assume messages are fully serialized (as it is now) it could be
> done as you suggested, but I prefer to leave possibility to de-serialize
> message queue in the future.
Sure. Let's leave it as is.
Archit
>
> Regards
> Andrzej
>
>>
>> Thanks,
>> Archit
>>
>>> list_del(&msg->node);
>>> kfree(msg);
>>> }
>>> @@ -310,6 +315,21 @@ static struct sii8620_mt_msg *sii8620_mt_msg_new(struct sii8620 *ctx)
>>> return msg;
>>> }
>>>
>>> +static void sii8620_mt_set_cont(struct sii8620 *ctx, sii8620_cb cont)
>>> +{
>>> + struct sii8620_mt_msg *msg;
>>> +
>>> + if (ctx->error)
>>> + return;
>>> +
>>> + if (list_empty(&ctx->mt_queue)) {
>>> + ctx->error = -EINVAL;
>>> + return;
>>> + }
>>> + msg = list_last_entry(&ctx->mt_queue, struct sii8620_mt_msg, node);
>>> + msg->continuation = cont;
>>> +}
>>> +
>>> static void sii8620_mt_msc_cmd(struct sii8620 *ctx, u8 cmd, u8 arg1, u8 arg2)
>>> {
>>> struct sii8620_mt_msg *msg = sii8620_mt_msg_new(ctx);
>>>
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
More information about the dri-devel
mailing list