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

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

Merge "msm: ipa: do not use skb clones for lan clients"

parents 1d525e58 1b1c84f3
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@
		IPA_GENERIC_RX_BUFF_BASE_SZ) -\
		IPA_GENERIC_RX_BUFF_BASE_SZ)

#define IPA_RX_BUFF_CLIENT_HEADROOM 256

/* less 1 nominal MTU (1500 bytes) rounded to units of KB */
#define IPA_ADJUST_AGGR_BYTE_LIMIT(X) (((X) - IPA_MTU)/1000)

@@ -2120,6 +2122,21 @@ static void ipa_cleanup_rx(struct ipa_sys_context *sys)
	}
}

static struct sk_buff *ipa_skb_copy_for_client(struct sk_buff *skb, int len)
{
	struct sk_buff *skb2 = NULL;

	skb2 = __dev_alloc_skb(len + IPA_RX_BUFF_CLIENT_HEADROOM, GFP_KERNEL);
	if (likely(skb2)) {
		/* Set the data pointer */
		skb_reserve(skb2, IPA_RX_BUFF_CLIENT_HEADROOM);
		memcpy(skb2->data, skb->data, len);
		skb2->len = len;
		skb_set_tail_pointer(skb2, len);
	}

	return skb2;
}

static int ipa_lan_rx_pyld_hdlr(struct sk_buff *skb,
		struct ipa_sys_context *sys)
@@ -2316,7 +2333,8 @@ begin:
				sys->drop_packet = true;
			}

			skb2 = skb_clone(skb, GFP_KERNEL);
			skb2 = ipa_skb_copy_for_client(skb,
				status->pkt_len + IPA_PKT_STATUS_SIZE);
			if (likely(skb2)) {
				if (skb->len < len + IPA_PKT_STATUS_SIZE) {
					IPADBG("SPL skb len %d len %d\n",
@@ -2359,7 +2377,7 @@ begin:
						IPA_PKT_STATUS_SIZE);
				}
			} else {
				IPAERR("fail to clone\n");
				IPAERR("fail to alloc skb\n");
				if (skb->len < len) {
					sys->prev_skb = NULL;
					sys->len_rem = len - skb->len +