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

Commit 8a0e3875 authored by Jagadeesh Ponduru's avatar Jagadeesh Ponduru
Browse files

msm: ipa: Fix to free up all pending EOB pages



Make changes to free up all pending EOB pages when SKB allocation
used to handle EOT is failed as we could end up in a frag
overflow.

Change-Id: I80ae84d00d1bbf2cf89e97261d2fe8c3742eda04
Signed-off-by: default avatarJagadeesh Ponduru <jponduru@codeaurora.org>
parent c96bcb72
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -3500,17 +3500,21 @@ static struct sk_buff *handle_page_completion(struct gsi_chan_xfer_notify
		sys->ep->client == IPA_CLIENT_APPS_LAN_CONS) {
		rx_skb = alloc_skb(0, GFP_ATOMIC);
		if (unlikely(!rx_skb)) {
			IPAERR("skb alloc failure\n");
			list_del(&rx_pkt->link);
			IPAERR("skb alloc failure, free all pending pages\n");
			list_for_each_entry_safe(rx_pkt, tmp, head, link) {
				rx_page = rx_pkt->page_data;
				list_del_init(&rx_pkt->link);
				if (!rx_page.is_tmp_alloc) {
					init_page_count(rx_page.page);
				} else {
				dma_unmap_page(ipa3_ctx->pdev, rx_page.dma_addr,
					dma_unmap_page(ipa3_ctx->pdev,
						rx_page.dma_addr,
						rx_pkt->len, DMA_FROM_DEVICE);
					__free_pages(rx_pkt->page_data.page,
							IPA_WAN_PAGE_ORDER);
				}
				rx_pkt->sys->free_rx_wrapper(rx_pkt);
			}
			IPA_STATS_INC_CNT(ipa3_ctx->stats.rx_page_drop_cnt);
			return NULL;
		}