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

Commit fb67555a authored by Ravi Gummadidala's avatar Ravi Gummadidala
Browse files

msm: ipa: add more headroom to IPA RX buffers



The presence of this additional headroom can in some cases
help avoid the need to expand the header if the packet gets
forwarded in the network stack. There exist some unused bytes
at the end of the skb header and these additional headroom
bytes are borrowing from those.

Change-Id: I1be93e97c921ab067d82583fb2ea2cb18fb26114
Signed-off-by: default avatarRavi Gummadidala <rgummadi@codeaurora.org>
parent 1d6b7340
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -54,6 +54,8 @@
#define IPA_ODU_RX_POOL_SZ 32
#define IPA_SIZE_DL_CSUM_META_TRAILER 8

#define IPA_HEADROOM 128

static struct sk_buff *ipa_get_skb_ipa_rx(unsigned int len, gfp_t flags);
static void ipa_replenish_wlan_rx_cache(struct ipa_sys_context *sys);
static void ipa_replenish_rx_cache(struct ipa_sys_context *sys);
@@ -2357,6 +2359,18 @@ static struct sk_buff *ipa_get_skb_ipa_rx(unsigned int len, gfp_t flags)
	return __dev_alloc_skb(len, flags);
}

static struct sk_buff *ipa_get_skb_ipa_rx_headroom(unsigned int len,
		gfp_t flags)
{
	struct sk_buff *skb;

	skb = __dev_alloc_skb(len + IPA_HEADROOM, flags);
	if (skb)
		skb_reserve(skb, IPA_HEADROOM);

	return skb;
}

static void ipa_free_skb_rx(struct sk_buff *skb)
{
	dev_kfree_skb_any(skb);
@@ -2615,8 +2629,9 @@ static int ipa_assign_policy(struct ipa_sys_connect_params *in,
				INIT_WORK(&sys->repl_work, ipa_wq_repl_rx);
				atomic_set(&sys->curr_polling_state, 0);
				sys->rx_buff_sz = IPA_GENERIC_RX_BUFF_SZ(
					IPA_GENERIC_RX_BUFF_BASE_SZ);
				sys->get_skb = ipa_get_skb_ipa_rx;
					IPA_GENERIC_RX_BUFF_BASE_SZ) -
					IPA_HEADROOM;
				sys->get_skb = ipa_get_skb_ipa_rx_headroom;
				sys->free_skb = ipa_free_skb_rx;
				in->ipa_ep_cfg.aggr.aggr_en = IPA_ENABLE_AGGR;
				in->ipa_ep_cfg.aggr.aggr = IPA_GENERIC;