Skip to content

Commit

Permalink
r8169: align the IP header when there is no DMA constraint
Browse files Browse the repository at this point in the history
Align the IP header when the chipset can DMA at any location (plain 0x8169).
Otherwise (0x8136/0x8168) obey the constraint imposed by the hardware.

This patch complements the previous alignment rework done for copybreak.

Original idea from Philip Craig <philipc@snapgear.com>

Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Cc: Philip Craig <philipc@snapgear.com>
Cc: Mike Isely <isely@pobox.com>
Cc: Edward Hsu <edward_hsu@realtek.com.tw>
  • Loading branch information
Francois Romieu authored and Jeff Garzik committed Jul 9, 2007
1 parent 275391a commit e9f63f3
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions drivers/net/r8169.c
Original file line number Diff line number Diff line change
Expand Up @@ -1415,7 +1415,7 @@ static const struct rtl_cfg_info {
[RTL_CFG_0] = {
.hw_start = rtl_hw_start_8169,
.region = 1,
.align = 2,
.align = 0,
.intr_event = SYSErr | LinkChg | RxOverflow |
RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
.napi_event = RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow
Expand Down Expand Up @@ -2076,12 +2076,15 @@ static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev,
{
struct sk_buff *skb;
dma_addr_t mapping;
unsigned int pad;

skb = netdev_alloc_skb(dev, rx_buf_sz + align);
pad = align ? align : NET_IP_ALIGN;

skb = netdev_alloc_skb(dev, rx_buf_sz + pad);
if (!skb)
goto err_out;

skb_reserve(skb, (align - 1) & (unsigned long)skb->data);
skb_reserve(skb, align ? ((pad - 1) & (unsigned long)skb->data) : pad);

mapping = pci_map_single(pdev, skb->data, rx_buf_sz,
PCI_DMA_FROMDEVICE);
Expand Down

0 comments on commit e9f63f3

Please sign in to comment.