Merge "msm: ipa: do not use skb clones for lan clients"
This commit is contained in:
commit
3f9d57223f
1 changed files with 20 additions and 2 deletions
|
@ -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 +
|
||||
|
|
Loading…
Add table
Reference in a new issue