Skip to content

Commit c519fe9

Browse files
Shannon Nelsondavem330
authored andcommitted
bnxt: add dma mapping attributes
On the SPARC platform we need to use the DMA_ATTR_WEAK_ORDERING attribute in our Rx path dma mapping in order to get the expected performance out of the receive path. Adding it to the Tx path has little effect, so that's not a part of this patch. Signed-off-by: Shannon Nelson <[email protected]> Reviewed-by: Tushar Dave <[email protected]> Reviewed-by: Tom Saeger <[email protected]> Acked-by: Michael Chan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 9efa27b commit c519fe9

File tree

1 file changed

+34
-22
lines changed
  • drivers/net/ethernet/broadcom/bnxt

1 file changed

+34
-22
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,8 @@ static struct page *__bnxt_alloc_rx_page(struct bnxt *bp, dma_addr_t *mapping,
582582
if (!page)
583583
return NULL;
584584

585-
*mapping = dma_map_page(dev, page, 0, PAGE_SIZE, bp->rx_dir);
585+
*mapping = dma_map_page_attrs(dev, page, 0, PAGE_SIZE, bp->rx_dir,
586+
DMA_ATTR_WEAK_ORDERING);
586587
if (dma_mapping_error(dev, *mapping)) {
587588
__free_page(page);
588589
return NULL;
@@ -601,8 +602,9 @@ static inline u8 *__bnxt_alloc_rx_data(struct bnxt *bp, dma_addr_t *mapping,
601602
if (!data)
602603
return NULL;
603604

604-
*mapping = dma_map_single(&pdev->dev, data + bp->rx_dma_offset,
605-
bp->rx_buf_use_size, bp->rx_dir);
605+
*mapping = dma_map_single_attrs(&pdev->dev, data + bp->rx_dma_offset,
606+
bp->rx_buf_use_size, bp->rx_dir,
607+
DMA_ATTR_WEAK_ORDERING);
606608

607609
if (dma_mapping_error(&pdev->dev, *mapping)) {
608610
kfree(data);
@@ -705,8 +707,9 @@ static inline int bnxt_alloc_rx_page(struct bnxt *bp,
705707
return -ENOMEM;
706708
}
707709

708-
mapping = dma_map_page(&pdev->dev, page, offset, BNXT_RX_PAGE_SIZE,
709-
PCI_DMA_FROMDEVICE);
710+
mapping = dma_map_page_attrs(&pdev->dev, page, offset,
711+
BNXT_RX_PAGE_SIZE, PCI_DMA_FROMDEVICE,
712+
DMA_ATTR_WEAK_ORDERING);
710713
if (dma_mapping_error(&pdev->dev, mapping)) {
711714
__free_page(page);
712715
return -EIO;
@@ -799,7 +802,8 @@ static struct sk_buff *bnxt_rx_page_skb(struct bnxt *bp,
799802
return NULL;
800803
}
801804
dma_addr -= bp->rx_dma_offset;
802-
dma_unmap_page(&bp->pdev->dev, dma_addr, PAGE_SIZE, bp->rx_dir);
805+
dma_unmap_page_attrs(&bp->pdev->dev, dma_addr, PAGE_SIZE, bp->rx_dir,
806+
DMA_ATTR_WEAK_ORDERING);
803807

804808
if (unlikely(!payload))
805809
payload = eth_get_headlen(data_ptr, len);
@@ -841,8 +845,8 @@ static struct sk_buff *bnxt_rx_skb(struct bnxt *bp,
841845
}
842846

843847
skb = build_skb(data, 0);
844-
dma_unmap_single(&bp->pdev->dev, dma_addr, bp->rx_buf_use_size,
845-
bp->rx_dir);
848+
dma_unmap_single_attrs(&bp->pdev->dev, dma_addr, bp->rx_buf_use_size,
849+
bp->rx_dir, DMA_ATTR_WEAK_ORDERING);
846850
if (!skb) {
847851
kfree(data);
848852
return NULL;
@@ -909,8 +913,9 @@ static struct sk_buff *bnxt_rx_pages(struct bnxt *bp, struct bnxt_napi *bnapi,
909913
return NULL;
910914
}
911915

912-
dma_unmap_page(&pdev->dev, mapping, BNXT_RX_PAGE_SIZE,
913-
PCI_DMA_FROMDEVICE);
916+
dma_unmap_page_attrs(&pdev->dev, mapping, BNXT_RX_PAGE_SIZE,
917+
PCI_DMA_FROMDEVICE,
918+
DMA_ATTR_WEAK_ORDERING);
914919

915920
skb->data_len += frag_len;
916921
skb->len += frag_len;
@@ -1329,8 +1334,9 @@ static inline struct sk_buff *bnxt_tpa_end(struct bnxt *bp,
13291334
tpa_info->mapping = new_mapping;
13301335

13311336
skb = build_skb(data, 0);
1332-
dma_unmap_single(&bp->pdev->dev, mapping, bp->rx_buf_use_size,
1333-
bp->rx_dir);
1337+
dma_unmap_single_attrs(&bp->pdev->dev, mapping,
1338+
bp->rx_buf_use_size, bp->rx_dir,
1339+
DMA_ATTR_WEAK_ORDERING);
13341340

13351341
if (!skb) {
13361342
kfree(data);
@@ -1971,9 +1977,11 @@ static void bnxt_free_rx_skbs(struct bnxt *bp)
19711977
if (!data)
19721978
continue;
19731979

1974-
dma_unmap_single(&pdev->dev, tpa_info->mapping,
1975-
bp->rx_buf_use_size,
1976-
bp->rx_dir);
1980+
dma_unmap_single_attrs(&pdev->dev,
1981+
tpa_info->mapping,
1982+
bp->rx_buf_use_size,
1983+
bp->rx_dir,
1984+
DMA_ATTR_WEAK_ORDERING);
19771985

19781986
tpa_info->data = NULL;
19791987

@@ -1993,13 +2001,15 @@ static void bnxt_free_rx_skbs(struct bnxt *bp)
19932001

19942002
if (BNXT_RX_PAGE_MODE(bp)) {
19952003
mapping -= bp->rx_dma_offset;
1996-
dma_unmap_page(&pdev->dev, mapping,
1997-
PAGE_SIZE, bp->rx_dir);
2004+
dma_unmap_page_attrs(&pdev->dev, mapping,
2005+
PAGE_SIZE, bp->rx_dir,
2006+
DMA_ATTR_WEAK_ORDERING);
19982007
__free_page(data);
19992008
} else {
2000-
dma_unmap_single(&pdev->dev, mapping,
2001-
bp->rx_buf_use_size,
2002-
bp->rx_dir);
2009+
dma_unmap_single_attrs(&pdev->dev, mapping,
2010+
bp->rx_buf_use_size,
2011+
bp->rx_dir,
2012+
DMA_ATTR_WEAK_ORDERING);
20032013
kfree(data);
20042014
}
20052015
}
@@ -2012,8 +2022,10 @@ static void bnxt_free_rx_skbs(struct bnxt *bp)
20122022
if (!page)
20132023
continue;
20142024

2015-
dma_unmap_page(&pdev->dev, rx_agg_buf->mapping,
2016-
BNXT_RX_PAGE_SIZE, PCI_DMA_FROMDEVICE);
2025+
dma_unmap_page_attrs(&pdev->dev, rx_agg_buf->mapping,
2026+
BNXT_RX_PAGE_SIZE,
2027+
PCI_DMA_FROMDEVICE,
2028+
DMA_ATTR_WEAK_ORDERING);
20172029

20182030
rx_agg_buf->page = NULL;
20192031
__clear_bit(j, rxr->rx_agg_bmap);

0 commit comments

Comments
 (0)