Intents can vary in size, try to find the best fitting remote intent
instead of first fit when sending a message to the remote proc.

Signed-off-by: Chris Lew <c...@codeaurora.org>
---
 drivers/rpmsg/qcom_glink_native.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/rpmsg/qcom_glink_native.c 
b/drivers/rpmsg/qcom_glink_native.c
index 7155adad6ab6..0ba1ffe2698f 100644
--- a/drivers/rpmsg/qcom_glink_native.c
+++ b/drivers/rpmsg/qcom_glink_native.c
@@ -1252,11 +1252,16 @@ static int __qcom_glink_send(struct glink_channel 
*channel,
                        spin_lock_irqsave(&channel->intent_lock, flags);
                        idr_for_each_entry(&channel->riids, tmp, iid) {
                                if (tmp->size >= len && !tmp->in_use) {
-                                       tmp->in_use = true;
-                                       intent = tmp;
-                                       break;
+                                       if (!intent)
+                                               intent = tmp;
+                                       else if (intent->size > tmp->size)
+                                               intent = tmp;
+                                       if (intent->size == len)
+                                               break;
                                }
                        }
+                       if (intent)
+                               intent->in_use = true;
                        spin_unlock_irqrestore(&channel->intent_lock, flags);
 
                        /* We found an available intent */
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

Reply via email to