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

This commit is contained in:
Linux Build Service Account 2016-08-10 12:42:08 -07:00 committed by Gerrit - the friendly Code Review server
commit 3f9d57223f

View file

@ -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)
@ -2288,6 +2290,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)
@ -2484,7 +2501,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",
@ -2527,7 +2545,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 +