Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp3922284imm; Mon, 8 Oct 2018 11:44:17 -0700 (PDT) X-Google-Smtp-Source: ACcGV63p7uW7t9pN6Cv1GKyr0XuCD8Lq3Xbc1PXZBpbuSHdaUIsloN6w0FsoSGfz+5Is8MTEjNxr X-Received: by 2002:a62:1551:: with SMTP id 78-v6mr26262759pfv.178.1539024257916; Mon, 08 Oct 2018 11:44:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539024257; cv=none; d=google.com; s=arc-20160816; b=DYG6r//ZgFNoz728cU2yEaK0+sLaPLZNW+ZVNDzf6qJowfw5tEDRJOfdN5AOT/UOrY u0ikunW157GIIllCf6tIi3B/8lPJgrKEWBq0wxPZa6ryYLn1BtXG91P/dWP2jhiTT5QD lRCd8fSylAT8O65WUvI/PZdQgx0bGA7OqEFI/FIH0GXPXiy0ce6HnGZy96jBRBFhPz3I j/p6wt6LBRQmRL3VEm9X3JWaGV9wZziJ9f+bU4/Xcif7k8s8pVI2omdRo6+wC6Fg7QYT RHWe7RuJXfq/YApPTnzfQTVk/HvCaM3Q1Rfd2UE/Kq3dXm9wGWOklVzbmvJvtFEmimWN 6mOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=DPmR4ISfPeT+2HaQKivt5S0SSmw3Vjv9OFtoeaNzBiM=; b=q4LZOj5PxNJC37kPhCdLdxIE9iBIirQV229ic6irMGSniT6CNG5gwUk8TL7WQ/egcD i0oEDBeaiR2qFkZhpzlGiLaT6rQBC9vmAoj/XQk1uFRUs0NvsRZUiHySpJnegVfRl7kg egEvtygaZLvO4QDcm2mqUQC1IlWw7Cb0p6UBdfSZa8H6nQhkE09fzZ3l1hOsCjhVK7Zf Tf9AGuKzpf08FKKOh8sHl6wZZVgSOwCPPF2ql3vKqNDSyOrQDYhQ8igXcSagIGsi7LQj LTOTXhYFR4hwRtYrK1S5PRDad/TAi9SdcoPyiG6MiX1EXghieNBYecs3CVD0KiykJgom ua8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="tB+O/ifm"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e73-v6si18870028pfb.98.2018.10.08.11.44.02; Mon, 08 Oct 2018 11:44:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="tB+O/ifm"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730566AbeJIB4u (ORCPT + 99 others); Mon, 8 Oct 2018 21:56:50 -0400 Received: from mail.kernel.org ([198.145.29.99]:44632 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729885AbeJIB4u (ORCPT ); Mon, 8 Oct 2018 21:56:50 -0400 Received: from localhost (ip-213-127-77-176.ip.prioritytelecom.net [213.127.77.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 318EB2064A; Mon, 8 Oct 2018 18:43:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1539024224; bh=OkVQCibIN/0mnf8j7EFGHBPX9fEnXRpms5AplHfW4g0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tB+O/ifmc9qtkhyd2Z+ldemIW3+KTJ6+OdM1hqdkFPhObY63O+ajde2397VPUJg/8 ZW4UCijrJHDfFpnP8JFI5zWO2RWpczrb8VnvOctNYwGHiniCGmWUwWsC6puRHv799+ 13urs3yf7SNWEc9f3fn5njmXYF56o9/bNtKGEkNw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Netanel Belgazal , "David S. Miller" , Sasha Levin Subject: [PATCH 4.14 63/94] net: ena: fix driver when PAGE_SIZE == 64kB Date: Mon, 8 Oct 2018 20:31:44 +0200 Message-Id: <20181008175609.427044733@linuxfoundation.org> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181008175605.067676667@linuxfoundation.org> References: <20181008175605.067676667@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Netanel Belgazal [ Upstream commit ef5b0771d247379c90c8bf1332ff32f7f74bff7f ] The buffer length field in the ena rx descriptor is 16 bit, and the current driver passes a full page in each ena rx descriptor. When PAGE_SIZE equals 64kB or more, the buffer length field becomes zero. To solve this issue, limit the ena Rx descriptor to use 16kB even when allocating 64kB kernel pages. This change would not impact ena device functionality, as 16kB is still larger than maximum MTU. Signed-off-by: Netanel Belgazal Signed-off-by: David S. Miller Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/amazon/ena/ena_netdev.c | 10 +++++----- drivers/net/ethernet/amazon/ena/ena_netdev.h | 11 +++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c @@ -456,7 +456,7 @@ static inline int ena_alloc_rx_page(stru return -ENOMEM; } - dma = dma_map_page(rx_ring->dev, page, 0, PAGE_SIZE, + dma = dma_map_page(rx_ring->dev, page, 0, ENA_PAGE_SIZE, DMA_FROM_DEVICE); if (unlikely(dma_mapping_error(rx_ring->dev, dma))) { u64_stats_update_begin(&rx_ring->syncp); @@ -473,7 +473,7 @@ static inline int ena_alloc_rx_page(stru rx_info->page_offset = 0; ena_buf = &rx_info->ena_buf; ena_buf->paddr = dma; - ena_buf->len = PAGE_SIZE; + ena_buf->len = ENA_PAGE_SIZE; return 0; } @@ -490,7 +490,7 @@ static void ena_free_rx_page(struct ena_ return; } - dma_unmap_page(rx_ring->dev, ena_buf->paddr, PAGE_SIZE, + dma_unmap_page(rx_ring->dev, ena_buf->paddr, ENA_PAGE_SIZE, DMA_FROM_DEVICE); __free_page(page); @@ -910,10 +910,10 @@ static struct sk_buff *ena_rx_skb(struct do { dma_unmap_page(rx_ring->dev, dma_unmap_addr(&rx_info->ena_buf, paddr), - PAGE_SIZE, DMA_FROM_DEVICE); + ENA_PAGE_SIZE, DMA_FROM_DEVICE); skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, rx_info->page, - rx_info->page_offset, len, PAGE_SIZE); + rx_info->page_offset, len, ENA_PAGE_SIZE); netif_dbg(rx_ring->adapter, rx_status, rx_ring->netdev, "rx skb updated. len %d. data_len %d\n", --- a/drivers/net/ethernet/amazon/ena/ena_netdev.h +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.h @@ -350,4 +350,15 @@ void ena_dump_stats_to_buf(struct ena_ad int ena_get_sset_count(struct net_device *netdev, int sset); +/* The ENA buffer length fields is 16 bit long. So when PAGE_SIZE == 64kB the + * driver passas 0. + * Since the max packet size the ENA handles is ~9kB limit the buffer length to + * 16kB. + */ +#if PAGE_SIZE > SZ_16K +#define ENA_PAGE_SIZE SZ_16K +#else +#define ENA_PAGE_SIZE PAGE_SIZE +#endif + #endif /* !(ENA_H) */