From patchwork Tue Aug 6 00:52:49 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ming Lei X-Patchwork-Id: 264825 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id B98EF2C0079 for ; Tue, 6 Aug 2013 10:53:55 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752229Ab3HFAxw (ORCPT ); Mon, 5 Aug 2013 20:53:52 -0400 Received: from mail-pd0-f169.google.com ([209.85.192.169]:34368 "EHLO mail-pd0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751913Ab3HFAxv (ORCPT ); Mon, 5 Aug 2013 20:53:51 -0400 Received: by mail-pd0-f169.google.com with SMTP id y11so3888774pdj.0 for ; Mon, 05 Aug 2013 17:53:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=x0N3hIKiTV6a5RQFowxW6v72eK5qzur70vRLuPL5nnE=; b=iaYfPS97IqE3cmraBh8eoVfXPzjMonyrTR7BDfH7+jCMsA+YpbnZiS8bJirctQxdSn SBBpAbCR8snyhxVTCjPAavo/VAhBbbh/S8BHKsmiX98sRXLYTRIAlkaJmi+cCKu9Itnm aP49D10iDrGnEH0NlgfQLtasV6XDxRRyNAdRRGBtnLpTsQPtvhk5x5oO9RfT3cK5nDvA zD+6k+0f7frzcLZMt3Z3AofiHptyswGm+7JM74TR7RUTj9P+LgcGrulrOrkKcqvIWw3N hfJ6x9uSgo6kuN/cXvpR9Qhad4OTnzMG8r4+dZwXM6ijcgG6EKSnj0OTzBVGjknN5zAF RNVQ== X-Received: by 10.68.164.1 with SMTP id ym1mr25539679pbb.33.1375750430956; Mon, 05 Aug 2013 17:53:50 -0700 (PDT) Received: from localhost ([183.37.198.249]) by mx.google.com with ESMTPSA id mr3sm1676632pbb.27.2013.08.05.17.53.43 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Mon, 05 Aug 2013 17:53:50 -0700 (PDT) From: Ming Lei To: "David S. Miller" , Greg Kroah-Hartman Cc: Oliver Neukum , Sarah Sharp , netdev@vger.kernel.org, linux-usb@vger.kernel.org, Ming Lei , Eric Dumazet , Ben Hutchings , Grant Grundler , Alan Stern , Freddy Xin Subject: [PATCH v3 4/4] USBNET: ax88179_178a: enable tso if usb host supports sg dma Date: Tue, 6 Aug 2013 08:52:49 +0800 Message-Id: <1375750370-18194-5-git-send-email-ming.lei@canonical.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1375750370-18194-1-git-send-email-ming.lei@canonical.com> References: <1375750370-18194-1-git-send-email-ming.lei@canonical.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch enables 'can_dma_sg' flag for ax88179_178a device if the attached host controller supports building packet from discontinuous buffers(DMA SG is possible), so TSO can be enabled and skb fragment buffers can be passed to usb stack via urb->sg directly. With the patch, system CPU utilization decreased ~50% and throughput increased by ~10% when doing iperf client test on one ARM A15 dual core board. Cc: Eric Dumazet Cc: Ben Hutchings Cc: Grant Grundler Cc: Oliver Neukum Cc: Alan Stern Cc: Freddy Xin Signed-off-by: Ming Lei --- drivers/net/usb/ax88179_178a.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c index fb0caa2..7a96326 100644 --- a/drivers/net/usb/ax88179_178a.c +++ b/drivers/net/usb/ax88179_178a.c @@ -1031,12 +1031,20 @@ static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf) dev->mii.phy_id = 0x03; dev->mii.supports_gmii = 1; + if (usb_device_no_sg_constraint(dev->udev)) + dev->can_dma_sg = 1; + dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM; dev->net->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM; + if (dev->can_dma_sg) { + dev->net->features |= NETIF_F_SG | NETIF_F_TSO; + dev->net->hw_features |= NETIF_F_SG | NETIF_F_TSO; + } + /* Enable checksum offload */ *tmp = AX_RXCOE_IP | AX_RXCOE_TCP | AX_RXCOE_UDP | AX_RXCOE_TCPV6 | AX_RXCOE_UDPV6; @@ -1310,6 +1318,10 @@ static int ax88179_reset(struct usbnet *dev) dev->net->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM; + if (dev->can_dma_sg) { + dev->net->features |= NETIF_F_SG | NETIF_F_TSO; + dev->net->hw_features |= NETIF_F_SG | NETIF_F_TSO; + } /* Enable checksum offload */ *tmp = AX_RXCOE_IP | AX_RXCOE_TCP | AX_RXCOE_UDP |