From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2A4D7C433DB for ; Fri, 29 Jan 2021 20:37:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C52FE64DDE for ; Fri, 29 Jan 2021 20:37:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233143AbhA2UhA (ORCPT ); Fri, 29 Jan 2021 15:37:00 -0500 Received: from vps0.lunn.ch ([185.16.172.187]:38862 "EHLO vps0.lunn.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232887AbhA2Ug4 (ORCPT ); Fri, 29 Jan 2021 15:36:56 -0500 Received: from andrew by vps0.lunn.ch with local (Exim 4.94) (envelope-from ) id 1l5aUu-003FSA-Aa; Fri, 29 Jan 2021 21:36:04 +0100 Date: Fri, 29 Jan 2021 21:36:04 +0100 From: Andrew Lunn To: Sven Van Asbroeck Cc: Bryan Whitehead , UNGLinuxDriver@microchip.com, David S Miller , Jakub Kicinski , Alexey Denisov , Sergej Bauer , Tim Harvey , Anders =?iso-8859-1?Q?R=F8nningen?= , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH net-next v1 1/6] lan743x: boost performance on cpu archs w/o dma cache snooping Message-ID: References: <20210129195240.31871-1-TheSven73@gmail.com> <20210129195240.31871-2-TheSven73@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210129195240.31871-2-TheSven73@gmail.com> Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org > diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c > index f1f6eba4ace4..f485320e5784 100644 > --- a/drivers/net/ethernet/microchip/lan743x_main.c > +++ b/drivers/net/ethernet/microchip/lan743x_main.c > @@ -1957,11 +1957,11 @@ static int lan743x_rx_next_index(struct lan743x_rx *rx, int index) > > static struct sk_buff *lan743x_rx_allocate_skb(struct lan743x_rx *rx) > { > - int length = 0; > + struct net_device *netdev = rx->adapter->netdev; > > - length = (LAN743X_MAX_FRAME_SIZE + ETH_HLEN + 4 + RX_HEAD_PADDING); > - return __netdev_alloc_skb(rx->adapter->netdev, > - length, GFP_ATOMIC | GFP_DMA); > + return __netdev_alloc_skb(netdev, > + netdev->mtu + ETH_HLEN + 4 + RX_HEAD_PADDING, > + GFP_ATOMIC | GFP_DMA); > } > > static void lan743x_rx_update_tail(struct lan743x_rx *rx, int index) > @@ -1977,9 +1977,10 @@ static int lan743x_rx_init_ring_element(struct lan743x_rx *rx, int index, > { > struct lan743x_rx_buffer_info *buffer_info; > struct lan743x_rx_descriptor *descriptor; > - int length = 0; > + struct net_device *netdev = rx->adapter->netdev; > + int length; Please keep to reverse christmass tree. > > - length = (LAN743X_MAX_FRAME_SIZE + ETH_HLEN + 4 + RX_HEAD_PADDING); > + length = netdev->mtu + ETH_HLEN + 4 + RX_HEAD_PADDING; > descriptor = &rx->ring_cpu_ptr[index]; > buffer_info = &rx->buffer_info[index]; > buffer_info->skb = skb; > @@ -2148,11 +2149,18 @@ static int lan743x_rx_process_packet(struct lan743x_rx *rx) > descriptor = &rx->ring_cpu_ptr[first_index]; > > /* unmap from dma */ > + packet_length = RX_DESC_DATA0_FRAME_LENGTH_GET_ > + (descriptor->data0); > if (buffer_info->dma_ptr) { > - dma_unmap_single(&rx->adapter->pdev->dev, > - buffer_info->dma_ptr, > - buffer_info->buffer_length, > - DMA_FROM_DEVICE); > + dma_sync_single_for_cpu(&rx->adapter->pdev->dev, > + buffer_info->dma_ptr, > + packet_length, > + DMA_FROM_DEVICE); > + dma_unmap_single_attrs(&rx->adapter->pdev->dev, > + buffer_info->dma_ptr, > + buffer_info->buffer_length, > + DMA_FROM_DEVICE, > + DMA_ATTR_SKIP_CPU_SYNC); So this patch appears to contain two different changes 1) You only allocate a receive buffer as big as the MTU plus overheads 2) You change the cache operations to operate on the received length. The first change should be completely safe, and i guess, is giving most of the benefits. The second one is where interesting things might happen. So please split this patch into two. If it does break, we can git bisect, and probably end up on the second patch. Thanks Andrew