Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751738AbbKYTQO (ORCPT ); Wed, 25 Nov 2015 14:16:14 -0500 Received: from mail-wm0-f49.google.com ([74.125.82.49]:38716 "EHLO mail-wm0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750832AbbKYTQD (ORCPT ); Wed, 25 Nov 2015 14:16:03 -0500 From: Ameen X-Google-Original-From: Ameen To: teve.glendinning@shawell.net Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Ameen Subject: [PATCH 3/3] Minor improvement for smsc95xx netusb driver performance. Date: Wed, 25 Nov 2015 21:15:56 +0200 Message-Id: <1448478956-5646-1-git-send-email-AmeenAli023@gmail.com> X-Mailer: git-send-email 2.5.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2227 Lines: 71 Reduce number of memcpy's by 1-2 improve transmit performance by 2-4%. or reduce cpu usage on a comparable value. Signed-off-by: Ameen Ali --- drivers/net/usb/smsc95xx.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index 66b3ab9..022d2f63 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -1830,7 +1830,9 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, { bool csum = skb->ip_summed == CHECKSUM_PARTIAL; int overhead = csum ? SMSC95XX_TX_OVERHEAD_CSUM : SMSC95XX_TX_OVERHEAD; - u32 tx_cmd_a, tx_cmd_b; + struct tx_commands_t { + u32 cmd_a, cmd_b, csum_preamble; + }tx_cmds; /* We do not advertise SG, so skbs should be already linearized */ BUG_ON(skb_shinfo(skb)->nr_frags); @@ -1855,26 +1857,26 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, + skb->csum_offset)) = csum_fold(calc); csum = false; + overhead = SMSC95XX_TX_OVERHEAD; } else { - u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); + tx_cmds.csum_preamble = smsc95xx_calc_csum_preamble(skb); skb_push(skb, 4); - cpu_to_le32s(&csum_preamble); - memcpy(skb->data, &csum_preamble, 4); + cpu_to_le32s(&tx_cmds.csum_preamble); } } - skb_push(skb, 4); - tx_cmd_b = (u32)(skb->len - 4); + tx_cmds.cmd_a = (u32)(skb->len) | TX_CMD_A_FIRST_SEG_ | + TX_CMD_A_LAST_SEG_; + + cpu_to_le32s(&tx_cmds.cmd_a); + + tx_cmds.cmd_b = (u32)(skb->len); if (csum) - tx_cmd_b |= TX_CMD_B_CSUM_ENABLE; - cpu_to_le32s(&tx_cmd_b); - memcpy(skb->data, &tx_cmd_b, 4); + tx_cmds.cmd_b |= TX_CMD_B_CSUM_ENABLE; + cpu_to_le32s(&tx_cmds.cmd_b); - skb_push(skb, 4); - tx_cmd_a = (u32)(skb->len - 8) | TX_CMD_A_FIRST_SEG_ | - TX_CMD_A_LAST_SEG_; - cpu_to_le32s(&tx_cmd_a); - memcpy(skb->data, &tx_cmd_a, 4); + skb_push(skb, 8); + memcpy(skb->data, &tx_cmds, overhead); return skb; } -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/