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

Commit 82e051ae authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "soc: qcom: glink: Best Fit approach to find intent"

parents 2582beb1 fab7b282
Loading
Loading
Loading
Loading
+22 −13
Original line number Diff line number Diff line
@@ -1146,6 +1146,7 @@ int ch_pop_remote_rx_intent(struct channel_ctx *ctx, size_t size,
{
	struct glink_core_rx_intent *intent;
	struct glink_core_rx_intent *intent_tmp;
	struct glink_core_rx_intent *best_intent = NULL;
	unsigned long flags;

	if (GLINK_MAX_PKT_SIZE < size) {
@@ -1168,20 +1169,28 @@ int ch_pop_remote_rx_intent(struct channel_ctx *ctx, size_t size,
	list_for_each_entry_safe(intent, intent_tmp, &ctx->rmt_rx_intent_list,
			list) {
		if (intent->intent_size >= size) {
			list_del(&intent->list);
			if (!best_intent)
				best_intent = intent;
			else if (best_intent->intent_size > intent->intent_size)
				best_intent = intent;
			if (best_intent->intent_size == size)
				break;
		}
	}
	if (best_intent) {
		list_del(&best_intent->list);
		GLINK_DBG_CH(ctx,
				"%s: R[%u]:%zu Removed remote intent\n",
				__func__,
					intent->id,
					intent->intent_size);
			*riid_ptr = intent->id;
			*intent_size = intent->intent_size;
			kfree(intent);
				best_intent->id,
				best_intent->intent_size);
		*riid_ptr = best_intent->id;
		*intent_size = best_intent->intent_size;
		kfree(best_intent);
		spin_unlock_irqrestore(
			&ctx->rmt_rx_intent_lst_lock_lhc2, flags);
		return 0;
	}
	}
	spin_unlock_irqrestore(&ctx->rmt_rx_intent_lst_lock_lhc2, flags);
	return -EAGAIN;
}
@@ -2824,7 +2833,7 @@ static int glink_tx_common(void *handle, void *pkt_priv,
		tracer_pkt_log_event(data, GLINK_CORE_TX);
	}

	/* find matching rx intent (first-fit algorithm for now) */
	/* find matching rx intent (best-fit algorithm for now) */
	if (ch_pop_remote_rx_intent(ctx, size, &riid, &intent_size)) {
		if (!(tx_flags & GLINK_TX_REQ_INTENT)) {
			/* no rx intent available */