浏览代码

cxgb3: fix premature page unmap

unmap Rx page only when guaranteed that this page won't be
used anymore to allocate rx page chunks.

Signed-off-by: Divy Le Ray <divy@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Divy Le Ray 15 年之前
父节点
当前提交
70e3bb504c
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      drivers/net/cxgb3/sge.c

+ 2 - 2
drivers/net/cxgb3/sge.c

@@ -879,7 +879,7 @@ recycle:
 	pci_dma_sync_single_for_cpu(adap->pdev, dma_addr, len,
 	pci_dma_sync_single_for_cpu(adap->pdev, dma_addr, len,
 				    PCI_DMA_FROMDEVICE);
 				    PCI_DMA_FROMDEVICE);
 	(*sd->pg_chunk.p_cnt)--;
 	(*sd->pg_chunk.p_cnt)--;
-	if (!*sd->pg_chunk.p_cnt)
+	if (!*sd->pg_chunk.p_cnt && sd->pg_chunk.page != fl->pg_chunk.page)
 		pci_unmap_page(adap->pdev,
 		pci_unmap_page(adap->pdev,
 			       sd->pg_chunk.mapping,
 			       sd->pg_chunk.mapping,
 			       fl->alloc_size,
 			       fl->alloc_size,
@@ -2088,7 +2088,7 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs,
 				    PCI_DMA_FROMDEVICE);
 				    PCI_DMA_FROMDEVICE);
 
 
 	(*sd->pg_chunk.p_cnt)--;
 	(*sd->pg_chunk.p_cnt)--;
-	if (!*sd->pg_chunk.p_cnt)
+	if (!*sd->pg_chunk.p_cnt && sd->pg_chunk.page != fl->pg_chunk.page)
 		pci_unmap_page(adap->pdev,
 		pci_unmap_page(adap->pdev,
 			       sd->pg_chunk.mapping,
 			       sd->pg_chunk.mapping,
 			       fl->alloc_size,
 			       fl->alloc_size,