diff options
author | Skylar Chang <chiaweic@codeaurora.org> | 2016-12-05 18:10:19 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-12-14 09:11:17 -0800 |
commit | c5301546e50ec532d51a96661095dd569a6fee96 (patch) | |
tree | 9861d4080ac7e2142e057b18e803c77b1e34b16d /drivers/platform | |
parent | 3162449f7d245d45f007d4ea3224576ddf1bcc63 (diff) |
msm: ipa: fix split packet handling
Fix packet handling in case packet received from IPA hardware
is scattered across multiple buffers.
Change-Id: I4935ecb8eaa438d259c1c27a66f62c78f874c9ee
CRs-Fixed: 1097420
Acked-by: Ady Abraham <adya@qti.qualcomm.com>
Signed-off-by: Skylar Chang <chiaweic@codeaurora.org>
Diffstat (limited to 'drivers/platform')
-rw-r--r-- | drivers/platform/msm/ipa/ipa_v2/ipa_dp.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/platform/msm/ipa/ipa_v2/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v2/ipa_dp.c index d51e9ac97fe0..a7f1f9a040f9 100644 --- a/drivers/platform/msm/ipa/ipa_v2/ipa_dp.c +++ b/drivers/platform/msm/ipa/ipa_v2/ipa_dp.c @@ -2328,6 +2328,7 @@ static int ipa_lan_rx_pyld_hdlr(struct sk_buff *skb, unsigned int used = *(unsigned int *)skb->cb; unsigned int used_align = ALIGN(used, 32); unsigned long unused = IPA_GENERIC_RX_BUFF_BASE_SZ - used; + u32 skb2_len; IPA_DUMP_BUFF(skb->data, 0, skb->len); @@ -2510,8 +2511,9 @@ begin: sys->drop_packet = true; } - skb2 = ipa_skb_copy_for_client(skb, - status->pkt_len + IPA_PKT_STATUS_SIZE); + skb2_len = status->pkt_len + IPA_PKT_STATUS_SIZE; + skb2_len = min(skb2_len, skb->len); + skb2 = ipa_skb_copy_for_client(skb, skb2_len); if (likely(skb2)) { if (skb->len < len + IPA_PKT_STATUS_SIZE) { IPADBG("SPL skb len %d len %d\n", |