mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
rpmsg: glink: Deny intent request if reusable intent fits
In high traffic scenarios a remote may request extra intents to send data faster. If the work thread that handles these intent requests is starved of cpu time, then these requests can build up. Some remote procs may not be able to handle this burst of built up intent requests. In order to prevent intent build up, deny intent requests that can be fulfilled by default intents that are reusable. Change-Id: I0932b458eb5694bdd5f92f1b4dc19b578da1e4da Signed-off-by: Chris Lew <clew@codeaurora.org>
This commit is contained in:
parent
7d366a6309
commit
b980dc4ad6
@ -818,9 +818,11 @@ static void qcom_glink_handle_rx_done(struct qcom_glink *glink,
|
||||
static void qcom_glink_handle_intent_req(struct qcom_glink *glink,
|
||||
u32 cid, size_t size)
|
||||
{
|
||||
struct glink_core_rx_intent *intent;
|
||||
struct glink_core_rx_intent *intent = NULL;
|
||||
struct glink_core_rx_intent *tmp;
|
||||
struct glink_channel *channel;
|
||||
unsigned long flags;
|
||||
int iid;
|
||||
|
||||
spin_lock_irqsave(&glink->idr_lock, flags);
|
||||
channel = idr_find(&glink->rcids, cid);
|
||||
@ -831,6 +833,19 @@ static void qcom_glink_handle_intent_req(struct qcom_glink *glink,
|
||||
return;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&channel->intent_lock, flags);
|
||||
idr_for_each_entry(&channel->liids, tmp, iid) {
|
||||
if (tmp->size >= size && tmp->reuse) {
|
||||
intent = tmp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&channel->intent_lock, flags);
|
||||
if (intent) {
|
||||
qcom_glink_send_intent_req_ack(glink, channel, !!intent);
|
||||
return;
|
||||
}
|
||||
|
||||
intent = qcom_glink_alloc_intent(glink, channel, size, false);
|
||||
if (intent)
|
||||
qcom_glink_advertise_intent(glink, channel, intent);
|
||||
|
Loading…
x
Reference in New Issue
Block a user