Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/711993/?format=api
{ "id": 711993, "url": "http://patchwork.ozlabs.org/api/patches/711993/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170106161113.2030.2257.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": "<20170106161113.2030.2257.stgit@localhost.localdomain>", "list_archive_url": null, "date": "2017-01-06T16:11:13", "name": "[next,6/9] igb: Add support for padding packet", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "7e89da478f6a68d47551039b10de41528426261d", "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/20170106161113.2030.2257.stgit@localhost.localdomain/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/711993/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/711993/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 3tw8gC2j95z9sXx\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 7 Jan 2017 03:11:19 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id CE725820CE;\n\tFri, 6 Jan 2017 16:11: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 O7xVKZsfWMTV; Fri, 6 Jan 2017 16:11:16 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 5A0E68303D;\n\tFri, 6 Jan 2017 16:11:16 +0000 (UTC)", "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id 720CE1BFA57\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri, 6 Jan 2017 16:11:15 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 6A4D3820CE\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri, 6 Jan 2017 16:11:15 +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 bbvf1Q9afF5Y for <intel-wired-lan@lists.osuosl.org>;\n\tFri, 6 Jan 2017 16:11:14 +0000 (UTC)", "from mail-pf0-f193.google.com (mail-pf0-f193.google.com\n\t[209.85.192.193])\n\tby whitealder.osuosl.org (Postfix) with ESMTPS id 9720387070\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri, 6 Jan 2017 16:11:14 +0000 (UTC)", "by mail-pf0-f193.google.com with SMTP id y68so30160699pfb.1\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri, 06 Jan 2017 08:11:14 -0800 (PST)", "from localhost.localdomain ([2001:470:b:9c3:9e5c:8eff:fe4f:f2d0])\n\tby smtp.gmail.com with ESMTPSA id\n\tw65sm3788608pfw.9.2017.01.06.08.11.13\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tFri, 06 Jan 2017 08:11:13 -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=\"eAwtygP1\"; 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=+A/WyaJYuUrfB1IETW55BRJnKq1GC5mV9K9+du1NdcE=;\n\tb=eAwtygP1SKgffVCZQGQV7K+BFfk+bNCbMckyliQhc5hhp+6Ta49NQQ1ODV+Y3CknLL\n\tEpyEFLVipBaR5S9dIo4rXOASuyj5w3FECsU8woz3yzfzFsZsV8aETKkKi//GZ+0vW780\n\tbV6WCrxkuvcjtMKxI0L/Z2JZVoEGSL6fTq0Yrv7b3uGikq5OEzuryNqXWox0nNr1vXEm\n\thuz1C3u0+j3G/YaxRvjRNhYCsA+3LbmGaFqIg67nXdA6s+81tClCqbO4ke5mYNQ2euUf\n\tNPsZ1P6y2ai5MNqUlopnzAaqoMk7L1TgfxJ5UdUyjTIXCTfy9Nt5KFQFvTJloCAM3Vuy\n\tcxiw==", "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=+A/WyaJYuUrfB1IETW55BRJnKq1GC5mV9K9+du1NdcE=;\n\tb=BgEz7rCXeUGrdbrdTF7TpDoCKGR+8q89fpCtyGa46C8VNMV5FvG7YLuHMj6LclF5nc\n\t3G7P17F6PeNs8oWuGKGYocCzC308Dl/5+OvX7E/orWp+X/Eb5L1WIfZ8PNpJ6EarwwyT\n\tJmwO3X7hRH7Qd3tYIDebfhEV4yaeIgSMVqfY/Rp19MB/6oTubUaFHU1qga7SZecgCM7n\n\t0z7qaGS/KzsSaeRpLugjRSWalw7jKbnBI3RpKeyQbUXauUKsIASJDJX4IkYHcYlt8Xk2\n\t8zHkackhMzpUzQwb5RYYk/Ma8zkpBAPUEXdL+fJ8UC9HxjvtnSMohPNqwRFRZqct1XyS\n\tAuQQ==", "X-Gm-Message-State": "AIkVDXLYHzSVul6OFuzSKklrX++hj42Lo/1G0Xkc4yz0p3MOhmUNYtqW2Az+eCRIhDGoJQ==", "X-Received": "by 10.84.197.129 with SMTP id n1mr169473002pld.30.1483719074226; \n\tFri, 06 Jan 2017 08:11:14 -0800 (PST)", "From": "Alexander Duyck <alexander.duyck@gmail.com>", "To": "intel-wired-lan@lists.osuosl.org, jeffrey.t.kirsher@intel.com", "Date": "Fri, 06 Jan 2017 08:11:13 -0800", "Message-ID": "<20170106161113.2030.2257.stgit@localhost.localdomain>", "In-Reply-To": "<20170106160850.2030.39073.stgit@localhost.localdomain>", "References": "<20170106160850.2030.39073.stgit@localhost.localdomain>", "User-Agent": "StGit/0.17.1-dirty", "MIME-Version": "1.0", "Subject": "[Intel-wired-lan] [next PATCH 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 drivers/net/ethernet/intel/igb/igb.h | 42 ++++++++++++\n drivers/net/ethernet/intel/igb/igb_ethtool.c | 4 +\n drivers/net/ethernet/intel/igb/igb_main.c | 89 +++++++++++++++++++-------\n 3 files changed, 107 insertions(+), 28 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h\nindex a74928cc0e58..3acbaa942618 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\ndiff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c\nindex 6f037d7d96b8..3a845cc613a8 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 d38170af8df8..246675a372bf 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@@ -6866,7 +6893,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@@ -6880,12 +6907,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,12 +6953,14 @@ static bool igb_add_rx_frag(struct igb_ring *rx_ring,\n {\n \tstruct page *page = rx_buffer->page;\n \tunsigned char *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@@ -6965,7 +6996,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@@ -6990,13 +7021,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@@ -7022,7 +7052,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@@ -7264,6 +7294,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@@ -7275,21 +7310,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@@ -7297,7 +7334,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@@ -7312,6 +7349,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@@ -7321,14 +7359,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\n", "prefixes": [ "next", "6/9" ] }