Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/718670/?format=api
{ "id": 718670, "url": "http://patchwork.ozlabs.org/api/patches/718670/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170123165906.13402.80385.stgit@localhost.localdomain/", "project": { "id": 46, "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api", "name": "Intel Wired Ethernet development", "link_name": "intel-wired-lan", "list_id": "intel-wired-lan.osuosl.org", "list_email": "intel-wired-lan@osuosl.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170123165906.13402.80385.stgit@localhost.localdomain>", "list_archive_url": null, "date": "2017-01-23T16:59:15", "name": "[next,v3,6/9] igb: Add support for padding packet", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "2a578b1c7f5c291415d8d5920462db14390e0510", "submitter": { "id": 252, "url": "http://patchwork.ozlabs.org/api/people/252/?format=api", "name": "Alexander Duyck", "email": "alexander.duyck@gmail.com" }, "delegate": { "id": 68, "url": "http://patchwork.ozlabs.org/api/users/68/?format=api", "username": "jtkirshe", "first_name": "Jeff", "last_name": "Kirsher", "email": "jeffrey.t.kirsher@intel.com" }, "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170123165906.13402.80385.stgit@localhost.localdomain/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/718670/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/718670/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<intel-wired-lan-bounces@lists.osuosl.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Delivered-To": [ "patchwork-incoming@bilbo.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Received": [ "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3v6cwr21Kvz9s3T\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 24 Jan 2017 03:59:24 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 829CA87B36;\n\tMon, 23 Jan 2017 16:59:22 +0000 (UTC)", "from whitealder.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id MtusQeFrWSaB; Mon, 23 Jan 2017 16:59:19 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 9550A87AEF;\n\tMon, 23 Jan 2017 16:59:19 +0000 (UTC)", "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id B1ED41C07B7\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 23 Jan 2017 16:59:17 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id AB64987AEF\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 23 Jan 2017 16:59:17 +0000 (UTC)", "from whitealder.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id UlwLIwfaeTXT for <intel-wired-lan@lists.osuosl.org>;\n\tMon, 23 Jan 2017 16:59:16 +0000 (UTC)", "from mail-pg0-f66.google.com (mail-pg0-f66.google.com\n\t[74.125.83.66])\n\tby whitealder.osuosl.org (Postfix) with ESMTPS id C3C03878B6\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 23 Jan 2017 16:59:16 +0000 (UTC)", "by mail-pg0-f66.google.com with SMTP id 75so14157303pgf.3\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 23 Jan 2017 08:59:16 -0800 (PST)", "from localhost.localdomain ([2001:470:b:9c3:9e5c:8eff:fe4f:f2d0])\n\tby smtp.gmail.com with ESMTPSA id\n\t143sm38253235pfu.58.2017.01.23.08.59.15\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tMon, 23 Jan 2017 08:59:15 -0800 (PST)" ], "Authentication-Results": "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"Q0F7iyqZ\"; dkim-atps=neutral", "X-Virus-Scanned": [ "amavisd-new at osuosl.org", "amavisd-new at osuosl.org" ], "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=subject:from:to:date:message-id:in-reply-to:references:user-agent\n\t:mime-version:content-transfer-encoding;\n\tbh=uq0bFIE1mSK6pThCmAdA+0Ev+HL+3Z2/E2GMp3R4Rdg=;\n\tb=Q0F7iyqZiBu+7U+mhwKmv1h/etHKS0Yhi3ZFfjW3xlvKlYuW+YQzDY771fFflJAS0M\n\twLjAfKPhdFE7SO636NFdLmlsi+ioOdIF+gQo7a/5zSQSSHBwnnRMPHiQ6okSgNU+IjLG\n\ts5rH+RK5zJj/zPS4NpTMP3tIv9ix83ja4LF5oNvO+KLo+0LAi97mUEqRtL0wGHEyFOE0\n\tN2ySa5Ag9wf/T9Pm7j2C1TB6vab3wMFd5Wj67gA5QBRJAkCDWVnhYPjXcsE7UhtbYLVZ\n\t+pYCfyEenrAKjjW0XqtqYQPJZVZNklilRL6DrJHmtYufhSPO0+BiuZtySRh9FLtafmHw\n\trXeg==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:subject:from:to:date:message-id:in-reply-to\n\t:references:user-agent:mime-version:content-transfer-encoding;\n\tbh=uq0bFIE1mSK6pThCmAdA+0Ev+HL+3Z2/E2GMp3R4Rdg=;\n\tb=rR7NcSgBLWhqUxafdH6Lm4z6TdsvSH6gf6bmiokkp9xzZ6wCzLrysTbeCVft6D0Gpi\n\t8ktEYzAmIndaCweuWdggjuNTWYYnsGqAnlper7HBZZmBkEjoe92LK4U5uqMgx2Ty5u5+\n\tEOTcxdCYk2s6zsRcAeYtHF1Gy+x6aq5VnC8ikYPMyRth8aNOSXyC9LWH1SwpVX275k7d\n\taJDPc1uxAmxkfwxS1C1VueaUpRDSt8waSkRx07Zm/6NNHBqcxlcyIHs7yYSNZEx9CiHE\n\tJlQVinCTsEVRxQY4TB14kLOUBGA1UWKsSicqHPVfDCfSiEdwgJDWJV749E0kTCkSAnve\n\tadjg==", "X-Gm-Message-State": "AIkVDXLF2ZAiZxgkOl3laNSWxVb0DHmlXlySuJ5UzfUSnUCW58uHP6ju6PcErODSpHF9BA==", "X-Received": "by 10.84.231.143 with SMTP id g15mr45017002plk.1.1485190756180; \n\tMon, 23 Jan 2017 08:59:16 -0800 (PST)", "From": "Alexander Duyck <alexander.duyck@gmail.com>", "To": "intel-wired-lan@lists.osuosl.org, jeffrey.t.kirsher@intel.com", "Date": "Mon, 23 Jan 2017 08:59:15 -0800", "Message-ID": "<20170123165906.13402.80385.stgit@localhost.localdomain>", "In-Reply-To": "<20170123165647.13402.1254.stgit@localhost.localdomain>", "References": "<20170123165647.13402.1254.stgit@localhost.localdomain>", "User-Agent": "StGit/0.17.1-dirty", "MIME-Version": "1.0", "Subject": "[Intel-wired-lan] [next PATCH v3 6/9] igb: Add support for padding\n\tpacket", "X-BeenThere": "intel-wired-lan@lists.osuosl.org", "X-Mailman-Version": "2.1.18-1", "Precedence": "list", "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.lists.osuosl.org>", "List-Unsubscribe": "<http://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.osuosl.org?subject=unsubscribe>", "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>", "List-Post": "<mailto:intel-wired-lan@lists.osuosl.org>", "List-Help": "<mailto:intel-wired-lan-request@lists.osuosl.org?subject=help>", "List-Subscribe": "<http://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.osuosl.org?subject=subscribe>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "intel-wired-lan-bounces@lists.osuosl.org", "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@lists.osuosl.org>" }, "content": "From: Alexander Duyck <alexander.h.duyck@intel.com>\n\nWith the size of the frame limited we can now write to an offset within the\nbuffer instead of having to write at the very start of the buffer. The\nadvantage to this is that it allows us to leave padding room for things\nlike supporting XDP in the future.\n\nOne side effect of this patch is that we can end up using a larger buffer\nif jumbo frames is enabled. The impact shouldn't be too great, but it\ncould hurt small packet performance for UDP workloads if jumbo frames is\nenabled as the truesize of frames will be larger.\n\nSigned-off-by: Alexander Duyck <alexander.h.duyck@intel.com>\n---\n\nv3: Fixed \"unsigned char *\" / \"void *\" mismatch on pointer arithmetic\n\n drivers/net/ethernet/intel/igb/igb.h | 44 ++++++++++++-\n drivers/net/ethernet/intel/igb/igb_ethtool.c | 4 +\n drivers/net/ethernet/intel/igb/igb_main.c | 91 +++++++++++++++++++-------\n drivers/net/ethernet/intel/igb/igb_ptp.c | 3 -\n 4 files changed, 110 insertions(+), 32 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h\nindex a74928cc0e58..21f26f164445 100644\n--- a/drivers/net/ethernet/intel/igb/igb.h\n+++ b/drivers/net/ethernet/intel/igb/igb.h\n@@ -142,9 +142,9 @@ struct vf_data_storage {\n /* Supported Rx Buffer Sizes */\n #define IGB_RXBUFFER_256\t256\n #define IGB_RXBUFFER_2048\t2048\n+#define IGB_RXBUFFER_3072\t3072\n #define IGB_RX_HDR_LEN\t\tIGB_RXBUFFER_256\n #define IGB_TS_HDR_LEN\t\t16\n-#define IGB_RX_BUFSZ\t\tIGB_RXBUFFER_2048\n \n #define IGB_SKB_PAD\t\t(NET_SKB_PAD + NET_IP_ALIGN)\n #if (PAGE_SIZE < 8192)\n@@ -313,12 +313,51 @@ struct igb_q_vector {\n };\n \n enum e1000_ring_flags_t {\n+\tIGB_RING_FLAG_RX_3K_BUFFER,\n+\tIGB_RING_FLAG_RX_BUILD_SKB_ENABLED,\n \tIGB_RING_FLAG_RX_SCTP_CSUM,\n \tIGB_RING_FLAG_RX_LB_VLAN_BSWAP,\n \tIGB_RING_FLAG_TX_CTX_IDX,\n \tIGB_RING_FLAG_TX_DETECT_HANG\n };\n \n+#define ring_uses_build_skb(ring) \\\n+\ttest_bit(IGB_RING_FLAG_RX_BUILD_SKB_ENABLED, &(ring)->flags)\n+#define set_ring_build_skb_enabled(ring) \\\n+\tset_bit(IGB_RING_FLAG_RX_BUILD_SKB_ENABLED, &(ring)->flags)\n+#define clear_ring_build_skb_enabled(ring) \\\n+\tclear_bit(IGB_RING_FLAG_RX_BUILD_SKB_ENABLED, &(ring)->flags)\n+\n+#define ring_uses_large_buffer(ring) \\\n+\ttest_bit(IGB_RING_FLAG_RX_3K_BUFFER, &(ring)->flags)\n+#define set_ring_uses_large_buffer(ring) \\\n+\tset_bit(IGB_RING_FLAG_RX_3K_BUFFER, &(ring)->flags)\n+#define clear_ring_uses_large_buffer(ring) \\\n+\tclear_bit(IGB_RING_FLAG_RX_3K_BUFFER, &(ring)->flags)\n+\n+static inline unsigned int igb_rx_bufsz(struct igb_ring *ring)\n+{\n+#if (PAGE_SIZE < 8192)\n+\tif (ring_uses_large_buffer(ring))\n+\t\treturn IGB_RXBUFFER_3072;\n+\n+\tif (ring_uses_build_skb(ring))\n+\t\treturn IGB_MAX_FRAME_BUILD_SKB + IGB_TS_HDR_LEN;\n+#endif\n+\treturn IGB_RXBUFFER_2048;\n+}\n+\n+static inline unsigned int igb_rx_pg_order(struct igb_ring *ring)\n+{\n+#if (PAGE_SIZE < 8192)\n+\tif (ring_uses_large_buffer(ring))\n+\t\treturn 1;\n+#endif\n+\treturn 0;\n+}\n+\n+#define igb_rx_pg_size(_ring) (PAGE_SIZE << igb_rx_pg_order(_ring))\n+\n #define IGB_TXD_DCMD (E1000_ADVTXD_DCMD_EOP | E1000_ADVTXD_DCMD_RS)\n \n #define IGB_RX_DESC(R, i)\t\\\n@@ -557,6 +596,7 @@ struct igb_adapter {\n #define IGB_FLAG_HAS_MSIX\t\tBIT(13)\n #define IGB_FLAG_EEE\t\t\tBIT(14)\n #define IGB_FLAG_VLAN_PROMISC\t\tBIT(15)\n+#define IGB_FLAG_RX_LEGACY\t\tBIT(16)\n \n /* Media Auto Sense */\n #define IGB_MAS_ENABLE_0\t\t0X0001\n@@ -614,7 +654,7 @@ enum igb_boards {\n void igb_ptp_suspend(struct igb_adapter *adapter);\n void igb_ptp_rx_hang(struct igb_adapter *adapter);\n void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector, struct sk_buff *skb);\n-void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, unsigned char *va,\n+void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,\n \t\t\t struct sk_buff *skb);\n int igb_ptp_set_ts_config(struct net_device *netdev, struct ifreq *ifr);\n int igb_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr);\ndiff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c\nindex 612cf13b7a3a..d5966feb7b96 100644\n--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c\n+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c\n@@ -1818,7 +1818,7 @@ static int igb_clean_test_rings(struct igb_ring *rx_ring,\n \t\t/* sync Rx buffer for CPU read */\n \t\tdma_sync_single_for_cpu(rx_ring->dev,\n \t\t\t\t\trx_buffer_info->dma,\n-\t\t\t\t\tIGB_RX_BUFSZ,\n+\t\t\t\t\tsize,\n \t\t\t\t\tDMA_FROM_DEVICE);\n \n \t\t/* verify contents of skb */\n@@ -1828,7 +1828,7 @@ static int igb_clean_test_rings(struct igb_ring *rx_ring,\n \t\t/* sync Rx buffer for device write */\n \t\tdma_sync_single_for_device(rx_ring->dev,\n \t\t\t\t\t rx_buffer_info->dma,\n-\t\t\t\t\t IGB_RX_BUFSZ,\n+\t\t\t\t\t size,\n \t\t\t\t\t DMA_FROM_DEVICE);\n \n \t\t/* unmap buffer on Tx side */\ndiff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c\nindex d881c51ef162..126ca0e0bcc1 100644\n--- a/drivers/net/ethernet/intel/igb/igb_main.c\n+++ b/drivers/net/ethernet/intel/igb/igb_main.c\n@@ -554,7 +554,7 @@ static void igb_dump(struct igb_adapter *adapter)\n \t\t\t\t\t 16, 1,\n \t\t\t\t\t page_address(buffer_info->page) +\n \t\t\t\t\t\t buffer_info->page_offset,\n-\t\t\t\t\t IGB_RX_BUFSZ, true);\n+\t\t\t\t\t igb_rx_bufsz(rx_ring), true);\n \t\t\t\t}\n \t\t\t}\n \t\t}\n@@ -3746,7 +3746,10 @@ void igb_configure_rx_ring(struct igb_adapter *adapter,\n \n \t/* set descriptor configuration */\n \tsrrctl = IGB_RX_HDR_LEN << E1000_SRRCTL_BSIZEHDRSIZE_SHIFT;\n-\tsrrctl |= IGB_RX_BUFSZ >> E1000_SRRCTL_BSIZEPKT_SHIFT;\n+\tif (ring_uses_large_buffer(ring))\n+\t\tsrrctl |= IGB_RXBUFFER_3072 >> E1000_SRRCTL_BSIZEPKT_SHIFT;\n+\telse\n+\t\tsrrctl |= IGB_RXBUFFER_2048 >> E1000_SRRCTL_BSIZEPKT_SHIFT;\n \tsrrctl |= E1000_SRRCTL_DESCTYPE_ADV_ONEBUF;\n \tif (hw->mac.type >= e1000_82580)\n \t\tsrrctl |= E1000_SRRCTL_TIMESTAMP;\n@@ -3776,6 +3779,26 @@ void igb_configure_rx_ring(struct igb_adapter *adapter,\n \twr32(E1000_RXDCTL(reg_idx), rxdctl);\n }\n \n+static void igb_set_rx_buffer_len(struct igb_adapter *adapter,\n+\t\t\t\t struct igb_ring *rx_ring)\n+{\n+\t/* set build_skb and buffer size flags */\n+\tclear_ring_build_skb_enabled(rx_ring);\n+\tclear_ring_uses_large_buffer(rx_ring);\n+\n+\tif (adapter->flags & IGB_FLAG_RX_LEGACY)\n+\t\treturn;\n+\n+\tset_ring_build_skb_enabled(rx_ring);\n+\n+#if (PAGE_SIZE < 8192)\n+\tif (adapter->max_frame_size <= IGB_MAX_FRAME_BUILD_SKB)\n+\t\treturn;\n+\n+\tset_ring_uses_large_buffer(rx_ring);\n+#endif\n+}\n+\n /**\n * igb_configure_rx - Configure receive Unit after Reset\n * @adapter: board private structure\n@@ -3793,8 +3816,12 @@ static void igb_configure_rx(struct igb_adapter *adapter)\n \t/* Setup the HW Rx Head and Tail Descriptor Pointers and\n \t * the Base and Length of the Rx Descriptor Ring\n \t */\n-\tfor (i = 0; i < adapter->num_rx_queues; i++)\n-\t\tigb_configure_rx_ring(adapter, adapter->rx_ring[i]);\n+\tfor (i = 0; i < adapter->num_rx_queues; i++) {\n+\t\tstruct igb_ring *rx_ring = adapter->rx_ring[i];\n+\n+\t\tigb_set_rx_buffer_len(adapter, rx_ring);\n+\t\tigb_configure_rx_ring(adapter, rx_ring);\n+\t}\n }\n \n /**\n@@ -3969,13 +3996,13 @@ static void igb_clean_rx_ring(struct igb_ring *rx_ring)\n \t\tdma_sync_single_range_for_cpu(rx_ring->dev,\n \t\t\t\t\t buffer_info->dma,\n \t\t\t\t\t buffer_info->page_offset,\n-\t\t\t\t\t IGB_RX_BUFSZ,\n+\t\t\t\t\t igb_rx_bufsz(rx_ring),\n \t\t\t\t\t DMA_FROM_DEVICE);\n \n \t\t/* free resources associated with mapping */\n \t\tdma_unmap_page_attrs(rx_ring->dev,\n \t\t\t\t buffer_info->dma,\n-\t\t\t\t PAGE_SIZE,\n+\t\t\t\t igb_rx_pg_size(rx_ring),\n \t\t\t\t DMA_FROM_DEVICE,\n \t\t\t\t IGB_RX_DMA_ATTR);\n \t\t__page_frag_cache_drain(buffer_info->page,\n@@ -6867,7 +6894,7 @@ static inline bool igb_page_is_reserved(struct page *page)\n \n static bool igb_can_reuse_rx_page(struct igb_rx_buffer *rx_buffer,\n \t\t\t\t struct page *page,\n-\t\t\t\t unsigned int truesize)\n+\t\t\t\t const unsigned int truesize)\n {\n \tunsigned int pagecnt_bias = rx_buffer->pagecnt_bias--;\n \n@@ -6881,12 +6908,14 @@ static bool igb_can_reuse_rx_page(struct igb_rx_buffer *rx_buffer,\n \t\treturn false;\n \n \t/* flip page offset to other buffer */\n-\trx_buffer->page_offset ^= IGB_RX_BUFSZ;\n+\trx_buffer->page_offset ^= truesize;\n #else\n \t/* move offset up to the next cache line */\n \trx_buffer->page_offset += truesize;\n+#define IGB_LAST_OFFSET \\\n+\t(SKB_WITH_OVERHEAD(PAGE_SIZE) - IGB_RXBUFFER_2048)\n \n-\tif (rx_buffer->page_offset > (PAGE_SIZE - IGB_RX_BUFSZ))\n+\tif (rx_buffer->page_offset > IGB_LAST_OFFSET)\n \t\treturn false;\n #endif\n \n@@ -6924,13 +6953,15 @@ static bool igb_add_rx_frag(struct igb_ring *rx_ring,\n \t\t\t struct sk_buff *skb)\n {\n \tstruct page *page = rx_buffer->page;\n-\tunsigned char *va = page_address(page) + rx_buffer->page_offset;\n+\tvoid *va = page_address(page) + rx_buffer->page_offset;\n+\tunsigned int pull_len;\n #if (PAGE_SIZE < 8192)\n-\tunsigned int truesize = IGB_RX_BUFSZ;\n+\tunsigned int truesize = igb_rx_pg_size(rx_ring) / 2;\n #else\n-\tunsigned int truesize = SKB_DATA_ALIGN(size);\n+\tunsigned int truesize = ring_uses_build_skb(rx_ring) ?\n+\t\t\t\tSKB_DATA_ALIGN(IGB_SKB_PAD + size) :\n+\t\t\t\tSKB_DATA_ALIGN(size);\n #endif\n-\tunsigned int pull_len;\n \n \tif (unlikely(skb_is_nonlinear(skb)))\n \t\tgoto add_tail_frag;\n@@ -6966,7 +6997,7 @@ static bool igb_add_rx_frag(struct igb_ring *rx_ring,\n \n add_tail_frag:\n \tskb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page,\n-\t\t\t(unsigned long)va & ~PAGE_MASK, size, truesize);\n+\t\t\tva - page_address(page), size, truesize);\n \n \treturn igb_can_reuse_rx_page(rx_buffer, page, truesize);\n }\n@@ -6991,13 +7022,12 @@ static struct sk_buff *igb_fetch_rx_buffer(struct igb_ring *rx_ring,\n \t\t\t\t DMA_FROM_DEVICE);\n \n \tif (likely(!skb)) {\n-\t\tvoid *page_addr = page_address(page) +\n-\t\t\t\t rx_buffer->page_offset;\n+\t\tvoid *va = page_address(page) + rx_buffer->page_offset;\n \n \t\t/* prefetch first cache line of first page */\n-\t\tprefetch(page_addr);\n+\t\tprefetch(va);\n #if L1_CACHE_BYTES < 128\n-\t\tprefetch(page_addr + L1_CACHE_BYTES);\n+\t\tprefetch(va + L1_CACHE_BYTES);\n #endif\n \n \t\t/* allocate a skb to store the frags */\n@@ -7023,7 +7053,7 @@ static struct sk_buff *igb_fetch_rx_buffer(struct igb_ring *rx_ring,\n \t\t * any references we are holding to it\n \t\t */\n \t\tdma_unmap_page_attrs(rx_ring->dev, rx_buffer->dma,\n-\t\t\t\t PAGE_SIZE, DMA_FROM_DEVICE,\n+\t\t\t\t igb_rx_pg_size(rx_ring), DMA_FROM_DEVICE,\n \t\t\t\t IGB_RX_DMA_ATTR);\n \t\t__page_frag_cache_drain(page, rx_buffer->pagecnt_bias);\n \t}\n@@ -7265,6 +7295,11 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)\n \treturn total_packets;\n }\n \n+static inline unsigned int igb_rx_offset(struct igb_ring *rx_ring)\n+{\n+\treturn ring_uses_build_skb(rx_ring) ? IGB_SKB_PAD : 0;\n+}\n+\n static bool igb_alloc_mapped_page(struct igb_ring *rx_ring,\n \t\t\t\t struct igb_rx_buffer *bi)\n {\n@@ -7276,21 +7311,23 @@ static bool igb_alloc_mapped_page(struct igb_ring *rx_ring,\n \t\treturn true;\n \n \t/* alloc new page for storage */\n-\tpage = dev_alloc_page();\n+\tpage = dev_alloc_pages(igb_rx_pg_order(rx_ring));\n \tif (unlikely(!page)) {\n \t\trx_ring->rx_stats.alloc_failed++;\n \t\treturn false;\n \t}\n \n \t/* map page for use */\n-\tdma = dma_map_page_attrs(rx_ring->dev, page, 0, PAGE_SIZE,\n-\t\t\t\t DMA_FROM_DEVICE, IGB_RX_DMA_ATTR);\n+\tdma = dma_map_page_attrs(rx_ring->dev, page, 0,\n+\t\t\t\t igb_rx_pg_size(rx_ring),\n+\t\t\t\t DMA_FROM_DEVICE,\n+\t\t\t\t IGB_RX_DMA_ATTR);\n \n \t/* if mapping failed free memory back to system since\n \t * there isn't much point in holding memory we can't use\n \t */\n \tif (dma_mapping_error(rx_ring->dev, dma)) {\n-\t\t__free_page(page);\n+\t\t__free_pages(page, igb_rx_pg_order(rx_ring));\n \n \t\trx_ring->rx_stats.alloc_failed++;\n \t\treturn false;\n@@ -7298,7 +7335,7 @@ static bool igb_alloc_mapped_page(struct igb_ring *rx_ring,\n \n \tbi->dma = dma;\n \tbi->page = page;\n-\tbi->page_offset = 0;\n+\tbi->page_offset = igb_rx_offset(rx_ring);\n \tbi->pagecnt_bias = 1;\n \n \treturn true;\n@@ -7313,6 +7350,7 @@ void igb_alloc_rx_buffers(struct igb_ring *rx_ring, u16 cleaned_count)\n \tunion e1000_adv_rx_desc *rx_desc;\n \tstruct igb_rx_buffer *bi;\n \tu16 i = rx_ring->next_to_use;\n+\tu16 bufsz;\n \n \t/* nothing to do */\n \tif (!cleaned_count)\n@@ -7322,14 +7360,15 @@ void igb_alloc_rx_buffers(struct igb_ring *rx_ring, u16 cleaned_count)\n \tbi = &rx_ring->rx_buffer_info[i];\n \ti -= rx_ring->count;\n \n+\tbufsz = igb_rx_bufsz(rx_ring);\n+\n \tdo {\n \t\tif (!igb_alloc_mapped_page(rx_ring, bi))\n \t\t\tbreak;\n \n \t\t/* sync the buffer for use by the device */\n \t\tdma_sync_single_range_for_device(rx_ring->dev, bi->dma,\n-\t\t\t\t\t\t bi->page_offset,\n-\t\t\t\t\t\t IGB_RX_BUFSZ,\n+\t\t\t\t\t\t bi->page_offset, bufsz,\n \t\t\t\t\t\t DMA_FROM_DEVICE);\n \n \t\t/* Refresh the desc even if buffer_addrs didn't change\ndiff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c\nindex c4477552ce9e..7a3fd4d74592 100644\n--- a/drivers/net/ethernet/intel/igb/igb_ptp.c\n+++ b/drivers/net/ethernet/intel/igb/igb_ptp.c\n@@ -764,8 +764,7 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter)\n * incoming frame. The value is stored in little endian format starting on\n * byte 8.\n **/\n-void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector,\n-\t\t\t unsigned char *va,\n+void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,\n \t\t\t struct sk_buff *skb)\n {\n \t__le64 *regval = (__le64 *)va;\n", "prefixes": [ "next", "v3", "6/9" ] }