Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7aa41f5 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "rpmsg: glink: Deny intent request if reusable intent fits"

parents be77303e b980dc4a
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -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);