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

此提交包含在:
qctecmdr
2021-09-21 03:29:30 -07:00
提交者 Gerrit - the friendly Code Review server
當前提交 894fa78b04

查看文件

@@ -3938,21 +3938,25 @@ static struct sk_buff *handle_page_completion(struct gsi_chan_xfer_notify
sys->ep->client == IPA_CLIENT_APPS_LAN_CONS) { sys->ep->client == IPA_CLIENT_APPS_LAN_CONS) {
rx_skb = alloc_skb(0, GFP_ATOMIC); rx_skb = alloc_skb(0, GFP_ATOMIC);
if (unlikely(!rx_skb)) { if (unlikely(!rx_skb)) {
IPAERR("skb alloc failure\n"); IPAERR("skb alloc failure, free all pending pages\n");
list_del_init(&rx_pkt->link); list_for_each_entry_safe(rx_pkt, tmp, head, link) {
if (!rx_page.is_tmp_alloc) { rx_page = rx_pkt->page_data;
init_page_count(rx_page.page); size = rx_pkt->data_len;
spin_lock_bh(&rx_pkt->sys->spinlock); list_del_init(&rx_pkt->link);
/* Add the element to head. */ if (!rx_page.is_tmp_alloc) {
list_add(&rx_pkt->link, init_page_count(rx_page.page);
&rx_pkt->sys->page_recycle_repl->page_repl_head); spin_lock_bh(&rx_pkt->sys->spinlock);
spin_unlock_bh(&rx_pkt->sys->spinlock); /* Add the element to head. */
} else { list_add(&rx_pkt->link,
dma_unmap_page(ipa3_ctx->pdev, rx_page.dma_addr, &rx_pkt->sys->page_recycle_repl->page_repl_head);
rx_pkt->len, DMA_FROM_DEVICE); spin_unlock_bh(&rx_pkt->sys->spinlock);
__free_pages(rx_pkt->page_data.page, sys->page_order); } else {
dma_unmap_page(ipa3_ctx->pdev, rx_page.dma_addr,
rx_pkt->len, DMA_FROM_DEVICE);
__free_pages(rx_pkt->page_data.page, sys->page_order);
}
rx_pkt->sys->free_rx_wrapper(rx_pkt);
} }
rx_pkt->sys->free_rx_wrapper(rx_pkt);
IPA_STATS_INC_CNT(ipa3_ctx->stats.rx_page_drop_cnt); IPA_STATS_INC_CNT(ipa3_ctx->stats.rx_page_drop_cnt);
return NULL; return NULL;
} }